Autor Beitrag
HenryHux
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 542
Erhaltene Danke: 33

Windows 7 Premium
Delphi XE, Eclipse
BeitragVerfasst: 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:
ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1581
Erhaltene Danke: 279


Delphi 10 Seattle Prof.
BeitragVerfasst: 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:
ausblenden 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 542
Erhaltene Danke: 33

Windows 7 Premium
Delphi XE, Eclipse
BeitragVerfasst: 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:
ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19312
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 542
Erhaltene Danke: 33

Windows 7 Premium
Delphi XE, Eclipse
BeitragVerfasst: 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 :D
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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19312
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Mo 26.12.11 21:25 
Wie sieht denn deine Datenbankkonfiguration aus? Also deine Datenbanken und Tabellen?
HenryHux Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 542
Erhaltene Danke: 33

Windows 7 Premium
Delphi XE, Eclipse
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19312
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Mo 26.12.11 22:31 
Ich meine:
user profile iconHenryHux hat folgendes geschrieben Zum zitierten Posting springen:
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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 542
Erhaltene Danke: 33

Windows 7 Premium
Delphi XE, Eclipse
BeitragVerfasst: 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 :D

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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19312
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 542
Erhaltene Danke: 33

Windows 7 Premium
Delphi XE, Eclipse
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19312
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 542
Erhaltene Danke: 33

Windows 7 Premium
Delphi XE, Eclipse
BeitragVerfasst: 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 :

ausblenden volle Höhe Delphi-Quelltext
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
  //Methode 1
  with DataModule1.MySQLTable do begin
    //Doppelten Pfad Eintrag prüfen
    Filtered := false;
    Filter := 'Path='+Dir;
    Filtered := true;
    if FieldByName('Path').AsString = Dir then exit;
    Filtered := false;

    //Neuen Datensatz erstellen
    Append;
    FieldByName('Path').AsString := Dir;
    Post;
    //Im Projekt ist eine Exception der Klasse EDatabaseError mit der Meldung
    //'MySQLTable: Diese Operation ist bei einer unidirektionalen
    //Datenmenge nicht gestattet' aufgetreten.
  end;

  //Methode 2
  with DataModule1.MySQLQuery do begin
    SQL.Text := 'INSERT INTO moviedatabase(ID,PATH) VALUES(:ID,:Dir);';
    ParamByName('ID').Value := 0;
    ParamByName('Dir').Value := 'Dir';
    ExecSQL;
      //Im Projekt ist eine Exception der Klasse TDBXError mit der Meldung
      //'Der dbExpress-Treiber unterstützt den Datentyp TDBXTypes.UINT8 nicht.
      //Fehlermeldung des Herstellers:  .' aufgetreten.
  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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19312
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 542
Erhaltene Danke: 33

Windows 7 Premium
Delphi XE, Eclipse
BeitragVerfasst: Di 27.12.11 21:02 
Okay, habe ich mal versucht.
Hier mein Konzept bis jetzt, klappt das so?
ausblenden 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 542
Erhaltene Danke: 33

Windows 7 Premium
Delphi XE, Eclipse
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1581
Erhaltene Danke: 279


Delphi 10 Seattle Prof.
BeitragVerfasst: 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)