![]() |
Delphi-Version: 5
Problem mit SQL.Add
Hi Leute,
möchte in SQL-Datenbank eine größere Menge Datensätze bzw. Felder updaten. Mit SQL.Text wird mir die Zeile zu lang.Deshalb möchte ich das SQL Statement SQL.Add verwenden. Leider Funktioniert das Speichern nicht. Was mache ich falsch ? Hier mein Code:
Delphi-Quellcode:
with LiteQuery_rechng do
begin Close; SQL.Clear; SQL.Add('UPDATE Rechnung SET'); SQL.Add('MWsteuer = :mw'); SQL.Add('Nachlassumme = :nasum'); SQL.Add('Sicherheitsumme = :ssum'); SQL.Add('Skontosumme = :sksum'); SQL.Add('Nettosumme = :nsum'); SQL.Add('Bruttogesamt = :bsum'); SQL.Add('Where Rechnr = + QuotedStr(ed_rechngd_rechnr.Text)+'); ParamByName('mw').AsCurrency := StrToCurr(lbl_mwst.Caption); ParamByName('nasum').AsCurrency := StrToCurr(lbl_nachlass.Caption); ParamByName('ssum').AsCurrency := StrToCurr(lbl_sicherheit.Caption); ParamByName('sksum').AsCurrency := StrToCurr(lbl_skonto.Caption); ParamByName('nsum').AsCurrency := StrToCurr(lbl_netto.Caption); ParamByName('bsum').AsCurrency := StrToCurr(lbl_brutto.Caption); try ExecSQL;; except ShowMessage('Speichern fehlgeschlagen'); end; end; |
AW: Problem mit SQL.Add
|
AW: Problem mit SQL.Add
Selbst Schuld, wenn du in deiner Fehlerbehandlung deinem sinnlosen Try-Except-Gestümpere grob fahrlässig die ursprüngliche Fehlermeldung vernichtest.
PS: Zitat:
|
AW: Problem mit SQL.Add
Zitat:
Delphi-Quellcode:
Das hatten wir doch erst? Das ist eine Plage! Vergiss einfach das es existiert und arbeite ohne!
with
Delphi-Quellcode:
Genau! Nur wo?
ShowMessage('Speichern fehlgeschlagen');
Delphi-Quellcode:
Wäre es so nicht etwa besser?
try
//alles sql gezerre except on E:Exception do ShowMessage('Speichern fehlgeschlagen. Fehler : '+E.Message); end;
Delphi-Quellcode:
Nach jedem Feld in der Zuweisungsliste kommt ein Komma (außer beim letzten natürlich)
SQL.Add('Nachlassumme = :nasum');
Zitat:
|
AW: Problem mit SQL.Add
Hallöle...8-)
...ich hatte mir geschworen, niemals mehr auf Beitrage die WITH enthalten zu antworten...:? Das WITH sagt...entweder Copy/Paste aus alten Beispielen oder "ich hab das immer so gemacht". Die Zeiten ändern sich...:?
Delphi-Quellcode:
...meinst du, daß das SQL(string) "QuotedStr" versteht? :wink:
...
SQL.Add('Where Rechnr = + QuotedStr(ed_rechngd_rechnr.Text)+'); besser für die Zeile:
Delphi-Quellcode:
die richtige Zeile:
...
SQL.Add('where Rechnr = ' + QuotedStr(ed_rechngd_rechnr.Text));
Delphi-Quellcode:
LiteQuery_rechng.SQL.Add('where Rechnr = :REN');
LiteQuery_rechng.SQL.ParamByName('REN').AsString := ed_rechngd_rechnr.Text; PS: gegen die ADD Origien gibt es was von "mir" :wink: ![]() |
AW: Problem mit SQL.Add
Was soll man da denn noch sagen?
Ohne den Schwachsinn mit Try-Except, würde er bestimmt eine richtige Fehlermeldung bekommen, die ihm alle Fehler zeigt. Selbst wenn die DB das QuoteStr verstehen würde, dann spätestens das im QuoteStr nicht mehr, bzw. die + davor und dahinter auch nicht. Aber vorher wäre erstmal beim zweiten = gemeckert wurden, wegen der fehlenden Komata. |
AW: Problem mit SQL.Add
Moin,
Du könntest das auch so schreiben:
Delphi-Quellcode:
und dann kommt das füllen der Parameter.
qry1.SQL.Text := 'UPDATE Rechnung SET ' +
' MWSteuer = :mw ' + ' ,Nachlassumme = :nasum ' + ' ,Sicherheitsumme = :ssum ' + ' ,Skontosumme = :sksum ' + ' ,Nettosumme = :nsum ' + ' ,Bruttogesamt = :bsum ' + 'WHERE ' + ' Rechnr = :ed_rechngd_rechnr '; Das fehlende Komma ist natürlich das erste Problem, mehrere Felder mit SET ändern bedarf einem Komma vor jedem Feld bzw. nach jedem Inhalt. Und dann kannst Du die Rechnr natürlich auch per Parameter übergeben. |
AW: Problem mit SQL.Add
Als erstes mal vielen Dank.
Die Lösung beim Betrag von Haentschman hatte ich schon auch probiert, aber funhtionierte eben nicht. Das mit den fehlenden Kommas hatte ich auch schon erkannt. Das mit der Fehlerexcept wurde mir von einen im Forum als Lösung unterbreitet. Die Lösung von rokli war für mich die beste und diese klappt auch super. Sie ist sehr übersichtlich. Nochmals vielen Dank besonders an rokli, der auch nett die Lösung rübergebtacht hat. Jmich |
AW: Problem mit SQL.Add
Try-Except macht nur Sinn, wenn man darin auch was Sinnvolles macht.
z.B. den originalen Fehler in ein Log schreiben, oder ihn an die neue Fehlermeldung mit anzuhängen. Oder eben, wenn man genau weiß welcher Fehler es ist und man ihn gezielt unterdrücken will, um es z.B. nochmal anders zu versuchen, oder Dergleichen. |
AW: Problem mit SQL.Add
Zitat:
Persönliche Entwicklung im Fachgebiet -> Stetig steigend Persönliche Entwicklung im Umgang mit Menschen -> Stetig fallend |
AW: Problem mit SQL.Add
Hallo,
sehe ich nicht so! Es ist halt ein Problem, dass hier ankommen, und die einfachsten Sachen ignorieren. wenn ich try except benutzen, dann doch bitte richtig. |
AW: Problem mit SQL.Add
Fahrt mal ein bischen runter, Leute.
Als ich die Eingangsfrage gelesen hatte, dachte ich auch, dass da wesentliche Grundlagen nicht beachtet werden. OK, gedacht habe ich da was anderes, aber formulieren kann man es ja netter. :wink: Dann habe ich genauer hingesehen: - TE seit 2007 hier mit 15 Beiträgen - D5 - Simple SQL-Fehler (und andere Grundlagenfehler) Folglich wenig/keine Erfahrung, Gelegenheitsprogrammierer, o.ä. Das kann man einfach mal berücksichtigen, wenn man antwortet und muss nicht mit dem Hammer drauf hauen. Auch wenn man diese Sachen ständig wiederholen muss. Der harte Kern der DP liest hier sicher täglich mit, aber die meisten kommen nur hierher, wenn sie ein Problem haben und wissen nicht, was man hier regelmäßig wiederholen muss. Also nächstes mal einfach erstmal entspannt zurücklehnen und überlegen, was und wie man antwortet. Oder man hält einfach mal die Finger still. Auf die Grundlagen werden auch andere hinweisen. |
AW: Problem mit SQL.Add
Hi zusammen,
hat eigentlich jemand mal zum TRY - EXCEPT Block was inhaltlich gesagt? Also ich mache das so
Delphi-Quellcode:
Das ist eine ganze einfach Variante, um überhaupt was zu sehen.
try
qry2.Open; except on E: Exception do begin ShowMessage(e.Message); ShowMessage(qry2.SQL.Text); end; end; Wenn im SQL ein Fehler enthalten ist, wird durch den EXECPT das Programm in die Fehlerbehandlung geschickt. Durch den ersten SHOWMESSAGE die Fehlermeldung ansich gezeigt und der zweit SHOWMESSAGE zeigt mir den Inhalt der defekten SQL, damit ich mit der Fehleranalyse beginnen kann. Und im wirklich Leben übergebe ich diese Daten an eine Prozedur, die mir diese Fehlermeldung (mit Programmnamen, Username, wann das gewesen ist, etc.) wiederum in eine DB schreibt. :cry: Da sollte dann natürlich kein Fehler drin passieren :wink: Vielleich ist das ja noch eine kleine Anregung aus der geworfenen Fehlermeldung Nutzen zu ziehen ... Beste Grüße @Sinspin: Sorry - Du hattest das auch schon gezeigt! (Nachtrag) |
AW: Problem mit SQL.Add
Da wurde schon drauf eingegangen.
Ich persönlich würde aber diese Variante bevorzugen und nur die Message ergänzen und die Anzeige der Exception der App überlassen oder zumindest nur einmal Showmessage aufrufen.
Delphi-Quellcode:
try
qry2.Open; except on E: Exception do begin E.Message := E.Message + #13 + qry2.SQL.Text; raise; end; end; |
AW: Problem mit SQL.Add
Wenn "manueller" Zeilenumbruch, dann bitte #10 oder #13#10 oder sLineBreak, denn #13 wird manchmal garnicht als Zeilenumbruch von gewissen Komponenten/Programmen erkannt.
#13 aka CR heißt "vor zur ersten Spalte" (Carriage Return) und #10 aka LF heißt "in nächste Zeile" (Line Feed) Somit ist Windows eigentlich der Einzige, der es richtig macht, genau so, wie die Drucker :angle: Die Einzigen, die #13 hatten, war Apple und auch die haben das vor Jahren aufgegeben (sich die #10 von Linux geklaut). Bleibt aktuell nur noch das kranke RichEdit im Windows, welches auch diesen Mist baut, wobei Delphi dort Eins drauf setzt und noch mehr Mist damit baut, weil es für die #13#10 daraus macht, aber das nur bei der Hälfte der APIs, womit die Indize von Chars im Text nicht mit SelStart/SelLength übereinstimmen. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:09 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