Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Datensätze bei Listview-ItemSelcet abrufen (https://www.delphipraxis.net/39858-datensaetze-bei-listview-itemselcet-abrufen.html)

Plague 8. Feb 2005 12:50

Datenbank: Paradox • Version: 7 • Zugriff über: Query Komponente

Datensätze bei Listview-ItemSelcet abrufen
 
Hallo,

nach dem ich mit
SQL-Code:
SELECT * FROM Benutzer
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.
Dies wollte ich zB so machen:
Delphi-Quellcode:
if Query1.FieldByName ('Archiv').AsString = '1' then begin
         CheckBox4.Checked := true
Aber hier bei wird immer nur der erste Datensatz ausgegeben... Was kann ich machen, damit das funktioniert...?

Danke
Thomas

Sharky 8. Feb 2005 12:57

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:
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;
An die ID des markierten Items kommst Du dann so:
Delphi-Quellcode:
 ID := Integer(ListView1.Items[ListView1.ItemIndex].Data)

Plague 9. Feb 2005 09:12

Re: Datensätze bei Listview-ItemSelcet abrufen
 
Schon mal Danke im Vorraus für deine Hilfe!

Ich habe es nun so versucht:
Delphi-Quellcode:
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;
Aber hier sagt Delphi dass es zu einer Zugriffsverletzung kommt.
Was machte ich falsch?
Gruß
Thomas

Sharky 9. Feb 2005 09:20

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.

Gollum 9. Feb 2005 09:21

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:
Query1.SQL.Text := ('SELECT * FROM Benutzer WHERE ID='+inttostr(ID));
dieses:

Delphi-Quellcode:
Query1.SQL.Text:=Format('SELECT * FROM Benutzer WHERE ID=%d', [ID]);

Plague 9. Feb 2005 09:29

Re: Datensätze bei Listview-ItemSelcet abrufen
 
Hier weise ich Data den ID Wert zu...

Delphi-Quellcode:
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;
@Gollum: Hat leider auch nicht geklappt :(

Gruß
Thomas

Sharky 9. Feb 2005 09:30

Re: Datensätze bei Listview-ItemSelcet abrufen
 
An welcher Stelle genau knallt es denn?

Plague 9. Feb 2005 09:38

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

Sharky 9. Feb 2005 09:44

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;

Plague 9. Feb 2005 09:51

Re: Datensätze bei Listview-ItemSelcet abrufen
 
Vielen Danke
Es klappt!


Alle Zeitangaben in WEZ +1. Es ist jetzt 05:14 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz