DBGRID wie von selectierter Zeile die inhalte weiter nutzen

Für Themen zu Datenbanken und Zugriff auf diese. Auch für Datenbankkomponenten.
Antworten
Biertrinker
Beiträge: 16
Registriert: Mo 18. Mär 2013, 17:19
OS, Lazarus, FPC: MAC OSX
CPU-Target: xxBit

DBGRID wie von selectierter Zeile die inhalte weiter nutzen

Beitrag von Biertrinker »

Hallo zusammen,

ich mache hier meine ersten schritte im bereich Datenbanken / Zeos
habe eine verbindung zu einer MySQL über
Zconnection -> Zquery -> Datasource -> DBGrid1 hergestellt
welche beim Klick auf Button1 folgendes sql ausführt

Code: Alles auswählen

 
 
ZQuery1.SQL.Text:='select ticketID, name, subject from ticketsystem';
     ZQuery1.open;
 
das ergebniss wird auch super angezeigt.

Frage wie kann ich eine art Master - Detail beziehung aufbauen so das ich
in der DBgrid1 eine Zeile markiere und die inhalte ( zb ticketID ) für eine weitere
sqlabfrage nutzen kann ( zb in eine Variable zwischenspeichern )

im weitesten ungefähr so

var_A1 := dbgrid1.inhalt_spalte1
var_A2 := dbgrid1.inhalt_spalte2
var_A3 := dbgrid1.inhalt_spalte3

Also das Ergbniss soll sein ich klicke in dbgrid1 die Spalte an und lasse mir in DBGRID2
die History diese tickets anzeigen
basierend auf einer weitern SQL die,die werte der DBGRID.1 nutzt
mfg
Horst Sammler

Michl
Beiträge: 2511
Registriert: Di 19. Jun 2012, 12:54

Re: DBGRID wie von selectierter Zeile die inhalte weiter nut

Beitrag von Michl »

So ähnlich nutze ich auch ein paar Tabellen.

Ich nutze zum Auslesen von Datensätzen nicht die Zeilen der DBGrid, sondern sie dient mir hauptsächlich zur Anzeige der Tabelle(n).

Zum Auslesen von Inhalten eines Datensatzes (entspricht dann Zeile des Grids) kann man wunderbar das Query nutzen.

Dazu nutze ich das Ereignis ZQuery.Afterscroll (wird immer aufgerufen, wenn du eine andere Zeile im Grid mit Maus bzw. Cursor wählst). Hier kannst du deine Variablen für die Ansicht der anderen Tabelle bestimmen zB:

Code: Alles auswählen

procedure TForm1.ZQuery1AfterScroll(DataSet: TDataSet1);
begin
  var_A1 := ZQuery1.Fields[1].AsString;
  var_A2 := ZQuery1.Fields[2].AsString;
  //oder z.B.
  var_A3 := ZQuery1.FieldByName('var_A3').AsString;
  var_A4 := ZQuery1.FieldByName('var_A4').AsInteger;
end; 
jetzt kannst du die 2. Tabelle entsprechend deiner Variablen füllen lassen

Code: Alles auswählen

type
  TLiveSelection = (lsMoney, lsChilds, lsTime);
  TLive = Array[0..1] of TLiveSelection;  

hde
Beiträge: 556
Registriert: Mi 11. Aug 2010, 02:56

Re: DBGRID wie von selectierter Zeile die inhalte weiter nut

Beitrag von hde »

Biertrinker hat geschrieben:Also das Ergbniss soll sein ich klicke in dbgrid1 die Spalte an und lasse mir in DBGRID2
die History diese tickets anzeigen
basierend auf einer weitern SQL die,die werte der DBGRID.1 nutzt
Dann baue doch eine Master/Slave-Beziehung auf, dann geht das fast ganz automatisch.
Nimm eine zweite ZQuery mit einem Select auf die Historie und binde dort den DataSource an die erste Tabelle, das war's.

hde

Biertrinker
Beiträge: 16
Registriert: Mo 18. Mär 2013, 17:19
OS, Lazarus, FPC: MAC OSX
CPU-Target: xxBit

Re: DBGRID wie von selectierter Zeile die inhalte weiter nut

Beitrag von Biertrinker »

Hallo,

vielen Dank :D für die Lösung
var_A1 := ZQuery1.Fields[1].AsString;
war genau das was ich gesucht habe.

Das mit "Select auf die Historie" habe ich nicht ganz verstanden :(
aber macht nichts ich übe ja noch !
mfg
Horst Sammler

hde
Beiträge: 556
Registriert: Mi 11. Aug 2010, 02:56

Re: DBGRID wie von selectierter Zeile die inhalte weiter nut

Beitrag von hde »

Biertrinker hat geschrieben:Frage wie kann ich eine art Master - Detail beziehung aufbauen so das ich
in der DBgrid1 eine Zeile markiere und die inhalte ( zb ticketID ) für eine weitere
sqlabfrage nutzen kann
Biertrinker hat geschrieben:Das mit "Select auf die Historie" habe ich nicht ganz verstanden
Ist eigentlich ganz einfach, fast ohne zu Programmieren.

Du nimmst 2 ZQuerys und für jede ein DBGrid. In die erste ZQuery die Abfrage/Select auf den Mastersatz, in die zweite den Select für das Detail. Dann verbindest du die zweite ZQuery über Datasource mit der ersten. Und dann steht im zweiten Grid ganz automatisch immer das Detail der selektierten Reihe des ersten Grids. Ohne weitere Programmierung.

hde

Antworten