Einzelnen Beitrag anzeigen

BerlinerBaer

Registriert seit: 14. Feb 2017
Ort: Berlin
4 Beiträge
 
FreePascal / Lazarus
 
#1

Datenbankabfrage in Array speichern

  Alt 9. Jun 2017, 18:56
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

Geändert von BerlinerBaer ( 9. Jun 2017 um 19:01 Uhr)
  Mit Zitat antworten Zitat