Autor Beitrag
ringo!
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 48

WinXP Pro, MacOS X 10.3
D7 Pers
BeitragVerfasst: Sa 17.07.04 20:35 
Ich benutze ein Stringgrid um mir Daten einer Datenbank anzeigen zu lassen. Ich frage mich gerade, wie ich nun rausfinde welcher Datensatz "hinter" eine Zeile im Stringgrid steckt. Sprich im Stringgrid werden 10 Datensätze angezeigt. Der User klickt Nummer 9 im Stringrid an und dann soll etwas mit dem Datensatz passieren. Nur wie finde ich nun raus, welchen Datensatz der User angeklickt hat. Und wie ordne ich das im Endeffekt der Daten in der Datenbank zu ?
BenBE
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 8721
Erhaltene Danke: 191

Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
BeitragVerfasst: Sa 17.07.04 21:19 
Am einfachsten geht es, wenn du in der StringGrid auch die Datensatz-ID oder ein eindeutiges Index-Feld mit anzeigst. Dann brauchst du einfach nur

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
Table1.Filter := 'IndexFeld = ' + WertVonIndexFeldInStringGrid;
Table1.Filtered := True;
Try

    ... {Tu was mit dem Datensatz}

Finally
    Table1.Filtered := False;
End;


auszuführen. Ansonsten kannst du nur den Filter auf alle Felder ausweiten und auf alle Werte von allen Feldern (oder sovielen, wie zur Eindeutigkeit notwendig) ausweiten:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
Table1.Filter := 'Feld1 = ' + Wert1 + ' AND Feld2 = ' + Wert2 + ' AND Feld3 = ' + Wert3 + ' AND ...';
Table1.Filtered := True;
Try

    ... {Tu was mit dem Datensatz}

Finally
    Table1.Filtered := False;
End;


HTH.

_________________
Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.
Muetze1
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 346



BeitragVerfasst: Sa 17.07.04 21:43 
Moin!

Wenn du ein DBGrid von einem DataSource eines TQuery füllen lässt, dann stimmt der Zeilenindex mit dem Datansatz in der Datenmenge des TQueries überein. Ansonsten wenn das DBGrid alles einer TTable anzeigt, dann ist es dort entsprechend.

MfG
Muetze1
ringo! Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 48

WinXP Pro, MacOS X 10.3
D7 Pers
BeitragVerfasst: Sa 17.07.04 21:49 
Ne Table hab ich leider nicht zur Verfügung. Geht das nicht auch direkt ? Ich benutze eine SQL Query Komponente, das Ergebnis des Queries schreibe ich direkt in das Stinggrid.
Gibt es beim Stinggrid keine Möglichkeit anzuzeigen welche Zeile gerade selektiert ist ? Dann könnte ich das irgendwie mit der DB vergleichen.
Muetze1
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 346



BeitragVerfasst: Sa 17.07.04 22:06 
Moin!

ringo! hat folgendes geschrieben:
Ne Table hab ich leider nicht zur Verfügung. Geht das nicht auch direkt ? Ich benutze eine SQL Query Komponente, das Ergebnis des Queries schreibe ich direkt in das Stinggrid.
Gibt es beim Stinggrid keine Möglichkeit anzuzeigen welche Zeile gerade selektiert ist ? Dann könnte ich das irgendwie mit der DB vergleichen.


?? Wie jetzt? Du machst einen SQL Query und schreibst per Hand die Ergebnismenge in das StringGrid? Wieso packst du dir nicht einfach noch eine TDataSource auf die Form die du mit dem Query verbindest und dann ein DBGrid und dieses verbindest du mit der neuen DataSource. Dann hast du in dem DBGrid automatisch die Ergebnismenge des Queries und musst nix mehr selber machen. Was in dem Grid angezeigt wird von der Ergebnismenge kannst du auch festlegen bei dem Grid. Und soweit ich mich erinnere hat das noch einen Vorteil: Wenn der Benutzer einen Datensatz markiert, dann steht der Zeiger in der Query Ergebnismenge auch automatisch auf dem Datensatz der ausgewählt wurde.

MfG
Muetze1
BenBE
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 8721
Erhaltene Danke: 191

Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
BeitragVerfasst: Sa 17.07.04 23:20 
Das funktioniert IMHO mit jeder TDataSet, also ist es unabhängig davon, ob du eine TTable oder eine TQuery einsetzt.

Ansonsten @Query: Do kannst mit RequestLive (IIRC) die Ergebnismenge aktualisierbar machen. Funktioniert aber nicht mit allen Abfragen.

_________________
Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.