Datensatz löschen
-
- Beiträge: 1582
- Registriert: Fr 10. Okt 2008, 23:54
- OS, Lazarus, FPC: Winuxarm (L 4 FPC 3.2.2)
- CPU-Target: 32/64Bit
Re: Datensatz löschen
Ich gehe mal davon aus, Du willst nur den einen aktuellen ausgewählten Datensatz löschen, dann mache das:
ZQuery1.Delete;
Ansonsten muss natürlich der Wert von DBEdit1 VOR dem schließen der Query in eine Stringvariable gespeichert werden, wenn man den NACH dem schließen verwenden möchte, ansonsten ist der nämlich einfach weg.
Oder nehme eine zweite TZQuery für das Löschen und mache nach dem Löschen ein Refresh auf die erste Query.
ZQuery1.Delete;
Ansonsten muss natürlich der Wert von DBEdit1 VOR dem schließen der Query in eine Stringvariable gespeichert werden, wenn man den NACH dem schließen verwenden möchte, ansonsten ist der nämlich einfach weg.
Oder nehme eine zweite TZQuery für das Löschen und mache nach dem Löschen ein Refresh auf die erste Query.
EleLa - Elektronik Lagerverwaltung - www.elela.de
Danke!!!! Funktioniert!
Vielen Dank @ Antrepolit und @ MmVisual!!
Beide Lösungen funktionieren!
Sowohl die unten Angegebene von Antrepolit oder auch der (aktuell auskommentierte) Einzeiler von MmVisual!!
Was passiert da nur mit dem DBEdit.Text in dieser Routine:
!!!?
.... jetzt mache ich mich 'mal an den Update-Befehl. .... und wenn's so weitergeht, wird's mir die nächsten zwei Tage nicht langweilig
Schönes Wochenende!!
Aliobaba
Beide Lösungen funktionieren!
Sowohl die unten Angegebene von Antrepolit oder auch der (aktuell auskommentierte) Einzeiler von MmVisual!!


Code: Alles auswählen
procedure TForm1.LoeschenClick(Sender: TObject);
Var
x : string;
begin
Label6.Caption:= DBEdit1.Text; // Zur Kontrolle, ob der richtige String angewählt ist
x :=DBEdit1.Text;
with ZQuery1 do
begin
// ZQuery1.Delete;
sql.Text := 'DELETE FROM `tabelle1` WHERE Column1= :col1 ';
ParamByName('Col1').AsString := x;
ExecSQL;
Close;
end;
Label7.Caption:= DBEdit1.Text; // Zur Kontrolle, ob der richtige String angewählt ist
ZQuery1.SQL.Text := Memo1.Lines.Text; // alle Daten in der DBGrid nochmal anzeigen
ZQuery1.Open;
end;
Code: Alles auswählen
with ZQuery1 do
...
end
.... jetzt mache ich mich 'mal an den Update-Befehl. .... und wenn's so weitergeht, wird's mir die nächsten zwei Tage nicht langweilig

Schönes Wochenende!!
Aliobaba
Zuletzt geändert von Lori am So 20. Mai 2012, 10:20, insgesamt 2-mal geändert.
Grund: Verwende bitte den Highlighter.
Grund: Verwende bitte den Highlighter.
"MyMemoryDB" ( https://www.heise.de/download/product/mymemorydb-89626 )
Re: Datensatz löschen
... wie schon vermutet: Es ist ein harter Nachmittag.
Eine definitiv (versprochen!) letzte Frage für heute. Die letzten 'Feinheiten' des Update-Statements machen noch Probleme:
So wie hier, also mit den auskommentierten Zeilen funktioniert alles wunderbar.
Sobald ich aber nicht nur den Eintrag der ersten Tabellenspalte ändern möchte, kommt eine Fehlermeldung
zum Beispiel:
SQL Error : Truncated incorrect DOUBLE value: 'B2x'
'Bsx' ist der Wert in der ersten Spalte wie er nach dem Ändern sein sollte
Aliobaba
Eine definitiv (versprochen!) letzte Frage für heute. Die letzten 'Feinheiten' des Update-Statements machen noch Probleme:
Code: Alles auswählen
with ZQuery1 do
begin
SQL.Clear;
sql.Text := 'Update tabelle1 set Column1 = :Coln1';
// sql.add ('AND Column2 = :Coln2');
// sql.add ('AND Column3 = :Coln3');
// sql.add ('AND Column4 = :Coln4');
sql.Add('WHERE Column1= :Colv1 AND Column2 = :Colv2 AND Column3 = :Colv3 AND Column4 = :Colv4');
sql.Add('LIMIT 1');
Params.ParamValues['Colv1'] := v1;
Params.ParamValues['Colv2'] := v2;
Params.ParamValues['Colv3'] := v3;
Params.ParamValues['Colv4'] := v4;
Params.ParamValues['Coln1'] := n1;
// Params.ParamValues['Coln2'] := n2;
// Params.ParamValues['Coln3'] := n3;
///Params.ParamValues['Coln4'] := n4;
ExecSQL;
Close;
end;
Sobald ich aber nicht nur den Eintrag der ersten Tabellenspalte ändern möchte, kommt eine Fehlermeldung
zum Beispiel:
Code: Alles auswählen
with ZQuery1 do
begin
SQL.Clear;
sql.Text := 'Update tabelle1 set Column1 = :Coln1';
[b]sql.add ('AND Column2 = :Coln2');[/b]
// sql.add ('AND Column3 = :Coln3');
// sql.add ('AND Column4 = :Coln4');
sql.Add('WHERE Column1= :Colv1 AND Column2 = :Colv2 AND Column3 = :Colv3 AND Column4 = :Colv4');
sql.Add('LIMIT 1');
Params.ParamValues['Colv1'] := v1;
Params.ParamValues['Colv2'] := v2;
Params.ParamValues['Colv3'] := v3;
Params.ParamValues['Colv4'] := v4;
Params.ParamValues['Coln1'] := n1;
Params.ParamValues['Coln2'] := n2;
// Params.ParamValues['Coln3'] := n3;
///Params.ParamValues['Coln4'] := n4;
ExecSQL;
Close;
end;
'Bsx' ist der Wert in der ersten Spalte wie er nach dem Ändern sein sollte
Aliobaba
Zuletzt geändert von Lori am So 20. Mai 2012, 10:21, insgesamt 1-mal geändert.
Grund: Verwende bitte den Highlighter.
Grund: Verwende bitte den Highlighter.
"MyMemoryDB" ( https://www.heise.de/download/product/mymemorydb-89626 )
-
- Beiträge: 1582
- Registriert: Fr 10. Okt 2008, 23:54
- OS, Lazarus, FPC: Winuxarm (L 4 FPC 3.2.2)
- CPU-Target: 32/64Bit
Re: Datensatz löschen
Da darf kein AND rein, die SQL Syntax ist falsch.
EleLa - Elektronik Lagerverwaltung - www.elela.de
Re: Datensatz löschen
Hallo MmVisual,
Meinst Du so? :
... funktioniert leider auch nicht.
Die Syntax ist schon ein Riesenproblem, wenn man ein SQL-Statement in die Form umwandlen möchte, wie sie Lazarus bzw. Pascal fordert. Man kann nämlich leider nicht die Variablen 1:1 in die "Lazarus-gefällige" Ausdrucksweise sozusagen "Stück für Stück" "umschreiben". ... und Regeln, wie diese Konvertierung zu bewerkstelligen ist, habe ich - trotz wirklich umfangreicher Suche - nirgendwo gefunden.
Eine Lösung hätte ich ja schon:
Die ursprünglichen Datensatzeinträge in Edit-Felder laden, dann verändern, dann den ursprnglichen Datensatz löschen und dann die veränderten Edit-felder wieder neu speichern.
.... aber elegant ist das nicht
Schönen abend!
Aliobaba
Meinst Du so? :
Code: Alles auswählen
sql.Text := 'Update tabelle1 set Column1 = :Coln1';
sql.add ('Column2 = :Coln2');
sql.add ('Column3 = :Coln3');
sql.add ('Column4 = :Coln4');
sql.Add('WHERE Column1= :Colv1 AND Column2 = :Colv2 AND Column3 = :Colv3 AND Column4 = :Colv4');
sql.Add('LIMIT 1');
Params.ParamValues['Colv1'] := v1;
Params.ParamValues['Colv2'] := v2;
Params.ParamValues['Colv3'] := v3;
Params.ParamValues['Colv4'] := v4;
Params.ParamValues['Coln1'] := n1;
Params.ParamValues['Coln2'] := n2;
Params.ParamValues['Coln3'] := n3;
Params.ParamValues['Coln4'] := n4;
Die Syntax ist schon ein Riesenproblem, wenn man ein SQL-Statement in die Form umwandlen möchte, wie sie Lazarus bzw. Pascal fordert. Man kann nämlich leider nicht die Variablen 1:1 in die "Lazarus-gefällige" Ausdrucksweise sozusagen "Stück für Stück" "umschreiben". ... und Regeln, wie diese Konvertierung zu bewerkstelligen ist, habe ich - trotz wirklich umfangreicher Suche - nirgendwo gefunden.

Eine Lösung hätte ich ja schon:
Die ursprünglichen Datensatzeinträge in Edit-Felder laden, dann verändern, dann den ursprnglichen Datensatz löschen und dann die veränderten Edit-felder wieder neu speichern.
.... aber elegant ist das nicht

Schönen abend!
Aliobaba
Zuletzt geändert von Lori am So 20. Mai 2012, 10:22, insgesamt 1-mal geändert.
Grund: Um Code hervorzuheben ist der Highlighter da, verwende ihn bitte auch.
Grund: Um Code hervorzuheben ist der Highlighter da, verwende ihn bitte auch.
"MyMemoryDB" ( https://www.heise.de/download/product/mymemorydb-89626 )
-
- Beiträge: 1582
- Registriert: Fr 10. Okt 2008, 23:54
- OS, Lazarus, FPC: Winuxarm (L 4 FPC 3.2.2)
- CPU-Target: 32/64Bit
Re: Datensatz löschen
Ich könnte Dir ja die Lösung aufschreiben, aber dann hast Du keinen Lernspaß mehr 
Siehe hier:
http://www.sqlite.org/lang_update.html" onclick="window.open(this.href);return false;

Siehe hier:
http://www.sqlite.org/lang_update.html" onclick="window.open(this.href);return false;
EleLa - Elektronik Lagerverwaltung - www.elela.de
Re: Datensatz löschen
Hallo MmVisual,
Du bist nicht nur ein freundlicher Helfer und ein hervorragender Programmierer, sondern auch noch ein geschickter Pädagoge!!
Das kleine "," in dem kleinen Kreis hier http://www.sqlite.org/lang_update.html" onclick="window.open(this.href);return false; habe ich nicht gesehen!!
DANKE!!!
.. und einen schönen Sonntag noch!!
Aliobaba
Du bist nicht nur ein freundlicher Helfer und ein hervorragender Programmierer, sondern auch noch ein geschickter Pädagoge!!

Das kleine "," in dem kleinen Kreis hier http://www.sqlite.org/lang_update.html" onclick="window.open(this.href);return false; habe ich nicht gesehen!!
DANKE!!!
.. und einen schönen Sonntag noch!!
Aliobaba
"MyMemoryDB" ( https://www.heise.de/download/product/mymemorydb-89626 )