Entwickler-Ecke

Datenbanken - DBGrid bestimmte Daten auslesen


valherf - Di 08.02.11 23:56
Titel: DBGrid bestimmte Daten auslesen
Hallo,

ich habe ein DBGrid, in dem ich in einer Spalte verschiedene Zahlen (auch mehrfach die selbe) stehen habe. In der zweiten spalte stehen Namen.
Wie kann ich alle Namen ausgeben, die beispielsweise der Zahl "4" zugeordnet sind? Am besten in einem Memo?


bummi - Mi 09.02.11 00:55

Du läufst über das Dataset und gibst die Werte bedingt aus, Pseudocode

Quelltext
1:
2:
3:
4:
5:
6:
Dataset.First;
While not Dataset.EOF do
  begin
            If Dataset.FieldByName('mußt du kennen').asInteger=4 then Memo1.Lines.Add(Dataset.FieldByName('Das andere Feld') .asString)
            Dataset.Next;
  end;


oder Du setzt einen Filter (oder fragst per Query für Bedingung ab) und gibst alles aus.


valherf - Mi 09.02.11 12:57

Ja, das hat Prima geklappt...
Jetzt will ich allerdings noch einen drauf setzen.

Und zwar soll er nun den namen den er findet (auch eine Zahl) in der nächsten Tabelle wieder einfügen und den dazu gehörigen wert (nur einer pro zahl) im Memo 2 ausgeben.


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
suche:=dblookupcombobox1.KeyValue;
dblookupcombobox2.KeyValue:=suche;
ADOtable2.First;
While not ADOTable2.EOF do
  begin
    If ADOtable2.FieldByName('SchauspielerID').asInteger=strtoint(suche)
    then
    Memo1.Lines.Add((ADOtable2.FieldByName('RollenID') .asString));
    rolle:=(ADOtable2.FieldByName('RollenID') .asString);
    If ADOtable3.FieldByName('RollenID').asInteger=strtoint(rolle)
    then
    begin
    Memo2.Lines.Add(ADOtable3.FieldByName('Rollenname') .asString);
    ADOtable3.Next;
    end;
    ADOtable2.Next;
  end;


so gibt er zwar etwas aus, aber völlig irrelevante Rollennamen...


bummi - Mi 09.02.11 13:05

da fehlt wohl ein ADOtable3.Locate, oder eine Masterdetailverknüpfung, oder ein Lookupfeld auf den Rollennamen


valherf - Mi 09.02.11 14:19

und was schreib ich zu dem Locate?
bin verwirrt! :D


bummi - Mi 09.02.11 15:44


Delphi-Quelltext
1:
  If ADOtable3.Locate('RollenID',ADOtable2.FieldByName('RollenID').asInteger) then ADOtable3.FieldByName('Rollenname').asString                    


Du kannst auch ADOtable2 "Neues Feld" wählen, einen Namen vergeben Typ Nachschlage eintragen, Schlüsselfeld auf RollenID legen Datenmenge auf ADOtable3, Schlüssel auf RollenID und Ergebnisfeld auf Rollenname, dann kannst Du den Namen direkt aus AdoTable2 nehmen.

BTW: Schau Dir mal ADODataset an, die Möglichkeiten sind deutlich interessanter als bei ADOTable.


valherf - Mi 09.02.11 16:38

Würde ich machen, wenn die Zeit mir nicht im Nacken sitzen würde.

da sind übrigens nicht genügend wirkliche Parameter drin, im code??


bummi - Mi 09.02.11 19:44


Delphi-Quelltext
1:
ADOtable3.Locate('RollenID',ADOtable2.FieldByName('RollenID').asInteger,[])                    

oder einfach mal F1 drücken