Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Problem mit Array als Feld (https://www.delphipraxis.net/114491-problem-mit-array-als-feld.html)

Dragon27 26. Mai 2008 12:52


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:


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;
So rufe ich das ganze auf:
Delphi-Quellcode:

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;
Leider bekomme ich eine Zugriffsverletzung :-( aber warum?

Danke für Eure Hilfe!

dominikkv 26. Mai 2008 12:54

Re: Problem mit Array als Feld
 
Wo genau kommt die AV?

mkinzler 26. Mai 2008 12:55

Re: Problem mit Array als Feld
 
In welcher Zeile?

Dragon27 26. Mai 2008 12:57

Re: Problem mit Array als Feld
 
Hallo,

Hier kommt der Fehler:

Delphi-Quellcode:
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;
Fehlermeldung:
Zitat:

---------------------------
Benachrichtigung über Debugger-Exception
---------------------------
Im Projekt Project1.exe ist eine Exception der Klasse EAccessViolation mit der Meldung 'Zugriffsverletzung bei Adresse 004D7CC5 in Modul 'Project1.exe'. Lesen von Adresse 00000004' aufgetreten.
---------------------------
Anhalten Fortsetzen Hilfe
---------------------------

mkinzler 26. Mai 2008 12:59

Re: Problem mit Array als Feld
 
Und wo in .GetErgebnis()?

Dragon27 26. Mai 2008 13:01

Re: Problem mit Array als Feld
 
Hallo,

im Compiler wird mir die makierte Zeile als Fehler angezeigt mehr nicht.

Danke ;-)

dominikkv 26. Mai 2008 13:01

Re: Problem mit Array als Feld
 
dann setze nen Breakpoint auf die Zeile
Delphi-Quellcode:
vsql.SendBefehl('SELECT * FROM iuser i;');
und debugge mal bis du zu der genausen Zeile kommst in der die AV auftritt. Mit F7 kannst du zB in .GetErgebnis() reinspringen.

Dragon27 26. Mai 2008 13:06

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ß

Klaus01 26. Mai 2008 13:11

Re: Problem mit Array als Feld
 
Delphi-Quellcode:
if assigned(FResult) then begin
.. dann wird FResult nil sein und Deinem Array steht nicht drinnen.

Grüße
Klaus

dominikkv 26. Mai 2008 13:12

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:


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:07 Uhr.
Seite 1 von 2  1 2      

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