Entwickler-Ecke

Datenbanken - DBGrid


opfer.der.genauigkeit - Di 28.01.03 15:59
Titel: DBGrid
Ich hab ne Datenbankabfrage auf ein DBGrid um dort Datenbankfelder anzuzeigen.
Ich möchte nun in diesem DBGrid direkt auf die vorhandenen Felder des GRIDS gehen und diese lesen.

Ich habe schon ein paar Varianten probiert...
Also über die Query in die Datenbank...
Aber das Ergebnis ist nicht zu gebrauchen, da ich die Felder mit einem Pointer an einen Record übergebe und dann über Pointer von dort aus in ein anderes Formular übergebe.
Und da ich bei diesen Vorgang nur bestimmte Werte brauche, die nur im Grid vorkommen, und nicht alle Werte aus der Query, suche ich nun bei euch Antwort.

Die Funktion FieldCount-1 vom Grid geht bei mir nicht...
Vielleicht kann mir auch da jemand weiterhelfen.

Warum ich keine DBFelder benutze und die dann dem anderen Formular nur die ID übergebe... gute Frage... ich brauch ne Herausforderung. :wink:


opfer.der.genauigkeit - Di 28.01.03 16:44


Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
  anker := nil;
    for i := 0 to tsDBGrid1.FieldCount-1  do begin  //funzt net
    {for i := 0 to OEQuery1.FieldCount-1 do begin} //funzt
        new(p1);
        p1^.txt := tsDBGrid1.Field[i].Asstring; //funzt net
        {p1^.txt := OEQuery1.Fields[i].AsString;} //funzt
        p1^.next := nil;
        if anker = nil then
          anker := p1
        else
          begin
            p2 := anker;
            while (p2^.next <> nil) do
              p2 := p2^.next;
            p2^.next := p1;
          end;


Jetzt stellt euch noch n Grid und nen Record dazu vor.
Das soll die Routine sein, mit der ich aus dem Grid lese...
Der alte Code funktioniert... nützt mir aber nix.


smiegel - Di 28.01.03 16:54

Hallo,

@opfer.der.genauigkeit
Anscheinend begehst Du einen Denkfehler. Das Grid ist nur der Anzeigecontainer für eine Table oder eine Query.
Wenn Du auf die darunterliegenden Daten zugreifen willst, musst die Eigenschaft Datasource.Dataset bemühen.

Folgend ein Beispiel, aus der Delphi-Hilfe:
Zitat:

Das folgende Beispiel kopiert markierte Zeilen eines DB-Gitters in ein Listenfeld.

Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
procedure TForm1.Button1Click(Sender: TObject);
var
  i, j: Integer;
  s: string;
begin
  if DBGrid1.SelectedRows.Count>0 then
    with DBGrid1.DataSource.DataSet do
    for i:=0 to DBGrid1.SelectedRows.Count-1 do
      begin
        GotoBookmark(pointer(DBGrid1.SelectedRows.Items[i]));
        for j := 0 to FieldCount-1 do
        begin
          if (j>0) then s:=s+', ';

          s:=s+Fields[j].AsString;
        end;
        Listbox1.Items.Add(s);
        s:= '';
      end;
end;



opfer.der.genauigkeit - Di 28.01.03 17:10

smiegel hat folgendes geschrieben:

Wenn Du auf die darunterliegenden Daten zugreifen willst, musst die Eigenschaft Datasource.Dataset bemühen.


Diese Antwort hatte ich befürchtet *g*, ist der gleiche Zugriff als würde ich über die Query gehen bzw. es ist eigentlich genau das, der Code greift auch direkt auf die Query zurück.
Bringt mir also auch nix. Trotzdem danke. :)

Die Daten müßen sich ja irgendwo in der Schwebe im Grid befinden... genau diese Daten möchte ich haben.

P.S.: Den Code in der Hilfe hab ich auch schon durchgelesen. *GGG*


opfer.der.genauigkeit - Di 28.01.03 17:41

Ok Leude hat sich erledigt.

Wenn ich es über die Query mache und die SQL- Abfrage umstelle funktioniert das auch was ich will. :)