Entwickler-Ecke
Datenbanken - [dbexpress] Zugriffsverletzung bei query
l33t - Sa 17.01.09 19:18
Titel: [dbexpress] Zugriffsverletzung bei query
Hallo,
wenn ich das unten aufgefuehrte stueck code ausfuehre, dann erhalte ich eine Zugriffsverletzung im Modul 'dbxmys.dll'. Hat jemand eine Idee?
Der SQL server sowie die libmysqld.dll sind selbstverstaendlcih passend.
Mysql version ist 5.0.26. Zu beachten ist jedoch das wenn cih auf einen anderen Server zugreife das selbe passiert.
Die Verbindung kann ich jedoch aufbauen
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16:
| procedure TForm1.Button4Click(Sender: TObject); begin if sqlconnection1.connected then begin sqlquery1.SQL.Clear; sqlquery1.SQL.Add('SELECT * from l2j.characters;'); sqlquery1.open; sqlquery1.First; while not sqlquery1.eof do begin a := SQLQuery1.FieldByName('char_name').asstring; showmessage(a); sqlquery1.Next; end;
end; end; |
Danke im Vorraus
jaenicke - Sa 17.01.09 19:27
In welcher Zeile kommt die Zugriffsverletzung und bei welcher Adresse (0 oder eine andere vor allem)?
l33t - Sa 17.01.09 19:44
Der genaue Fehler ist:
Zugriffsverletzung bei Adresse 00238564 in Modul 'dbxmys.dll' Lesen von Adresse 00000000
Die Zeile weiss ich leider nicht... Vermute aber die Zeile "sqlquery1.open". Der Debugger faengt den Fehler aus irgendeinem Grund nicht ab
Delete - Sa 17.01.09 19:47
Und so?
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14:
| procedure TForm1.Button4Click(Sender: TObject); begin if sqlconnection1.connected then begin sqlquery1.Close; sqlquery1.SQL.Text := 'SELECT * from l2j.characters;'; sqlquery1.open; while not sqlquery1.eof do begin a := SQLQuery1.FieldByName('char_name').asstring; showmessage(a); sqlquery1.Next; end; end; end; |
DBExpress ist allerdings nicht mein Spezialgebiet.
l33t - Sa 17.01.09 19:51
leider genau das selbe...
Delete - Sa 17.01.09 19:54
Stepp mal mit F7 durch, das muss doch gehen.
l33t - Sa 17.01.09 21:12
hab ich versucht dann geht der aber alle units durch das sind ja ueber 100k zeilen.
jaenicke - Sa 17.01.09 21:27
Du musst natürlich erst einen Haltepunkt auf den Anfang der Prozedur setzen...
Wenn dann das Programm dort ankommt, kannst du mit F8 zeilenweise den Quelltext abarbeiten lassen.
l33t - So 18.01.09 16:31
ja klar hab ich ja auch so gemacht nur dann geht der von jeder verwendeten dbexpress funktion alle zeilen durch
jaenicke - So 18.01.09 16:34
Das dürfte eigentlich (vor dem Fehler) nur bei F7 passieren. :gruebel:
F8 springt eigentlich nicht in die Befehle hinein.
Delete - So 18.01.09 16:58
Nochmal:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14:
| procedure TForm1.Button4Click(Sender: TObject); begin if sqlconnection1.connected then begin sqlquery1.Close; sqlquery1.SQL.Text := 'SELECT * from l2j.characters;'; sqlquery1.open; while not sqlquery1.eof do begin a := SQLQuery1.FieldByName('char_name').asstring; showmessage(a); sqlquery1.Next; end; end; end; |
SparrowSX - Sa 07.02.09 18:46
Der Fehler kommt bei (bzw. in)
Ich hab den gleichen Fehler... wäre schön wenn sich doch noch jemand mit ner Lösung findet...
PS: bei mir is die Zugriffsverletzung bei Adresse: 03398564
SparrowSX - So 08.02.09 16:42
Also der Fehler liegt in der 'dbxmys.dll'
...
Nach einigem suchen musste ich feststellen dass diese Datei, MySQL nur bis Version 5.0.x unterstützt...
Habe gerade eine Version für 5.1 gefunden (
http://cc.codegear.com/Item/24598)...
Eben installiert aber keine Änderung (wird in einem seperaten Ordner installiert und geht nur bis Delphi 11)
Also ich nehme mal an dass ich nur einen Treiber (also eine aktuelle dbxmys.dll) für Delphi 2009 mit MySQL 5.1 Unterstützung brauche.
Nochmal zu den Fehlern:
Verbinden geht... auch wenige Abfragebefehle mit sqlquerry ('show tables;') funktionieren.
Aber sobald ich z.B. eine Tabelle erstellen will oder Daten einfügen schreibt er entweder 'Falscher SQL-Syntax ...' oder 'Zugriffsverletzung ...'
jaenicke - So 08.02.09 17:05
SparrowSX hat folgendes geschrieben : |
| Aber sobald ich z.B. eine Tabelle erstellen will oder Daten einfügen schreibt er entweder 'Falscher SQL-Syntax ...' |
Steht da vielleicht auch eine genauere Meldung? Es wäre interessant, wenn da der Befehl stünde wie er angekommen ist.
Ich vermute der Fehler liegt an der Unicodeunterstützung in Delphi 2009 und ggf. einer fehlerhaften Umwandlung / Übergabe der Strings.
SparrowSX - So 08.02.09 18:20
Habe MySQL-Server auf Version 5.0.67 neu installiert...
Bei MySQL-Client Version steht da aber immernoch 5.1.3
Könnte das jetzt noch der Fehler sein? (oder is das nur auf phpmyadmin bezogen?) - Wenn ja - wie bekomme ich die Clientversion runter?
Unicodeunterstützung? ... mit sowas hab ich mich noch gar nich auseinandergesetzt... aber wenn Delphi 2009 mit dbexpress ausgeliefert wir müsste das doch eigentlich funktionieren oder nich?
Unter Details bei der Zugriffsverletzung steht:
[11EE8564]{dbxmys.dll } Unbekannte Funktion bei DBXReader_Next + $16100
[501D720C]{vcl120.bpl } Controls.TWinControl.WMNCHitTest (Line 10593, "Controls.pas" + 5) + $4
[501D0BFA]{vcl120.bpl } Controls.TControl.WndProc (Line 6640, "Controls.pas" + 91) + $6
[0ED25774]{DbxCommonDriver120.bpl} Dbxdynalink.TDBXDynalinkCommand.DerivedPrepare + $19C
[0ED25789]{DbxCommonDriver120.bpl} Dbxdynalink.TDBXDynalinkCommand.DerivedPrepare + $1B1
[0ED253C5]{DbxCommonDriver120.bpl} Dbxdynalink.TDBXDynalinkCommand.DerivedExecuteQuery + $81
[0ED09C05]{DbxCommonDriver120.bpl} Dbxcommon.TDBXCommand.ExecuteQuery + $45
[0ED0A083]{DbxCommonDriver120.bpl} Dbxcommon.TDBXMorphicCommand.ExecuteQuery + $F
[50AC096F]{dbexpress120.bpl} SqlExpr.TCustomSQLDataSet.ExecuteStatement (Line 5803, "..\..\..\..\..\src\pas\dbx\vcl\SqlExpr.pas" + 43) + $B
[50ABCABC]{dbexpress120.bpl} SqlExpr.TCustomSQLDataSet.InternalOpen (Line 4110, "..\..\..\..\..\src\pas\dbx\vcl\SqlExpr.pas" + 1) + $2
[504941B9]{dbrtl120.bpl} DB.TDataSet.DoInternalOpen (Line 10599, "DB.pas" + 2) + $4
[50494272]{dbrtl120.bpl} DB.TDataSet.OpenCursor (Line 10628, "DB.pas" + 4) + $2
[50ABCBF3]{dbexpress120.bpl} SqlExpr.TCustomSQLDataSet.OpenCursor (Line 4142, "..\..\..\..\..\src\pas\dbx\vcl\SqlExpr.pas" + 10) + $4
[5049412D]{dbrtl120.bpl} DB.TDataSet.SetActive (Line 10581, "DB.pas" + 12) + $7
[5003EA46]{rtl120.bpl } TypInfo.SetOrdProp (Line 1502, "TypInfo.pas" + 27) + $0
[20B9ACF2]{designide120.bpl} DesignEditors.TPropertyEditor.SetOrdValue (Line 838, "DesignEditors.pas" + 2) + $E
[20B9BDFB]{designide120.bpl} DesignEditors.TEnumProperty.SetValue (Line 1398, "DesignEditors.pas" + 5) + $4
[20B9A961]{designide120.bpl} DesignEditors.TPropertyEditor.Edit (Line 668, "DesignEditors.pas" + 11) + $14
[208AAF82]{coreide120.bpl} PropInsp.TPropertyInspector.PropListEditDblClick (Line 882, "PropInsp.pas" + 20) + $5
[20C87371]{vclide120.bpl} IDEInspListBox.TInspListBox.DoEditDblClick (Line 976, "IDEInspListBox.pas" + 2) + $A
[20C88BB2]{vclide120.bpl} IDEInspListBox.TInspListBox.EditDblClick (Line 1546, "IDEInspListBox.pas" + 0) + $2
[501D1181]{vcl120.bpl } Controls.TControl.DblClick (Line 6761, "Controls.pas" + 1) + $14
[501D12E4]{vcl120.bpl } Controls.TControl.WMLButtonDblClk (Line 6804, "Controls.pas" + 4) + $C
[501D0BFA]{vcl120.bpl } Controls.TControl.WndProc (Line 6640, "Controls.pas" + 91) + $6
[50057E04]{rtl120.bpl } Classes.StdWndProc (Line 12723, "Classes.pas" + 8) + $0
[501D5287]{vcl120.bpl } Controls.TWinControl.WndProc (Line 9334, "Controls.pas" + 136) + $6
[501DD246]{vcl120.bpl } Controls.TDockTree.WndProc (Line 14467, "Controls.pas" + 74) + $5
[50046C98]{rtl120.bpl } Classes.TThreadList.UnlockList (Line 3781, "Classes.pas" + 0) + $4
[5012C8FC]{vcl120.bpl } Graphics.FreeMemoryContexts (Line 6830, "Graphics.pas" + 12) + $5
[501D4BE0]{vcl120.bpl } Controls.TWinControl.IsControlMouseMsg (Line 9127, "Controls.pas" + 9) + $25
[501D5287]{vcl120.bpl } Controls.TWinControl.WndProc (Line 9334, "Controls.pas" + 136) + $6
[20C86513]{vclide120.bpl} IDEInspListBox.TPropInspEdit.WndProc (Line 439, "IDEInspListBox.pas" + 7) + $4
[501D49A0]{vcl120.bpl } Controls.TWinControl.MainWndProc (Line 9063, "Controls.pas" + 3) + $6
[50057E04]{rtl120.bpl } Classes.StdWndProc (Line 12723, "Classes.pas" + 8) + $0
[501FB041]{vcl120.bpl } Forms.TApplication.StopHintTimer (Line 10343, "Forms.pas" + 3) + $6
[501F9EAB]{vcl120.bpl } Forms.TApplication.ProcessMessage (Line 9613, "Forms.pas" + 23) + $1
[501F9EEE]{vcl120.bpl } Forms.TApplication.HandleMessage (Line 9643, "Forms.pas" + 1) + $4
[501FA219]{vcl120.bpl } Forms.TApplication.Run (Line 9780, "Forms.pas" + 26) + $3
[004259D2]{bds.exe } bds.bds (Line 196, "" + 7) + $7
SparrowSX - So 08.02.09 19:01
Also ich weiß nich wie... aber eben hats geklappt... :?
Das Problem das ich demnächst haben werde: Ich muss das noch auf meinem Laptop zum laufen bekommen... :(
Ich muss aber mal anmerken:
Ich habe unzählige dlls, updates und "lösungen" von drittanbietern (devart uvm.) installiert, integriert usw.
Habe bis jetzt auch nur 2 Befehle die ohne Fehler funktionieren... werde weitere testen (falls doch nicht alles geht melde ich mich garantiert nochmal) :lol:
Und wenn ich es auf meinem Laptop zum laufen bekomme und der Fehler bzw. die Lösung eindeutig sind werd ich es natürlich sofort posten. :wink:
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!