Hallo Freunde des Programmierens,
ich komme gleich zum Punkt.
Wie bekomme ich unterschiedliche Werte einer Tabelle, die jedoch die selbe ID haben, in ein Array gespeichert?
Es geht mir um das gleichzeitige Löschen mehrerer Werte.
Als Beispiel:
Tabelle 1:
id: 1 | kat_id: 1
id: 2 | kat_id: 2
id: 3 | kat_id: 1
id: 4 | kat_id: 1
id: 5 | kat_id: 3
id: 6 | kat_id: 1
Kat_id ist eine Zuordnungs-ID für eine andere Tabelle. Das Ausgeben dieser IDs ist für mich kein Problem. Das Speichern in ein Array jedoch sehr.
In diesem Beispiel sollen nun alle ID's mit der kat_id 1 gelöscht werdenn. Meine Vorüberlegung war es, die DELETE-Funktion während des SELECTes durchzuführen. Nun ja, es kommt die Meldung, dass es Probleme mit der Perfomance gibt. Nun war meine zweite Idee, die zu löschenden IDs in ein Array zu speichern, welche dann gelöscht werden können. Nun meine Fragen.
1. Wie bekomme ich die unterschiedlichen IDs in ein Array?
2. Welches Array wäre besser, ein dynamisches oder statisches Array?
3. Wäre eine for-each-Schreife (wie in php) möglich? Wenn ja, wie?
Hier mir Quellcode:
Code:
procedure TFormMain.PopupMenuItemRechnungLoeschenClick(Sender: TObject);
var
id, InfoTitel, InfoText : String;
i : String;
begin
InfoTitel:='Rechnung löschen?';
InfoText:='Soll die ausgewählte Rechnung wirklich gelöscht werden?';
if LVRechnungen.SelCount >= 1 then
begin
if QuestionDlg(InfoTitel, InfoText, mtWarning, [mrYes, 'Ja', mrNo, 'Nein'], 0) = mrYes then
begin
id:=LVRechnungen.Selected.Caption;
ZQuery.SQL.Clear;
ZQuery.Params.Clear;
ZQuery.SQL.Text:='SELECT ReKatID, ReInhID FROM rechnungen_inhalt WHERE ReKatID='+#39+id+#39+' ORDER BY ReInhID DESC';
ZQuery.Open;
while not ZQuery.EOF do
begin
i:=ZQuery.FieldByName('ReInhID').AsString;
ShowMessage(i);
ZQuery.Next;
end;
ZQuery.Close;
//ZQuery.SQL.Text:='DELETE FROM rechnungen_inhalt WHERE ReKatID='+#39+id+#39;
//ZQuery.ExecSQL;
//LVRechnungen.Selected.Delete;
end;
end;
end;
Weitere Informationen:
Datenbank-Protokoll: sqlite3
Datenbank-Schnittstelle: ZeosDB (sofern man das als Schnittstelle bezeichnen kann)
Programm: Lazarus
IDE v1.6.2
Leider sind meine Kenntnisse noch auf einem relativ geringem Niveau, sodass ich um Hilfe bitten muss.
Über postive Rückmeldungen würde ich mich sehr freuen.
Liebe Grüße
BerlinerBaer