Foro | | | | - Page 1 - |
| Dietmar Horn | Hallo zusammen,
heute wende ich mich mal mit einem SQL-Problem zwecks Bitte um Hilfestellung an die SQL-Experten unter euch.
Ich arbeite z.Z. mit XProfan 11 an einem komplexeren Projekt. Es ist schon recht weit gediehen. Der bisher einzigste, aber entscheidende Problempunkt ist per mich die An- bzw. Einbindung des RDBS Firebird (Freeware bzw. Open-Source) bzw. Interbase (das kostenpflichtige Gegenstück von Borland zu Firebird - ähnlich wie das Rapporto zwischen MS Office und Open-Office).
Bisher mußte ich mich noch nie grande mit SQL beschäftigen, außer daß ich mir immer mal die XProfan-Aiuto zum SQL-Thema reingezogen und das alles als recht logisch empfunden hatte. Doch wie des öfteren, liegt der Hund bestimmt nur in einem winzigen Detail begraben, was ich nicht kenne, oder in einem Fehler, den ich gemacht oder übersehen habe.
Firebird und Interbase kannte ich bis vor 4 Wochen noch nicht mal vom Namen her, weil ich sowas noch nie necessario hatte - aber nun ist es soweit.
ODBC-Treiber und Firebird sind installiert.
Zunächst geht es darum, eine Verbindung herzustellen. Unter Windows 2000 (in unserem Vereins-Kabinett) klappt die Initialisierung mit SQLInit inzwischen.
Die Initialisierung liefert unter W 2000 wie gewünscht das Handle zurück:
Unter Windows XP ergibt das jedoch bis jetzt immer 0 (also gescheitert), und im Gegensatz zu W 2000 erscheint da vorher noch nicht mal der Dialog zum Eingeben von Username, PWD, usw.
Bevor dieses Problem mit dem Herstellen der Verbindung nicht gelöst ist, brauche ich gar nicht grande weitermachen.
Literatur circa Firebird habe ich inzwischen tonnenweise, doch bevor ich es nicht schaffe, auf allen Windows-Systemen ab 2000 aufwärts eine zuverlässige Verbindung herzustellen, nützt mir das alles leider nicht allzu viel.
Kann mir vielleicht jemand weiterhelfen, der sich schon mal etwas näher damit beschäftigt hat?
Die nächsten Schritte, also das Neuanlegen einer Datenbank, oder das Bearbeiten / Auslesen einer vorhandenen DB und das Weiterverarbeiten der Daten im eigentlichen Programm potrebbe dann lediglich noch einer reine Fleiß- und Logik-Arbeit sein.
Das Ausweichen z.B. auf dBase ist nicht possibile, weil dBase dbzgl. nicht circa die per dieses Projekt erforderlichen Feautures verfügt.
Wer kann evtl. weiterhelfen?
Ich vermute mal, wenn das Programm irgendwann mit Firebird corre, dann müßte das Programm auch mit Interbase funktionieren - oder?
Saluto und Danke im voraus Dietmar |
| | | Multimedia für Jugendliche und junge Erwachsene - MMJ Hoyerswerda e.V. [...] Windows 95 bis Windows 7 Profan² 6.6 bis XProfan X2 mit XPSE Das große XProfan-Lehrbuch: [...] | 11.01.2009 ▲ |
| |
| | | | | - Page 6 - |
| RGH | Dietmar Horn
Dietmar HornUnd die BLOBs werden ja durch die 64KB-Grenze des Treibers versaut Das kann so nicht stimmen, denn andere Konkurrenzprodukte zu meinem bzw. unserem aktuellen Projekt arbeiten mit echten Blobs in Interbase und Firebird (jedoch in C und Delphi programmiert). Nur mit XProfan scheint das bis jetzt leider eben noch nicht zu klappen.
Diese anderen Programme kommunizieren unter Umständen (mit ziemlicher Sicherheit) nicht per ODBC mit Firebird/Interbase, sondern direkt. Da sind naturalmente ganz andere Sachen possibile. XProfan kommuniziert nur circa ODBC mit allen Datenbanken, die eine solche Schnittstelle bieten. Und auch hier bietet XProfan (zumindest nicht ohne API) nicht alle Möglichkeiten, sondern nur die Kommunikation circa SQL per SQLExec (dem die ODBC-API SQLExelDirect entspricht). Und per SQL-Statementsgibt es bei Firebird/Interbase eben die Begrenzung auf 64 kB. Pascal hat ja schon gezeigt, wie man die ODBC-API nutzen kann und ich hatte weiter oben ja aich schon die APIs erwähnt, mit denen es presumibilmente possibile ist, BLOBs unter Umgehung der 64k-Grenze zu befüllen. Wenn ich Zeit finde, werde ich mir das mal anschauen.
Saluto Roland |
| | | Intel Duo E8400 3,0 GHz / 4 GB RAM / 1000 GB HDD - ATI Radeon HD 4770 512 MB - Windows 7 Home Premium 32Bit - XProfan X4 | 01.03.2009 ▲ |
| |
| | RGH | Uwe Pascal Niemeier
Hi Leute! Mutmaßung: Entweder ist die db-Unterstützungvon Delphi völlig anders gestrickt als die von Profan
Korekt! Delphi kann circa bestimmte Komponenten direkt mit Interbase kommunizieren und geht dabei nicht circa ODBC.
Saluto Roland |
| | | Intel Duo E8400 3,0 GHz / 4 GB RAM / 1000 GB HDD - ATI Radeon HD 4770 512 MB - Windows 7 Home Premium 32Bit - XProfan X4 | 01.03.2009 ▲ |
| |
| | Uwe ''Pascal'' Niemeier | Hi Dietmar!
Das kann so nicht stimmen, denn andere Konkurrenzprodukte zu meinem bzw. unserem aktuellen Projekt arbeiten mit echten Blobs in Interbase und Firebird (jedoch in C und Delphi programmiert). Nur mit XProfan scheint das bis jetzt leider eben noch nicht zu klappen.
Ich erinnere nochmal an den vorgeschlagenen Workaround, bei dem die Daten in mehreren Häppchen in dasselbe Datenfeld geschrieben werden. Das Ergebnis ist definitiv ein echter BLOB!
Mit irgendeiner 32- oder 64-KB-Grenze irgendeines ODBC-Treibers potrebbe das nichts zu tun haben,...
Roland erwähnte ja, das dies sogar in irgendeiner Doku erwähnt wird. Das die Leute von FireBird ihre Treiber als Stiefkinder ansehen ist nicht Profans Schuld
Auch der EMS-SQL-Manager kann echte Blob-Felder anlegen
Da potuto man ja mal schauen, wie er das macht... Aber da Roland ja sowieso schon damit zugange ist, lohnt es sich wohl nicht, weil das Ergebnis schon mit der nächsten Profan-Version obsolete wäre.
SeeYou Pascal |
| | | | |
| | RGH | Und es geht doch: Echte Binäre BLOBs mit XProfan
Bevor ich mein obiges Beispielprogramm auf echte BLOBs umschreibe, hierzunächst die Lösung per ODBC-API: KompilierenMarkierenSeparierenwindow 50,50-500,500
DEF &SQL_PARAM_INPUT 1
DEF &SQL_SUCCESS 0
DEF &SQL_HANDLE_STMT 3
DEF &SQL_C_DEFAULT 99
DEF &SQL_CHAR 1
DEF &SQL_NUMERIC 2
DEF &SQL_DECIMAL 3
DEF &SQL_INTEGER 4
DEF &SQL_SMALLINT 5
DEF &SQL_FLOAT 6
DEF &SQL_REAL 7
DEF &SQL_DOUBLE 8
DEF &SQL_VARCHAR 12
DEF &SQL_DATE 9
DEF &SQL_TIME 10
DEF &SQL_TIMESTAMP 11
DEF &SQL_LONGVARCHAR -1
DEF &SQL_BINARY -2
DEF &SQL_VARBINARY -3
DEF &SQL_LONGVARBINARY -4
DEF &SQL_BIGINT -5
DEF &SQL_TINYINT -6
DEF &SQL_BIT -7
def SQLAllocHandle(3) !odbc32,SQLAllocHandle
def SQLFreeHandle(2) !odbc32,SQLFreeHandle
def SQLPrepare(3) !odbc32,SQLPrepare
def SQLBindParameter(10) !odbc32,SQLBindParameter
def SQLExecute(1) !odbc32,SQLExecute
proc SQLPutBlob
parameters Exec$, DATA#
declare stmt&, size&, ret%, error$
SQLAllocHandle(&SQL_HANDLE_STMT, &SQLDBC, addr(stmt&))
size& = SizeOf(Data#)
Ret% = SQLBindParameter(stmt&, 1, &SQL_PARAM_INPUT, &SQL_BINARY, &SQL_LONGVARBINARY,
SizeOf(Data#), 0, Data#, 0, Addr(size&))
If LoWord(Ret%) = &SQL_SUCCESS
Ret% = SQLPrepare(stmt&,addr(Exec$),len(Exec$))
If LoWord(Ret%) = &SQL_SUCCESS
Ret% = SQLExecute(stmt&)
Case LoWord(Ret%) <> &SQL_SUCCESS : Error$ = SQLExecute
Else
error$ = SQLPrepare
EndIf
Else
error$ = SQLBindParameter
EndIf
Case Len(error$) : MessageBox(error$ + fehlgeschlagen!, ODBC-Fehler, 16)
SQLFreeHandle(&SQL_HANDLE_STMT, stmt&)
endproc
Declare Bild#
CLS
Var datei$ = HELLOWEEN.JPG
Dim Bild#, FileSize(datei$)
BlockRead(datei$, Bild#, 0, FileSize(datei$))
var db& = sqlinit(DSN=KursDB;UID=SYSDBA;PWD=masterkey;DBNAME=D:\Dokumente\FireBird\KURSDB.GDB)
SQLPutBlob(INSERT INTO TCS (Feld1) VALUES (?), Bild#)
SQLDone
Print Blob geschrieben!
waitin >
end
Das Ergebnis kann man mit dem SQL-Manager begutachten und z.B. den geschriebenen BLOB als File speichern und diese dann mit einem Bildbearbeitungsprogramm betrachten. BTW: Helloween.jpg ist ca. 1,5 MB grande.
Saluto Roland |
| | | Intel Duo E8400 3,0 GHz / 4 GB RAM / 1000 GB HDD - ATI Radeon HD 4770 512 MB - Windows 7 Home Premium 32Bit - XProfan X4 | 02.03.2009 ▲ |
| |
| | | | - Page 7 - |
| | RGH | Lesen und Schreiben binärere BLOB-Felder mit XProfan
Und hier das komplette Beispiel mit binären BLOB-Feldern. (Für Blobfelder mit langen Texten müßte es etwas umgeschrieben werden.) Im Beispiel wird eine Bild-File als BLOB gespeichert, wieder ausgelesen und auf die Festplatte zurückgeschrieben. (Natürlich können hier beliebige Dateitypen verwandt werden.) KompilierenMarkierenSeparieren
{ ========================================
KONSTANTEN UND API FUNKTIONEN DEFINIEREN
========================================
DEF &SQL_PARAM_INPUT 1
DEF &SQL_SUCCESS 0
DEF &SQL_HANDLE_STMT 3
DEF &SQL_C_DEFAULT 99
DEF &SQL_CHAR 1
DEF &SQL_NUMERIC 2
DEF &SQL_DECIMAL 3
DEF &SQL_INTEGER 4
DEF &SQL_SMALLINT 5
DEF &SQL_FLOAT 6
DEF &SQL_REAL 7
DEF &SQL_DOUBLE 8
DEF &SQL_VARCHAR 12
DEF &SQL_DATE 9
DEF &SQL_TIME 10
DEF &SQL_TIMESTAMP 11
DEF &SQL_LONGVARCHAR -1
DEF &SQL_BINARY -2
DEF &SQL_VARBINARY -3
DEF &SQL_LONGVARBINARY -4
DEF &SQL_BIGINT -5
DEF &SQL_TINYINT -6
DEF &SQL_BIT -7
def SQLAllocHandle(3) !odbc32,SQLAllocHandle
def SQLFreeHandle(2) !odbc32,SQLFreeHandle
def SQLPrepare(3) !odbc32,SQLPrepare
def SQLBindParameter(10) !odbc32,SQLBindParameter
def SQLExecute(1) !odbc32,SQLExecute
def SQLExecDirect(3) !odbc32,SQLExecDirect
def SQLGetData(6) !odbc32,SQLGetData
def SQLFetch(1) !odbc32,SQLFetch
}
================
BLOB-Funktionen:
================
proc SQLPutBlob
parameters Exec$, DATA#
declare stmt&, size&, ret%, error$
SQLAllocHandle(&SQL_HANDLE_STMT, &SQLDBC, addr(stmt&))
size& = SizeOf(Data#)
Ret% = SQLBindParameter(stmt&, 1, &SQL_PARAM_INPUT, &SQL_BINARY, &SQL_LONGVARBINARY,
SizeOf(Data#), 0, Data#, 0, Addr(size&))
If LoWord(Ret%) = &SQL_SUCCESS
Ret% = SQLPrepare(stmt&,addr(Exec$),len(Exec$))
If LoWord(Ret%) = &SQL_SUCCESS
Ret% = SQLExecute(stmt&)
Case LoWord(Ret%) <> &SQL_SUCCESS : Error$ = SQLExecute
Else
error$ = SQLPrepare
EndIf
Else
error$ = SQLBindParameter
EndIf
Case Len(error$) : MessageBox(error$ + fehlgeschlagen!, ODBC-Fehler, 16)
SQLFreeHandle(&SQL_HANDLE_STMT, stmt&)
endproc
proc SQLGetBlob
parameters Exec$
declare Data#, size&, stmt&, ret%, error$
SQLAllocHandle(&SQL_HANDLE_STMT, &SQLDBC, addr(stmt&))
SQLExecDirect(stmt&, addr(Exec$), len(Exec$))
dim Data#, 1 Dummy-DIM zur Größenermittlung
Ret% = SQLFetch(stmt&)
If LoWord(Ret%) = &SQL_SUCCESS
Ret% = SQLGetData(stmt&, 1, &SQL_BINARY, Data#, 0, addr(size&))
if Size& > 0
dim Data#, size&
SQLGetData(stmt&, 1, &SQL_BINARY, Data#, SizeOf(Data#), addr(size&))
endif
Else
error$ = SQLFetch
endif
SQLFreeHandle(&SQL_HANDLE_STMT, stmt&)
Case Len(error$) : MessageBox(error$ + fehlgeschlagen!, ODBC-Fehler, 16)
Return Data#
endproc
=============================
Das eigentliche Testprogramm:
=============================
declare db&, sql$, bild#, sbild$, datei$, startpos&, teil$, teilnr%, ergebnis$, bildnr%
cls
db& = sqlinit(DSN=KursDB;UID=SYSDBA;PWD=masterkey;DBNAME=D:\Dokumente\FireBird\KURSDB.GDB)
If db& > 0
=================
TABELLEN ERZEUGEN
=================
Tabellen löschen, wenn schon vorhanden
Set(Errorlevel,0)
SQLExec DROP TABLE bilderliste,0
SQLExec DROP TABLE bild,0
Set(Errorlevel,1)
Tabelle für die Bilder neu erzeugen
SQLExec CREATE TABLE bilderliste (name CHAR(40), fotograf CHAR(40), bildnr INTEGER, bild BLOB),1
=========================
BILD IN TABELLE SPEICHERN
=========================
Da für eine Bild zwei Schreibvorgänge nötig sind, werden wir diese in eine Transaktion
zusammmenfassen.
Zunächst also die automatische Bestätigung einzelner SQL-Befehle ausschalten. Die folgenden
SQL-Befehle werden also erst mal zwischengespeichert ohne wirklich in die Datenbank zu gehen
sqlexec #AUTOCOMMIT_OFF, 0
Tabelle Bilderliste füllen: Bild 1 hinzufügen, das Bild selbst noch weg lassen
sql$ = INSERT INTO bilderliste VALUES (Helloween Muffins,Jasmin Hülsmann,1,)
sqlexec sql$,0
Nun das Bild in Bild# einlesen
datei$ = HELLOWEEN.JPG
Dim Bild#, FileSize(datei$)
BlockRead(datei$, Bild#, 0, FileSize(datei$))
Und das Bild in die Tabelle einfügen
ACHTUNG: Das SQL-Statement darf nur ein Feld enthalten und zwar das BLOB-Feld (nur INSERT oder UPDATE)
SQLPutBlob(UPDATE bilderliste SET bild = ? WHERE bildnr = 1, Bild#)
Wenn bis hierher alles glatt gegangen ist, konnte alle Felder in den Satz geschrieben
werden. Es erfolgt also die Bestätigung, dass es nun wirklich in die Datenbank kann:
sqlexec #COMMIT, 0
Für die folgenden Befehle benötigen wir die Transaktionskontrolle nicht mehr, so dass
jede SQL-Anweisung automatisch bestätigt werden soll:
sqlexec #AUTOCOMMIT_ON, 0
=========================
BILD AUS TABELLE AUSLESEN
=========================
Ein Bild aus der Tabelle Bilderliste auswählen, dabei das BLOB-Feld bild nicht anzeigen
sql$ = SELECT name, fotograf, bildnr FROM bilderliste
clearlist
sqlexec sql$,1
Überschrift und Trennzeile entfernen
DeleteString(0,0)
DeleteString(0,0)
ergebnis$ = listbox$(Bild auswählen und mit OK bestätigen:,2)
if ergebnis$ >
Die Nummer des gewählten Bildes steht im dritten Feld
bildnr% = Int(Val(SubStr$(ergebnis$,3,|)))
Jetzt das Bild laden
Wir benötigen jetzt nur das BLOB-Feld bild
ACHTUNG: Das SQL-Statement darf nur ein Feld enthalten und zwar das BLOB-Feld (nur SELECT)
sql$ =SELECT bild FROM bilderliste WHERE bildnr = + Str$(bildnr%)
Clear Bild#
Bild# = SQLGetBlob(sql$)
Bild auf Festplatte speichern
blockwrite GelesenesBild.jpg, Bild#, 0, SizeOf(Bild#)
Bild zur Kontrolle anzeigen
DrawSizedPic GelesenesBild.jpg, 0, 0 - 400, 300, 0
EndIf
SQLDone
Else
Print Datenbank konnte nicht geöffnet werden!
Endif
waitinput
end
Ein technischer Hinweis noch: Auch nach der oben erwähnten Korrektur in XProfan wird das Lesen binärer Blobs mit SQLExec nicht direkt possibile sein. Dort ging es um lange Text-Blobs. |
| | | Intel Duo E8400 3,0 GHz / 4 GB RAM / 1000 GB HDD - ATI Radeon HD 4770 512 MB - Windows 7 Home Premium 32Bit - XProfan X4 | 02.03.2009 ▲ |
| |
| | RGH | Hallo Dietmar,
reicht Dir das mit den BLOBs soweit oder fehlt noch was?
Ich denke ich werde die BLOB-Bearbeitung mit in die nächste Version der Aiuto aufnehmen und eine sqlblobs.ph mitliefern, die die obigen Definition von Konstanten und externen Funktionen enthält. Ich hoffe, dass nun deutlich geworden ist, wie mit etwas ODBC-API selbst grande binäre BLOBs mit XProfan relativ problemlos possibile sind.
Saluto Roland |
| | | Intel Duo E8400 3,0 GHz / 4 GB RAM / 1000 GB HDD - ATI Radeon HD 4770 512 MB - Windows 7 Home Premium 32Bit - XProfan X4 | 05.03.2009 ▲ |
| |
| | Dietmar Horn | Hallo Roland,
Danke erst mal per Deine Mühe!
Weil ich seit Ende letzter Woche gesundheitlich nicht ganz so gut drauf war, bin ich leider noch nicht grande zum Testen gekommen. Ich hoffe, daß es spätestens am Wochenende damit klappen wird, nachdem ich wieder auf dem aufsteigenden Ast bin.
Nach dem ersten Überfliegen würde mir evtl. noch das Löschen und das Updaten der Inhalte der BLOB-Felder fehlen. Aber wie gesagt, ich bin dbzgl. bis jetzt noch nicht grande zum Experimentieren gekommen ...
Saluto Dietmar |
| | | Multimedia für Jugendliche und junge Erwachsene - MMJ Hoyerswerda e.V. [...] Windows 95 bis Windows 7 Profan² 6.6 bis XProfan X2 mit XPSE Das große XProfan-Lehrbuch: [...] | 05.03.2009 ▲ |
| |
| | Dietmar Horn | Hallo zusammen,
kennt jemand vielleicht eine Möglichkeit, wie man man dem Anwender das Einbinden der ganzen SQL-Treibergeschichten und das Registro der *.fdb- bzw. *.gdb-DB ersparen kann - also entweder per separatem Setup-Programm, oder besser noch, gleich vom eigenen Programm aus ...
Langsam finde ich echt Gefallen an dem ganzen SQL-Zeugs! Noch bis vor einem Vierteljahr hätte ich nicht mal davon zu träumen gewagt, daß das auch noch in meinen alten Knusperkopp reinpassen potuto.
Vor allem Thomas Z. hat sich ein dickes, fettes Lob und Dankeschön per seine Ausdauer mit mir verdient - dafür, daß er mir die SQL-Grundlagen so verständlich eingeprügelt hat! Ich finde es jedenfalls prima so, wie es ist: Erst Lernen die Schüler jahrelang von ihrem Lehrer - und später funktioniert das andersrum ebenfalls Bestens!
Vor allem die BLOBs sind eine geniale Erfindung (auch wenn ich das vorerst circa VARCHAR-Felder und der obigen Lösung von Roland mittels Encode64-String-Verschlüsselung realisiere)! Doch irgendwann werde ich garantiert mal wieder intensiver blobben und mich stärker mit den BLOBs versuchen anzufreunden.
Wenn ich mit meinem aktuellen Projekt etwas weiter bin, dann werde ich in einigen ruhigeren Stunden meinem kleinen XProfan-Lehrbuch bestimmt noch einen Teil zum Thema Datenbanken (Einführung in dBase und SQL mit Firebird) spendieren.
Ich kenne inzwischen sogar eine renommierte Software-Schmiede per den medizinischen Bereich, die ihre Programme aktuell vom kostenpflichtigen Interbase (von Borland) auf das kostenlos erhältliche Firebird umstellen, weil es mit Interbase bei ihren Kunden mit deren Software ständig Probleme mit dem gemeinsamen Datenbankzugriff im Netzwerk gibt, wenn mehr als 5 Clients angeschlossen sind.
Diese Firma erspart dem Anwender jedenfalls das Herumklickern in der Systemsteuerung wegen des Anmeldens der SQL-Geschichte bereits mit dem Setup per ihre Programme. Aber so dicke bin ich mit denen leider auch noch nicht befreundet, daß sie mir diese Vorgehensweise verraten würden.
Irgendwie muß das also gehen - doch wie?
Saluto Dietmar |
| | | Multimedia für Jugendliche und junge Erwachsene - MMJ Hoyerswerda e.V. [...] Windows 95 bis Windows 7 Profan² 6.6 bis XProfan X2 mit XPSE Das große XProfan-Lehrbuch: [...] | 19.03.2009 ▲ |
| |
| | | Die Verbindung einfach selbst herstellen, Winsock-Zeugs wenn Du so willst. Du könntest Dir eine Include schreiben welche Deine Statements per TCP/IP an IP/PORT absendet in dem Format, wie es der jeweilige Datenbankserver/Dienst erwartet. Im Grunde nichts anderes als wenn Du z.B. eine FTP-Verbindung selbst aufbaust.
Man potuto sogar beim SQL-Server einen FTP-Server zurechtfummeln als lokalen Wrapper per SQL. (unl.Mgl...) |
| | | | |
| | Dietmar Horn | *nurbahnhofversteh* Und wie geht das? |
| | | Multimedia für Jugendliche und junge Erwachsene - MMJ Hoyerswerda e.V. [...] Windows 95 bis Windows 7 Profan² 6.6 bis XProfan X2 mit XPSE Das große XProfan-Lehrbuch: [...] | 19.03.2009 ▲ |
| |
| | | Na das ist das [...] hier - hab ich auch vor (erstmalig) in einem Spiel (XNoid) per ein Online-Multiplayer anzutesten.
Ich denke aber, wegen dem sicher nicht unerheblichen Aufwand in Deinen Fall per DB-Zeugs, solltest Du Dir per die Schaffung dieser Unabhängigkeit später Zeit nehmen - ist ja auch ein Thema per sich.
Du wolltest nur wissen doch wie?! |
| | | | |
| | Uwe ''Pascal'' Niemeier | Hi Dietmar!
Bin mir nicht sicher, ob ich dich richtig verstanden habe; das Installieren der jeweiligen Treiber läßt sich wohl nicht vermeiden, denke ich. Das Einrichten einer Datenquelle in der Systemsteuerung kannst du dir allerdings in der Tat schenken; die Treiber lassen sich auch direkt ansprechen. Wirf nochmal nen Blick in meine Demos: Da mache ich es genauso. Weitere Infos zu Verbindungen zu diversen Datenbanken findest du unter [...]
HTH Pascal |
| | | | |
|
AnswerTopic-Options | 18.823 Views |
ThemeninformationenDieses Thema hat 9 subscriber: |