Autor |
Beitrag |
HenryHux
      
Beiträge: 542
Erhaltene Danke: 33
Windows 7 Premium
Delphi XE, Eclipse
|
Verfasst: Mo 26.12.11 12:15
Hi,
ich wollte mal unter Xe2 die dbExpress Komponenten mit MySql ausprobieren.
Nachdem ich einige Fehler zu fehlenden Treiber bekommen habe, habe ich mir den MySql Installer for Windows geladen.
Trotzdem kann ich keine Verbindung aufbauen:
Quelltext 1:
| DBX-Fehler: Der Treiber konnte nicht korrekt initialisiert werden. Die Client-Bibliothek könnte fehlen, nicht ordnungsgemäß installiert sein, eine falsche Version haben, oder der Treiber fehlt möglicherweise im Systempfad.. |
Vorhanden ist nur eine TSQLConnection mit Driver=MySQL.
Ob ich einen Login Versuch starte oder nicht, ich bekomme diesen Fehler.
Fehlen mir Treiber, oder was muss ich noch beachten?
lg
|
|
Nersgatt
      
Beiträge: 1581
Erhaltene Danke: 279
Delphi 10 Seattle Prof.
|
Verfasst: Mo 26.12.11 12:23
Bei Firebird + DbExpress muss man in der Connection den Pfad zur Clientlibrary angeben. Ich denke mir, dass das bei MySQL auch so sein wird:
Delphi-Quelltext 1: 2:
| Connection.LibraryName := 'dbxfb4d15.dll'; Connection.VendorLib := 'fbclient.dll'; |
_________________ Gruß, Jens
Zuerst ignorieren sie dich, dann lachen sie über dich, dann bekämpfen sie dich und dann gewinnst du. (Mahatma Gandhi)
|
|
HenryHux 
      
Beiträge: 542
Erhaltene Danke: 33
Windows 7 Premium
Delphi XE, Eclipse
|
Verfasst: Mo 26.12.11 12:53
Hm, das scheint nicht das Problem zu sein, die Pfade waren ja angegeben.
Allerdings klappt hier überhaupt keine Verbindungsart im Daten-Explorer mit dbExpress.
Habe alle Updates installiert und soweit ich weiß ist doch zb Firebird in jeder Xe2 Version enthalten, oder?
Das ist der Fehler den ich bei Verbindung testen kriege:
Quelltext 1:
| Borland.Data.TDBXError: DBX-Fehler: Der Treiber konnte nicht korrekt initialisiert werden. Die Client-Bibliothek könnte fehlen, nicht ordnungsgemäß installiert sein, eine falsche Version haben, oder der Treiber fehlt möglicherweise im Systempfad. |
Hat jemand ne Idee?
lg
|
|
jaenicke
      
Beiträge: 19312
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Mo 26.12.11 20:42
Bei der Professional hast du MySQL und Interbase zur Verfügung. Bei MySQL erinnere ich mich, dass nur eine bestimmte Version funktioniert. Die aktuelle nicht. Siehe Dokumentation, dort steht die Version 5.1 drin. Die 5.1.54 ging zum Beispiel. Die aktuelle Version 5.5 aber nicht.
Für diesen Beitrag haben gedankt: HenryHux
|
|
HenryHux 
      
Beiträge: 542
Erhaltene Danke: 33
Windows 7 Premium
Delphi XE, Eclipse
|
Verfasst: Mo 26.12.11 21:15
Okay, danke für den Tipp, bin weiter gekommen.
Bin sogar soweit, dass er den Verbindungstest erfolgreich besteht, ich weiß nur nicht ganz, was ich da gemacht habe
Und zwar habe ich erstmal MySQL 5.1.54 geladen. Damit war der Fehler erstmal weg.
Den Standard-Servernamen "ServerName" wollte er nicht akzeptieren, da habe ich es mit localhost probiert, nimmt er.
Dann akzeptiert er ebenfalls nicht den Datanbanknamen "DBNAME" und auch keinen anderen(die ich getestet habe). Außer "MYSQL".
Dann noch die konfigurierten Login Daten eingetragen, dass es so aussieht:
Verbindungstest (jpg, 50 KB)
Wie gesagt, dann klappt es.
Wieso habe ich noch nicht verstanden, ich werde mal weitermachen und sehen was sich noch tun lässt.
Vielen Dank
lg
Einloggen, um Attachments anzusehen!
|
|
jaenicke
      
Beiträge: 19312
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Mo 26.12.11 21:25
Wie sieht denn deine Datenbankkonfiguration aus? Also deine Datenbanken und Tabellen?
|
|
HenryHux 
      
Beiträge: 542
Erhaltene Danke: 33
Windows 7 Premium
Delphi XE, Eclipse
|
Verfasst: Mo 26.12.11 22:25
Hmm weiß nicht genau was du meinst..
Ich habe eine komplett neue Verbindung hinzugefügt, erstmal ohne Tabellen oder Sonstiges anzulegen.
Allerdings befinden sich schon einige Tabellen in der Konfiguration, die ich nicht erstellt habe.
Ich denke mal, die werden dann von anderen Anwendungen erstellt worden sein.
lg
|
|
jaenicke
      
Beiträge: 19312
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Mo 26.12.11 22:31
Ich meine: HenryHux hat folgendes geschrieben : | Dann akzeptiert er ebenfalls nicht den Datanbanknamen "DBNAME" und auch keinen anderen(die ich getestet habe). |
Bist du denn sicher, dass die Datenbanken so existieren wie du sie versucht hast einzutragen? Ich meine so etwas wie einen verwechselten Tabellen- und Datenbanknamen oder so. 
|
|
HenryHux 
      
Beiträge: 542
Erhaltene Danke: 33
Windows 7 Premium
Delphi XE, Eclipse
|
Verfasst: Mo 26.12.11 22:49
Ah ok hatte mich vertippt. Mit Delphi habe ich mir die Datenbanken ausgeben lassen, gibt 3 vorhandene, mit denen ich dann auch Verbindungen anlegen kann.
Klappt jetzt also alles, sogar recht einfach, wenn man von Anfang an gewusst hätte, wie
Danke,
lg
//Edit
Eine Frage hätte ich noch:
Ist es sicher die dbExpress Komponenten dynamisch bei Bedarf zu erzeugen und freizugeben, oder sollte ich die statisch auf dem Hauptformular verweilen lassen?
|
|
jaenicke
      
Beiträge: 19312
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Mo 26.12.11 22:56
Du kannst eine Tabelle auch einfach aus dem Datenbankexplorer auf dein Formular oder Datenmodul ziehen, falls du das noch nicht gemerkt hast. Dann werden die entsprechenden Komponenten automatisch angelegt und initialisiert.
Ich würde dir zu einem Datenmodul raten um die Verbindungen auszulagern. Das wiederum kannst du dann dynamisch erzeugen.
|
|
HenryHux 
      
Beiträge: 542
Erhaltene Danke: 33
Windows 7 Premium
Delphi XE, Eclipse
|
Verfasst: Mo 26.12.11 23:05
Okay, danke, damit werde ich mal ein bisschen rumexperimentieren.
Was mir noch aufgefallen ist, ist, dass unter 64bit nichts mehr funktioniert.
Gibt es da Lösungen für?
lg
|
|
jaenicke
      
Beiträge: 19312
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Di 27.12.11 00:06
Für 64-Bit musst du auch die 64-Bit Version von MySQL installiert haben schätze ich. So ist es jedenfalls bei Firebird und das ist ja eigentlich auch logisch.
|
|
HenryHux 
      
Beiträge: 542
Erhaltene Danke: 33
Windows 7 Premium
Delphi XE, Eclipse
|
Verfasst: Di 27.12.11 16:48
So, habe jetzt zum ersten Mal versucht ein Eintrag zu speichern.
Dabei bin ich auch wieder auf Probleme gestoßen, und zwar folgende :
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31:
| procedure TDatabase.Add(Dir: string); begin with DataModule1.MySQLTable do begin Filtered := false; Filter := 'Path='+Dir; Filtered := true; if FieldByName('Path').AsString = Dir then exit; Filtered := false;
Append; FieldByName('Path').AsString := Dir; Post; end;
with DataModule1.MySQLQuery do begin SQL.Text := 'INSERT INTO moviedatabase(ID,PATH) VALUES(:ID,:Dir);'; ParamByName('ID').Value := 0; ParamByName('Dir').Value := 'Dir'; ExecSQL; end; end; |
Wenn ich da große Umwege gehen muss um Einträge zu schreiben, dann ist die Methode auch nicht wirklich das richtige für mich..
Geht das nicht einfacher?
lg
|
|
jaenicke
      
Beiträge: 19312
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Di 27.12.11 18:10
Bei dbExpress kannst du nur in eine Richtung durch die Datensätze gehen. Daher brauchst du noch ein TClientDataSet, das die Daten und deren Änderungen zwischenspeichert. Mit ApplyUpdates schreibst du die dann zurück in die Datenbank.
|
|
HenryHux 
      
Beiträge: 542
Erhaltene Danke: 33
Windows 7 Premium
Delphi XE, Eclipse
|
Verfasst: Di 27.12.11 21:02
Okay, habe ich mal versucht.
Hier mein Konzept bis jetzt, klappt das so?
Quelltext 1:
| TSqlConnection -> TSqlDataSet -> TDataSetProvider -> TClientDataSet -> TDataSource |
Die sind praktisch so in Reihe geschaltet.
Wie mache ich das jetzt richtig, wenn ich etwas schreiben will?
Ich müsste, vorausgesetzt das klappt so, in dem DataSource eine Kopie der MySql Tabelle haben.
Jedoch kann ich dadrin ja nicht mit Sql-commands arbeiten, oder doch?
Ehrlich gesagt bin ich da ein bisschen verwirrt im Moment, was da wovon abhängt..
Edit: Ich habe es geschafft, dass ich mit einem TDBNavigator die DataSource verändern kann, welchen Weg kann ich ohne den Navigator gehen?
lg
|
|
HenryHux 
      
Beiträge: 542
Erhaltene Danke: 33
Windows 7 Premium
Delphi XE, Eclipse
|
Verfasst: Mi 28.12.11 16:42
Hi,
ich habe mal ein Beispiel mit MySql im Anhang, so wie das bei mir im Moment aussieht.
Es klappt alles, aber ich weiß nicht, wie ich Sql Befehle übermittle.
Vielleicht kann sich jemand, bei dem dbexpress funktioniert, das kurz angucken.
Danke 
Einloggen, um Attachments anzusehen!
|
|
Nersgatt
      
Beiträge: 1581
Erhaltene Danke: 279
Delphi 10 Seattle Prof.
|
Verfasst: Mi 28.12.11 19:25
Du musst nur eine TSQLQuery mit der TDatabase verbinden. Der Sqlbefehl kommt ins .CommandText
.Open, wenn er Datensätze zurückliefert.
.Exec, wenn er keine Datensätze zurückliefert.
Um es dann z.B. an ein Grid zu binden, verwende ich immer
TSQLQuery -> TDataSetProvider -> TClientDataset -> TDataSource -> Grid
_________________ Gruß, Jens
Zuerst ignorieren sie dich, dann lachen sie über dich, dann bekämpfen sie dich und dann gewinnst du. (Mahatma Gandhi)
|
|
|