Man befüllt gar nichts, alles bleibt in TSQLQuery/TZQuery/TZReadOnlyQuery. Sowohl TDBGrid als auch alle anderen Datensteuerungen zeigen es direkt aus TxxQuery.
Wen du direkt auf ein Wert zugreifen möchtest, dann kannst du das mit
TField.AsXYZ-Funktionen machen, siehe nach AsInteger, AsString usw. Eigenschaften.
Nehmen wir an du hast so diese Kundentabelle mit den Feldern, Kundennr und Kundenname, dann kannst du alle Datensätze so ausgeben:
Code: Alles auswählen
Q1.SQL.TEXT:='select * from kunden'; //alles auswählen, alle Spalten holen
Q1.Open; //query ausführen
Q1.FIrst; //Datenzeiger auf 1.Zeile bewegen, eigentlich zeigt es am Anfang schon auf 1.Zeile
while not Q1.EOF do begin //solange es nicht letzt datenzeile ist
Writeln(Q1.FieldByName('Kundennr').AsString+' '+Q1.FieldByName('Kundenname').AsString); //nr und name ausgeben
Q1.Next; //nächste Zeile
end;
//Wenn du neue ZEile hinzufügen willst:
Q1.Append; //oder Q1.Insert
Q1.FieldByName('Kundennr').AsInteger:=12;
Q1.FieldByName('Kundenname').AsString:='Banane';
Q1.Post; //speichern
//man muss natürlich transaction-handling machen aber zeos macht es automatisch.
Du kannst gleiche Query gleichzeitig mit viele DBEdit- oder sonstige DB-Steuerungen und DBGrid verbinden. Wen du dann, Query mit Q1.Next/Q1.Prior bewegst, dann kannst du beobachten, dass die Daten in DB-Steuerungen sich ändern, weil sie auf die gleiche Daten anzeigen. Und die zeigen immer auf aktuellen Datensatz.
Das ist nur dafür damit du verstehst wie es im Hintergrund abläuft. Es gibt genug ausführliche Tutorials im Internet, z.B. bei
lazarus.intern.es oder bei
Lazarus-Wiki.
Eint Tipp, man sucht in der Ergebnismenge nichts, man lässt DB-System mittels WHERE-Klausel machen und die Ergebnismenge enthält schon was man gesucht hat.
Wenn du neu mit DB-Programmierung bist, dann solltest du erwägen SQLDB zu benutzen, das liegt schon bei Lazarus und es hat genug Dokumentation und es gibt gefühlt mehr Benutzer.