![]() |
Datenbank: Paradox • Version: 7 • Zugriff über: Query Komponente
Datensätze bei Listview-ItemSelcet abrufen
Hallo,
nach dem ich mit
SQL-Code:
alle Daten aus meiner Tabelle abgerufen habe, möchte ich nun mit der Auswahl über ein Listview Item die einzelnen dazugehörigen Datensätze abrufen.
SELECT * FROM Benutzer
Dies wollte ich zB so machen:
Delphi-Quellcode:
Aber hier bei wird immer nur der erste Datensatz ausgegeben... Was kann ich machen, damit das funktioniert...?
if Query1.FieldByName ('Archiv').AsString = '1' then begin
CheckBox4.Checked := true Danke Thomas |
Re: Datensätze bei Listview-ItemSelcet abrufen
Hai Plague,
da ein TListView keine Datenbanksensitive-Komponente ist musst Du das alles von Hand machen. Ich mache es immer so: Ich speichere mit über die Eigenschaft .Data eines Items den Primärschlüssel eines Datensatzes (ID-Feld). Bei einem klick auf die Zeile des ListViews führe ich ein neues SELECT aus und filtere auf die Ausgewähle ID. Hier mal ein Beispiel wie ich es in einem Projekt gemacht habe:
Delphi-Quellcode:
An die ID des markierten Items kommst Du dann so:
procedure TFRM_Main.ShowAnreden; // Alle Anreden in einem ListView anzeigen
var LI: TListItem; LC: TListColumn; begin with DataModule1.ZReadOnlyQuery1 do begin close; SQL.Text := 'SELECT * FROM anreden ORDER BY anrede'; open; ListView1.Items.BeginUpdate; Listview1.Items.Clear; Listview1.Columns.Clear; LC := ListView1.Columns.Add; LC.Caption := 'Anrede'; LC.Width := 150; LC := ListView1.Columns.Add; LC.Caption := 'Briefanrede'; LC.Width := 250; while not (EOF) do begin LI := Listview1.Items.Add; LI.ImageIndex := 0; LI.Data := Pointer(FieldByName('id').AsInteger); // ID speichern! LI.Caption := FieldByName('anrede').AsString; LI.SubItems.Add(FieldByName('briefanrede').AsString); Next; end; ListView1.Items.EndUpdate; close; end; end;
Delphi-Quellcode:
ID := Integer(ListView1.Items[ListView1.ItemIndex].Data)
|
Re: Datensätze bei Listview-ItemSelcet abrufen
Schon mal Danke im Vorraus für deine Hilfe!
Ich habe es nun so versucht:
Delphi-Quellcode:
Aber hier sagt Delphi dass es zu einer Zugriffsverletzung kommt.
procedure TFrame3.ListView1SelectItem(Sender: TObject; Item: TListItem;
Selected: Boolean); var ID : Integer; begin ID := Integer(ListView1.Items[ListView1.ItemIndex].Data); Query1.Close; Query1.SQL.Text := ('SELECT * FROM Benutzer WHERE ID='+inttostr(ID)); Query1.Open; end; Was machte ich falsch? Gruß Thomas |
Re: Datensätze bei Listview-ItemSelcet abrufen
Hast Du der Eigenschaft "Data" auch die ID des Datensatzes zugewiesen?
Zeige mal den Code wie Du das gemacht hast. |
Re: Datensätze bei Listview-ItemSelcet abrufen
Hallo,
auf den 1. Blick sehe ich eine überflüssige Klammer um das SQL-Statement: Versuche einmal statt
Delphi-Quellcode:
dieses:
Query1.SQL.Text := ('SELECT * FROM Benutzer WHERE ID='+inttostr(ID));
Delphi-Quellcode:
Query1.SQL.Text:=Format('SELECT * FROM Benutzer WHERE ID=%d', [ID]);
|
Re: Datensätze bei Listview-ItemSelcet abrufen
Hier weise ich Data den ID Wert zu...
Delphi-Quellcode:
@Gollum: Hat leider auch nicht geklappt :(
with Frame31 do
begin Query1.Close; Query1.SQL.Text := 'SELECT * FROM Benutzer'; Query1.Open; While not (Query1.Eof) do begin item := ListView1.Items.Add; item.Data := Pointer(Query1.FieldByName('ID').AsInteger); item.Caption := Query1.FieldByName ('Benutzer').AsString; item.SubItems.Add(Query1.FieldByName ('Berechtigung').AsString); Query1.Next; end; end; Gruß Thomas |
Re: Datensätze bei Listview-ItemSelcet abrufen
An welcher Stelle genau knallt es denn?
|
Re: Datensätze bei Listview-ItemSelcet abrufen
Es knallt an der Stelle, wo ich auf dem Listview einen Eintrag auswählt. Dann soll das Programm ja eine neue SQL Anfrage starten. Aber das will einfach nicht klappen. Dann kommt nur der Fehler, dass es eine Zugriffsverletzung geben hat...
Am Anfang wird das Programm ganz normal erzeugt... Gruß Thomas |
Re: Datensätze bei Listview-ItemSelcet abrufen
Und in der Tabelle stehen bei ID auch nur Zahlen?
Setze mal einen Breakpoint auf die erste Zeile deines OnClick ereignisses.
Delphi-Quellcode:
procedure TFrame3.ListView1SelectItem(Sender: TObject; Item: TListItem;
Selected: Boolean); var ID : Integer; begin if (Selected) then begin ID := Integer(Item.Data); Query1.Close; Query1.SQL.Text := 'SELECT * FROM Benutzer WHERE ID = '+inttostr(ID); Query1.Open; end; end; |
Re: Datensätze bei Listview-ItemSelcet abrufen
Vielen Danke
Es klappt! |
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:47 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz