Wie funktioniert der Zugriff auf MySQL-Datenbank ?

Für Themen zu Datenbanken und Zugriff auf diese. Auch für Datenbankkomponenten.
Linkat
Lazarusforum e. V.
Beiträge: 530
Registriert: So 10. Sep 2006, 23:24
OS, Lazarus, FPC: Linux Mint 21.3; Lazarus 3.0 FPC 3.2.2; RaspiOS
CPU-Target: AMD 64, ARM 32
Wohnort: nr Stuttgart

Wie funktioniert der Zugriff auf MySQL-Datenbank ?

Beitrag von Linkat »

Hallo,
ich möchte auf Messdaten zugreifen, die in einer MySQL-Datenbank abgelegt sind. Wie kann ich mit Hilfe von Lazarus auf die Daten zugreifen. Reichen mir die Lazarus-Komponenten TMySQLxxConnection (xx für Version), oder sollte ich mir die ZEOS-Komponenten installieren?

Wo finde ich eine Beschreibung?

Oder hat jemand ein kleines Beispiel-Projekt, oder weis jemand wo ein Beispiel zu finden ist?

Gruß, Linkat

Benutzeravatar
theo
Beiträge: 10497
Registriert: Mo 11. Sep 2006, 19:01

Re: Wie funktioniert der Zugriff auf MySQL-Datenbank ?

Beitrag von theo »

Linkat hat geschrieben:Wo finde ich eine Beschreibung?
Oder hat jemand ein kleines Beispiel-Projekt, oder weis jemand wo ein Beispiel zu finden ist?


Wie wär's mit dem Lazarus Wiki?

z.B. hier:
http://wiki.lazarus.freepascal.org/MySQLDatabases/de

Anmerkung: Die Funktionen "show databases" und "show tables" funktionieren bei mir nicht.
Ich muss die Datenbank und Tabelle in diesem Beispiel also vorgeben.

Linkat
Lazarusforum e. V.
Beiträge: 530
Registriert: So 10. Sep 2006, 23:24
OS, Lazarus, FPC: Linux Mint 21.3; Lazarus 3.0 FPC 3.2.2; RaspiOS
CPU-Target: AMD 64, ARM 32
Wohnort: nr Stuttgart

Beitrag von Linkat »

Danke Theo,
werde mir das Wiki durchlesen und hoffentlich verstehen.

Gruß, Linkat

Linkat
Lazarusforum e. V.
Beiträge: 530
Registriert: So 10. Sep 2006, 23:24
OS, Lazarus, FPC: Linux Mint 21.3; Lazarus 3.0 FPC 3.2.2; RaspiOS
CPU-Target: AMD 64, ARM 32
Wohnort: nr Stuttgart

Beitrag von Linkat »

Hallo,
nachdem ich mir das DB-Wiki durchgelesen und größten Teils verstanden habe, habe ich versucht das Beispiel nachzuvollziehen.
Die Komponenten TMySQL50Connection, TSQLQuery und TSQLTransaction habe ich auf meine Form gezogen und laut Anweisung miteinander verknüpft.

Nach Start des Programmes wird folgende Fehlermeldung ausgegeben:

TMySQLxxConnection can not work with the installed MySQL client version (3.23.31).
Press Ok to ignore and risk data corruption.
Press Cancel to kill the program.


[img]c:\SQLFehler.bmp[/img]

(Nebenbei, wie kann man denn ein Bild einfügen? Die Datei SQLFehler.bmp wollte ich eigentlich einfügen.)


Wo liegt das Problem???

Oder wer kann mir ein "funktionierendes Mini-Programm" zum Auslesen von MySQL-Daten zuschicken bzw. hier ins Forum einstellen? Wäre echt toll.

Gruß, Linkat

Benutzeravatar
theo
Beiträge: 10497
Registriert: Mo 11. Sep 2006, 19:01

Beitrag von theo »

Welchen Teil von

TMySQLxxConnection can not work with the installed MySQL client version (3.23.31).

verstehst Du nicht?

monta
Lazarusforum e. V.
Beiträge: 2809
Registriert: Sa 9. Sep 2006, 18:05
OS, Lazarus, FPC: Linux (L trunk FPC trunk)
CPU-Target: 64Bit
Wohnort: Dresden
Kontaktdaten:

Beitrag von monta »

[img]c:\SQLFehler.bmp[/img]

(Nebenbei, wie kann man denn ein Bild einfügen? Die Datei SQLFehler.bmp wollte ich eigentlich einfügen.)

einfach beim bearbeiten des Beitrages unten auf Attachment hinzufügen gehen, Bild auswählen und hochladen ;)
Die [img]-Tags dienen ja nur zum verlinken zu einer anderen Bild-URL.

Zum eigentlichen Problem...
TMySQLxxConnection can not work with the installed MySQL client version (3.23.31).
...sagt es eigentlich schon schön. Du hast MySQL in der Version 3.23.31, aber TMySQL50Connection ist für MySQL Version 5 ausgelegt ;)
Ich weiß nicht, ob TMySQL40Connection mit der MySQL Version 3 geht, müsstest du mal probieren, wenn nicht, musst du wohl eine neuere MySQL-Version installieren.

Linkat
Lazarusforum e. V.
Beiträge: 530
Registriert: So 10. Sep 2006, 23:24
OS, Lazarus, FPC: Linux Mint 21.3; Lazarus 3.0 FPC 3.2.2; RaspiOS
CPU-Target: AMD 64, ARM 32
Wohnort: nr Stuttgart

Beitrag von Linkat »

Hallo Theo,
es dürfte kein MySQL client der Version 3.23.31 auf meinem Rechner sein.

Ich habe mir vor kurzem MySQL 5.0 (File name: mysql-gui-tools-5.0-r6-win32.msi; ca. 18 MB) installiert. Die Daten, auf die ich zugreifen möchte, werden mit MySQL 4.0 (oder 4.1) erstellt. Warum das Programm aber die Version 3.23.31 anmeckert, ist mir nicht verständlich.

Für mich stellt sich eben die Frage ist das irgend ein Versionskonflikt, oder aber mache ich irgend etwas falsch (was wohl am wahrscheinlichsten ist).

@monta
normalerweise kann man mit einer neueren Version (z.B. 5.0) eine ältere Version (z.B. 3.0 oder 4.0) bearbeiten, aber nicht unbedingt mit einer älteren Version eine neuere. Aber ich möchte die Daten nicht verändern, sondern nur lesen und weiter verarbeiten.

Kann man eigentlich auch auf die MySQL-Daten (nur lesend) mit den anderen DB-Komponnenten zugreifen?

Aber das werde ich erst nächste Woche testen könne, jetzt werde ich erst einmal ein paar Tage Hausrenovieren dazwischen schieben müssen.

Gruß, Linkat

Christian
Beiträge: 6079
Registriert: Do 21. Sep 2006, 07:51
OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z)
CPU-Target: AVR,ARM,x86(-64)
Wohnort: Dessau
Kontaktdaten:

Beitrag von Christian »

normalerweise kann man mit einer neueren Version (z.B. 5.0) eine ältere Version (z.B. 3.0 oder 4.0) bearbeiten, aber nicht unbedingt mit einer älteren Version eine neuere. Aber ich möchte die Daten nicht verändern, sondern nur lesen und weiter verarbeiten.


Es geht hier nicht um Datenversionen das handelt MySQL intern es geht um die schnettstellenevrsionen (die dll) und da geht nichts anderes als das wofür die bindings ausgelegt sind.

Dein lazarus programm findet nur oder zumindest zuerst eine mysql 3.23 interface dll die schwirrt irgendwo auf deinem system rum.
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

Linkat
Lazarusforum e. V.
Beiträge: 530
Registriert: So 10. Sep 2006, 23:24
OS, Lazarus, FPC: Linux Mint 21.3; Lazarus 3.0 FPC 3.2.2; RaspiOS
CPU-Target: AMD 64, ARM 32
Wohnort: nr Stuttgart

Beitrag von Linkat »

Ich habe aber vor der Installation von MySQL 5.0 die mysql**.dll und libmysql**.dll im System32-Ordner gelöscht. Nachdem die erste derartige Fehlermeldung kam, habe ich auch noch die Registry durchforstet, aber nichts vedächtiges gefunden. Wie kann man gegebenenfalls noch so eine vagabuntierende Datei finden?

Gruß, Linkat
Linux Mint 21; Lazarus 2.2.4 FPC 3.2.2; RaspiOS

Christian
Beiträge: 6079
Registriert: Do 21. Sep 2006, 07:51
OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z)
CPU-Target: AVR,ARM,x86(-64)
Wohnort: Dessau
Kontaktdaten:

Beitrag von Christian »

Indem du aklle mysql*.dll dateien suchst und dann in den Eigenschaften die Version anschaust. Villeicht ist der DepencyWalker auch ganz hilfeich weiss nicht genau wie die dll geladen wird wenn sie statisch gelinkt wird zeigt der dir an wo soie ist und was die unter umständen für abhängigkeiten hat.
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

Linkat
Lazarusforum e. V.
Beiträge: 530
Registriert: So 10. Sep 2006, 23:24
OS, Lazarus, FPC: Linux Mint 21.3; Lazarus 3.0 FPC 3.2.2; RaspiOS
CPU-Target: AMD 64, ARM 32
Wohnort: nr Stuttgart

Beitrag von Linkat »

Hallo Christian,
habe schon die ganze Festplatte nach entsprechenden dll's durchsucht (ie oben schon erwähnt). Im System32-Ordner bin ich fündig geworden. Hat aber wohl nicht gereicht. Am Montag werde ich dann versuchen mit dem depency walker noch etwas zu finden.

Gruß, Linkat

Linkat
Lazarusforum e. V.
Beiträge: 530
Registriert: So 10. Sep 2006, 23:24
OS, Lazarus, FPC: Linux Mint 21.3; Lazarus 3.0 FPC 3.2.2; RaspiOS
CPU-Target: AMD 64, ARM 32
Wohnort: nr Stuttgart

Beitrag von Linkat »

Hallo,
habe mit dem "Depency Walker" keine verdächtigen Abhängigkeiten gefunden.
Auf einem "MySql vollkommen unbelasteten" PC habe ich mein Programm laufen lassen. Es kam eine Fehlermeldung, dass er "libmysql.dll" vermisst. Die Datei habe ich dann in den Ordner c:\winnt\System32 kopiert. Erneuter Start des Programms brachte die gleiche Fehlermeldung (s. o.):

[/I]TMySQLxxConnection can not work with the installed MySQL client version (3.23.31). ) gebracht.

Also habe ich die Datei auf meinem Rechner aus dem System32-Ordner entfernt. Siehe da [/U]das[U] Problem war gelöst.

Aber jetzt kommt das nächste Problem. Aus dem Lazarus MySQL-Wiki habe ich versucht das Beispiel nach zu vollziehen.

Code: Alles auswählen

procedure TForm1.BtConnectClick(Sender: TObject);
begin
try
  if MySQLConnection1.Connected then MySQLConnection1.Close;
  StatusBar1.SimpleText:='';
  MySQLConnection1.HostName:=HostLabEdit.Text;
  MySQLConnection1.UserName:=UserLabEdit.Text;
  MySQLConnection1.Password:=PasswdLabEdit.Text;
  MySQLConnection1.DataBaseName:='tms';
  StatusBar1.SimpleText:='Verbindung zum Server herstellen:  '+HostLabEdit.Text;
 
  MySQLConnection1.Open;
  if MySQLConnection1.Connected then begin
    ShowString('Verbunden mit Server:   '+HostLabEdit.Text);
    ShowString('Erfassen der Datenbanken');
    SQLQuery1.SQL.Text:='SELECT * FROM tms02_units t';
    SQLQuery1.Open;
     while not SQLQuery1.EOF do begin
      ComboBox1.Items.Add(SQLQuery1.Fields[0].AsString);
      SQLQuery1.Next;
    end;   {while}
    SQLQuery1.Close;
    ShowString('Liste der Datenbanken empfangen');
  end{if}
except
  ShowString('Hat wohl nicht geklappt!');
end;


(Zeile 17 ersetzen durch: SQLQuery1.SQL.Text:='show databases';


Aber folgender Fehler tritt auf:

Project raised exception class 'EDatabaseError'.[I]

Wer kann weiterhelfen und hat einen Tipp?

Vielen Dank.

Gruß,
Linkat

monta
Lazarusforum e. V.
Beiträge: 2809
Registriert: Sa 9. Sep 2006, 18:05
OS, Lazarus, FPC: Linux (L trunk FPC trunk)
CPU-Target: 64Bit
Wohnort: Dresden
Kontaktdaten:

Beitrag von monta »

kann es sein, das bei deinem SQL-Befehl was nicht stimmt? Die Fehlermeldung dürfte dazu passen.

Irgendwie sieht das letzte t mir etwas komisch aus:
SQLQuery1.SQL.Text:='SELECT * FROM tms02_units ?t?';
//sorry, hatte den Satz übersehen, das du es ersetzt hast. :oops:

Bis wohin geht den die Stringausgabe? - Sprich geht das Connect?
Zuletzt geändert von monta am Mo 11. Dez 2006, 20:45, insgesamt 1-mal geändert.

Linkat
Lazarusforum e. V.
Beiträge: 530
Registriert: So 10. Sep 2006, 23:24
OS, Lazarus, FPC: Linux Mint 21.3; Lazarus 3.0 FPC 3.2.2; RaspiOS
CPU-Target: AMD 64, ARM 32
Wohnort: nr Stuttgart

Beitrag von Linkat »

Hallo monta,
der string in der Variablen SQL.TEXT ist aus dem MySQL-Query Browser kopiert. Da steht das t auch schon drin. Aber ich habe es auch schon ohne t probiert. Geht auch nicht.

Aber eigentlich sollte ja auch, wie in der Programmvorlage, 'show databases' in der Variablen stehen.
Funktioniert aber auch nicht.

Wer weis noch Rat?

Gruß, Linkat

ralli
Beiträge: 374
Registriert: Mi 13. Sep 2006, 15:57
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit
Wohnort: Hagen a.T.W.
Kontaktdaten:

Nimm Firebird

Beitrag von ralli »

Hallo Linkat,

ich hatte mit mysql bisher immer nur Probleme unter Lazarus. Als ich es endlich unter Linux laufen hatte, wurden in der DBGrid nicht alle Felder angezeigt.

Also irgendwo, aber frag mich nicht mehr wo, habe ich gelesen, das zur Zeit noch von dem Einsatz von mysql unter Lazarus abgeraten wird.

Ich habe dann Firebird genommen, tut sich gegenüber mysql von der Leistungsfähigkeit überhaupt nichts, sql ist ja gleich zu handhaben. Alles läuft stabil und wunderbar, unter Windows und unter Linux. Selbst getetest. Jetzt arbeite ich nur noch unter Linux.

Ralli

Antworten