![]() |
Problem mit Array als Feld
Hallo zusammen,
ich hatte Anfangs Probleme auf die Daten von MySQL vernünftig zuzugreifen. Nun denke ich habe ich es geschafft jedoch besteht noch ein kleines Problem bei meinem Mehrdimensionalen Array in dem ich die Abfragen speichere. Dies ist mein Code: Die Procedure, die die Daten ins Array schreibt:
Delphi-Quellcode:
So rufe ich das ganze auf:type TFeld = array of array of String; //:::::::::::::::::::::::::::::::::::::: Procedure TSqlVerbindung.GetErgebnis(a: TFeld); var i, j: integer; af: TMysql_FieldDef; cr: integer; begin if assigned(FResult) then begin if FResult.ResultType=rtStored then begin cr := FResult.RecNo; SetLength(a, FResult.FieldsCount+1,FResult.RowsCount+1); for i:=0 to FResult.FieldsCount-1 do begin af := FResult.FieldDef(i)^; a[i+1,0] := af.Name; end; FResult.First; for i:=0 to FResult.RowsCount-1 do begin if FResult.RecNo=cr then a[0,i+1] := '*' else a[0,i+1] := ''; for j:=0 to FResult.FieldsCount-1 do a[j+1,i+1] := FResult.FieldValue(j); FResult.Next; end; FResult.RecNo := cr; end else begin SetLength(a, FResult.FieldsCount+1,2); for i:=0 to FResult.FieldsCount-1 do begin af := FResult.FieldDef(i)^; a[i+1,0] := af.Name; end; for j:=0 to FResult.FieldsCount-1 do a[j+1,1] := FResult.FieldValue(j); end; end; end;
Delphi-Quellcode:
Leider bekomme ich eine Zugriffsverletzung :-( aber warum?procedure TSQL.Button1Click(Sender: TObject); var vSQL:Tsqlverbindung; s:TFeld; begin vsql:=Tsqlverbindung.Create; vsql.SelectDB('Kom'); vsql.SendBefehl('SELECT * FROM iuser i;'); vsql.GetErgebnis(s); showmessage(s[1][1]); vsql.Free; end; Danke für Eure Hilfe! |
Re: Problem mit Array als Feld
Wo genau kommt die AV?
|
Re: Problem mit Array als Feld
In welcher Zeile?
|
Re: Problem mit Array als Feld
Hallo,
Hier kommt der Fehler:
Delphi-Quellcode:
Fehlermeldung:
procedure TSQL.Button1Click(Sender: TObject);
var vSQL:Tsqlverbindung; s:TFeld; begin vsql:=Tsqlverbindung.Create; vsql.SelectDB('IndusXtreme'); vsql.SendBefehl('SELECT * FROM iuser i;'); vsql.GetErgebnis(s); showmessage(s[1][1]); //Hier kommt der Fehler vsql.Free; end; Zitat:
|
Re: Problem mit Array als Feld
Und wo in .GetErgebnis()?
|
Re: Problem mit Array als Feld
Hallo,
im Compiler wird mir die makierte Zeile als Fehler angezeigt mehr nicht. Danke ;-) |
Re: Problem mit Array als Feld
dann setze nen Breakpoint auf die Zeile
Delphi-Quellcode:
und debugge mal bis du zu der genausen Zeile kommst in der die AV auftritt. Mit F7 kannst du zB in .GetErgebnis() reinspringen.
vsql.SendBefehl('SELECT * FROM iuser i;');
|
Re: Problem mit Array als Feld
Hallo,
also wenn ich das so debugge springt er mir bei GetErgebnis rein und in die erste If Abfrage. Dann springt er einfach zum ende von GetErgebnis und ich bekomme die Fehlermeldung :-(. Danke Gruß |
Re: Problem mit Array als Feld
Delphi-Quellcode:
.. dann wird FResult nil sein und Deinem Array steht nicht drinnen.
if assigned(FResult) then begin
Grüße Klaus |
Re: Problem mit Array als Feld
dann könnte es sein das FResult nichts zugewiesen wurde und somit dein Array leer ist und somit ein direkter Zugriff mit s[1][1] fehlschlägt... nur so eine vage Vermutung :zwinker:
|
Re: Problem mit Array als Feld
Hi Dragon27,
du solltest das Feld als VAR-Parameter übergeben, sonst veränderst du nur die lokale Kopie:
Delphi-Quellcode:
Gruß Hawkeye
//Procedure TSqlVerbindung.GetErgebnis(a: TFeld);
Procedure TSqlVerbindung.GetErgebnis(var a: TFeld); |
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:13 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz