![]() |
Datenbank: MySQL • Version: 5 • Zugriff über: ??
MySQL Query Update funktioniert nicht
Hallo,
ich habe festgestellt, dass meine alte Update Funktion, siehe 2. Code, in der BDGrid mit einem Leerem String nicht funktioniert. In der neuen Variante, wo ich dachte, das es dort geht, funktioniert der leere String ebenfalls nicht + Update generell nicht, mit folgender Fehlermeldung: Error: SQL Syntax... Habt ihr eine Idee? NEU:
Code:
MainModule.UniMainModule.mySQLUpdateSQL1.ModifySQL.Clear;
MainModule.UniMainModule.mySQLUpdateSQL1.ModifySQL.Add('update `' + Tabelle + '`'); MainModule.UniMainModule.mySQLUpdateSQL1.ModifySQL.Add('set '); MainModule.UniMainModule.mySQLUpdateSQL1.ModifySQL.Add('Firma = :Firma, '); MainModule.UniMainModule.mySQLUpdateSQL1.ModifySQL.Add('Adress1 = :Adress1, '); MainModule.UniMainModule.mySQLUpdateSQL1.ModifySQL.Add('Adress2 = :Adress2, '); MainModule.UniMainModule.mySQLUpdateSQL1.ModifySQL.Add('Straße = :Straße, '); MainModule.UniMainModule.mySQLUpdateSQL1.ModifySQL.Add('PLZ = :PLZ, '); MainModule.UniMainModule.mySQLUpdateSQL1.ModifySQL.Add('Ort = :Ort, '); MainModule.UniMainModule.mySQLUpdateSQL1.ModifySQL.Add('Land = :Land, '); MainModule.UniMainModule.mySQLUpdateSQL1.ModifySQL.Add('Such1 = :Such1 '); MainModule.UniMainModule.mySQLUpdateSQL1.ModifySQL.Add('Such2 = :Such2 '); MainModule.UniMainModule.mySQLUpdateSQL1.ModifySQL.Add('where '); MainModule.UniMainModule.mySQLUpdateSQL1.ModifySQL.Add('Firma = :OLD_Firma and '); MainModule.UniMainModule.mySQLUpdateSQL1.ModifySQL.Add('Adress1 = :OLD_Adress1 and '); MainModule.UniMainModule.mySQLUpdateSQL1.ModifySQL.Add('Adress2 = :OLD_Adress2 and '); MainModule.UniMainModule.mySQLUpdateSQL1.ModifySQL.Add('Straße = :OLD_Straße and '); MainModule.UniMainModule.mySQLUpdateSQL1.ModifySQL.Add('PLZ = :OLD_PLZ and '); MainModule.UniMainModule.mySQLUpdateSQL1.ModifySQL.Add('Ort = :OLD_Ort and '); MainModule.UniMainModule.mySQLUpdateSQL1.ModifySQL.Add('Land = :OLD_Land and '); MainModule.UniMainModule.mySQLUpdateSQL1.ModifySQL.Add('Such1 = :OLD_Such1 and '); MainModule.UniMainModule.mySQLUpdateSQL1.ModifySQL.Add('Such2 = :OLD_Such2;'); Mein Alter Code: Da ging die Update Funktion. Bis auf einem Leeren String....
Code:
{MainModule.UniMainModule.mySQLUpdateSQL1.ModifySQL.Text := 'update ' + Tabelle + #10 +
'set' + #10 + ' Firma = :Firma,'+ #10 + ' Adress1 = :Adress1,'+ #10 + ' Adress2 = :Adress2,'+ #10 + ' Straße = :Straße,'+ #10 + ' PLZ = :PLZ,'+ #10 + ' Ort = :Ort,'+ #10 + ' Land = :Land,'+ #10 + ' Such1 = :Such1,'+ #10 + ' Such2 = :Such2'+ #10 + 'where'+ #10 + ' Firma = :OLD_Firma and'+ #10 + ' Adress1 = :OLD_Adress1 and'+ #10 + ' Adress2 = :OLD_Adress2 and'+ #10 + ' Straße = :OLD_Straße and'+ #10 + ' PLZ = :OLD_PLZ and'+ #10 + ' Ort = :OLD_Ort and'+ #10 + ' Land = :OLD_Land and'+ #10 + ' Such1 = :OLD_Such1 and'+ #10 + ' Such2 = :OLD_Such2'; } |
AW: MySQL Query Update funktioniert nicht
fehlt da ein Komma?
Delphi-Quellcode:
Wie befüllst Du denn die Parameter? (Quellcode dazu?)
MainModule.UniMainModule.mySQLUpdateSQL1.ModifySQL.Add('Such1 = :Such1 ');
Was meinst Du mit 'leere String'? Wo ist der im geposteten Quelltext zu suchen? |
AW: MySQL Query Update funktioniert nicht
Hallo,
mein Gott hast Du scharfsinnige Augen :D Das Updaten der Zeilen funktioniert jetzt, Danke deiner Hilfe. Leider noch keine Leeren Datensätze, also "" Zellen... Mal Angenommen, ich möchte das Adressfeld1 leeren und speichern in der DBGrid. Das wird nicht übernommen. DBGrid.Datasource -> UniMainModule.DataSource3.Dataset -> mySQLQuery3.UpdateObject -> mySQLUpdateSQL1 Code komplett:
Code:
procedure TfmAdressverwaltung.UniFormShow(Sender: TObject);
begin UniButton1.Click; end; procedure TfmAdressverwaltung.UniButton1Click(Sender: TObject); var search, Tabelle: String; begin if UniMainModule.RRSuche = True then begin Tabelle := 'Rechnungsadressen'; end else begin Tabelle := 'Lieferadressen'; end; MainModule.UniMainModule.mySQLUpdateSQL1.ModifySQL.Clear; MainModule.UniMainModule.mySQLUpdateSQL1.ModifySQL.Add('update `' + Tabelle + '`'); MainModule.UniMainModule.mySQLUpdateSQL1.ModifySQL.Add('set'); MainModule.UniMainModule.mySQLUpdateSQL1.ModifySQL.Add('Firma = :Firma,'); MainModule.UniMainModule.mySQLUpdateSQL1.ModifySQL.Add('Adress1 = :Adress1,'); MainModule.UniMainModule.mySQLUpdateSQL1.ModifySQL.Add('Adress2 = :Adress2,'); MainModule.UniMainModule.mySQLUpdateSQL1.ModifySQL.Add('Straße = :Straße,'); MainModule.UniMainModule.mySQLUpdateSQL1.ModifySQL.Add('PLZ = :PLZ,'); MainModule.UniMainModule.mySQLUpdateSQL1.ModifySQL.Add('Ort = :Ort,'); MainModule.UniMainModule.mySQLUpdateSQL1.ModifySQL.Add('Land = :Land,'); MainModule.UniMainModule.mySQLUpdateSQL1.ModifySQL.Add('Such1 = :Such1,'); MainModule.UniMainModule.mySQLUpdateSQL1.ModifySQL.Add('Such2 = :Such2'); MainModule.UniMainModule.mySQLUpdateSQL1.ModifySQL.Add('where'); MainModule.UniMainModule.mySQLUpdateSQL1.ModifySQL.Add('Firma = :OLD_Firma and'); MainModule.UniMainModule.mySQLUpdateSQL1.ModifySQL.Add('Adress1 = :OLD_Adress1 and'); MainModule.UniMainModule.mySQLUpdateSQL1.ModifySQL.Add('Adress2 = :OLD_Adress2 and'); MainModule.UniMainModule.mySQLUpdateSQL1.ModifySQL.Add('Straße = :OLD_Straße and'); MainModule.UniMainModule.mySQLUpdateSQL1.ModifySQL.Add('PLZ = :OLD_PLZ and'); MainModule.UniMainModule.mySQLUpdateSQL1.ModifySQL.Add('Ort = :OLD_Ort and'); MainModule.UniMainModule.mySQLUpdateSQL1.ModifySQL.Add('Land = :OLD_Land and'); MainModule.UniMainModule.mySQLUpdateSQL1.ModifySQL.Add('Such1 = :OLD_Such1 and'); MainModule.UniMainModule.mySQLUpdateSQL1.ModifySQL.Add('Such2 = :OLD_Such2'); search := '%' + UniEdit1.Text + '%'; fmstart1.UniMemo1.Lines.Clear; fmstart1.UniMemo1.Lines.Text := 'select Firma, Adress1, Adress2, Straße, PLZ, Ort, Land, Such1, Such2 from ' + Tabelle + #10 + 'where Ident = ' + IntToStr(UniMainModule.Ident) + #10 + 'AND (Firma like '+QuotedStr(search)+' OR Adress1 like '+ QuotedStr(search)+' OR Adress2 like '+ QuotedStr(search)+' OR Straße like '+ QuotedStr(search)+ 'OR PLZ like '+ QuotedStr(search)+ 'OR Ort like '+ QuotedStr(search)+ 'OR Land like '+ QuotedStr(search)+ 'OR Such1 like '+ QuotedStr(search)+ 'OR Such2 like '+ QuotedStr(search)+')'; UniMainModule.mySQLQuery3.SQL.Text := fmstart1.UniMemo1.Lines.Text; UniMainModule.mySQLQuery3.Open; UniDBGrid1.Columns[0].Width := 250; UniDBGrid1.Columns[1].Width := 100; UniDBGrid1.Columns[2].Width := 70; UniDBGrid1.Columns[3].Width := 150; UniDBGrid1.Columns[4].Width := 50; UniDBGrid1.Columns[5].Width := 100; UniDBGrid1.Columns[6].Width := 100; UniDBGrid1.Columns[7].Width := 100; UniDBGrid1.Columns[8].Width := 100; end; |
AW: MySQL Query Update funktioniert nicht
Vielleicht, weil leere Datenbankfelder nicht = "" sind sondern Null?
Also müsstest Du ggfls. überall auch noch auf
SQL-Code:
abfragen?
or spalte is Null
|
AW: MySQL Query Update funktioniert nicht
Ändert sich etwas, wenn ich in der Datenbank die Spalten "Standard" -> "Kein(e)" anpasse und bei "NULL" den haken entferne?
Hab es zwar gerade getestet, scheint so ohne weiteres nicht zu funktionieren... Spalten auf Null abfragen? Dies bräuchte ich eigentlich dann nur für "Adress1, Adress2, Such1, Such2"... Wie baut man sowas jetzt da mit ein? So in etwa:
Code:
MainModule.UniMainModule.mySQLUpdateSQL1.ModifySQL.Add('Adress1 = :Adress1 or spalte is Null');
|
AW: MySQL Query Update funktioniert nicht
jo, genau so, wie in Deinem Beispiel.
Delphi-Quellcode:
MainModule.UniMainModule.mySQLUpdateSQL1.ModifySQL.Add('Adress1 = :Adress1 or Adress1 is Null');
|
AW: MySQL Query Update funktioniert nicht
Klappt nur zu hälfte...
jetzt erscheinen "0" in den leeren Zellen... Jetzt vielleicht etwas in der Datenbank anpassen? EDIT: Updatefunktion geht wieder an den stellen nicht. Es bleibt jetzt "0": Zitat:
|
AW: MySQL Query Update funktioniert nicht
Sorry, da hab' ich wohl was falsch verstanden oder mich ungeschickt ausgedrückt.
Code:
gehört nur in die Where-Bedingung aber nicht in den Teil, in dem per Set eine Wertzuweisung erfolgt.
or spalte is null
In etwa so:
Delphi-Quellcode:
Die IF-Abfragen dürfen natürlich nicht auf die Parameter gehen, sondern auf die Variabeln..., deren Werte den Parametern zugewiesen werden.
MainModule.UniMainModule.mySQLUpdateSQL1.ModifySQL .Add('update `' + Tabelle + '`');
MainModule.UniMainModule.mySQLUpdateSQL1.ModifySQL .Add('set'); MainModule.UniMainModule.mySQLUpdateSQL1.ModifySQL .Add('Firma = :Firma,'); MainModule.UniMainModule.mySQLUpdateSQL1.ModifySQL .Add('Adress1 = :Adress1,'); MainModule.UniMainModule.mySQLUpdateSQL1.ModifySQL .Add('Adress2 = :Adress2,'); MainModule.UniMainModule.mySQLUpdateSQL1.ModifySQL .Add('Straße = :Straße,'); MainModule.UniMainModule.mySQLUpdateSQL1.ModifySQL .Add('PLZ = LZ,'); MainModule.UniMainModule.mySQLUpdateSQL1.ModifySQL .Add('Ort = :Ort,'); MainModule.UniMainModule.mySQLUpdateSQL1.ModifySQL .Add('Land = :Land,'); MainModule.UniMainModule.mySQLUpdateSQL1.ModifySQL .Add('Such1 = :Such1,'); MainModule.UniMainModule.mySQLUpdateSQL1.ModifySQL .Add('Such2 = :Such2'); MainModule.UniMainModule.mySQLUpdateSQL1.ModifySQL .Add('where'); MainModule.UniMainModule.mySQLUpdateSQL1.ModifySQL .Add('Firma = :OLD_Firma and'); if :OLD_Adress1 = '' then begin <-- hier natürlich die Variabel abfragen, die dem Parameter :OLD_Adress1 zugewiesen wird. MainModule.UniMainModule.mySQLUpdateSQL1.ModifySQL .Add('Adress1 is null and'); end else begin MainModule.UniMainModule.mySQLUpdateSQL1.ModifySQL .Add('Adress1 = :OLD_Adress1 and'); end; if :OLD_Adress2 = '' then begin MainModule.UniMainModule.mySQLUpdateSQL1.ModifySQL .Add('Adress2 is null and'); end else begin MainModule.UniMainModule.mySQLUpdateSQL1.ModifySQL .Add('Adress2 = :OLD_Adress2 and'); end; MainModule.UniMainModule.mySQLUpdateSQL1.ModifySQL .Add('Straße = :OLD_Straße and'); MainModule.UniMainModule.mySQLUpdateSQL1.ModifySQL .Add('PLZ = :OLD_PLZ and'); MainModule.UniMainModule.mySQLUpdateSQL1.ModifySQL .Add('Ort = :OLD_Ort and'); MainModule.UniMainModule.mySQLUpdateSQL1.ModifySQL .Add('Land = :OLD_Land and'); if :OLD_Such1 = '' then begin MainModule.UniMainModule.mySQLUpdateSQL1.ModifySQL .Add('Such1 = :OLD_Such1 and'); end else begin MainModule.UniMainModule.mySQLUpdateSQL1.ModifySQL .Add('Such1 = :OLD_Such1 and'); end; if :OLD_Such2 = '' then begin MainModule.UniMainModule.mySQLUpdateSQL1.ModifySQL .Add('Such2 = :OLD_Such2'); Such2 = :OLD_Such2'; end else begin MainModule.UniMainModule.mySQLUpdateSQL1.ModifySQL .Add('Such2 = :OLD_Such2'); Such2 = :OLD_Such2'; end; |
AW: MySQL Query Update funktioniert nicht
Liste der Anhänge anzeigen (Anzahl: 1)
Ah herrje, darauf wäre ich ja nie gekommen :D
Die Eingabe erfolgt ja direkt in der UniDBGrid, screenshot im Anhang. Das heißt, ich muss für die Variable in der IF Anfrage dierekt die Zelle ansprechen?
Code:
UniDBGrid hat leider keine SelectedField funktion
if UniDBGrid1.??????? = '' then begin //<-- hier natürlich die Variabel abfragen, die dem Parameter :OLD_Adress1 zugewiesen wird.
MainModule.UniMainModule.mySQLUpdateSQL1.ModifySQL .Add('Adress1 is null and');
Code:
Und damit scheint es auch nicht zu funktionieren, bleibt wie gehabt "0" und andere werden dann mit Sntaxfehler angezeigt:
DBGrid1.SelectedField.AsString;
Code:
Query1.FieldByName(Feldname).Asxxx
EDIT: 20:48 Uhr Hab es nun soweit, dass ich Updaten kann, aber er übernimmt noch immer nicht die Null-Strings:
Code:
MainModule.UniMainModule.mySQLUpdateSQL1.ModifySQL.Clear;
MainModule.UniMainModule.mySQLUpdateSQL1.ModifySQL .Add('update `' + Tabelle + '`'); MainModule.UniMainModule.mySQLUpdateSQL1.ModifySQL .Add('set'); MainModule.UniMainModule.mySQLUpdateSQL1.ModifySQL .Add('Firma = :Firma,'); MainModule.UniMainModule.mySQLUpdateSQL1.ModifySQL .Add('Adress1 = :Adress1,'); MainModule.UniMainModule.mySQLUpdateSQL1.ModifySQL .Add('Adress2 = :Adress2,'); MainModule.UniMainModule.mySQLUpdateSQL1.ModifySQL .Add('Straße = :Straße,'); MainModule.UniMainModule.mySQLUpdateSQL1.ModifySQL .Add('PLZ = :PLZ,'); MainModule.UniMainModule.mySQLUpdateSQL1.ModifySQL .Add('Ort = :Ort,'); MainModule.UniMainModule.mySQLUpdateSQL1.ModifySQL .Add('Land = :Land,'); MainModule.UniMainModule.mySQLUpdateSQL1.ModifySQL .Add('Such1 = :Such1,'); MainModule.UniMainModule.mySQLUpdateSQL1.ModifySQL .Add('Such2 = :Such2'); MainModule.UniMainModule.mySQLUpdateSQL1.ModifySQL .Add('where'); MainModule.UniMainModule.mySQLUpdateSQL1.ModifySQL .Add('Firma = :OLD_Firma and'); if MainModule.UniMainModule.mySQLQuery3.FieldByName('Adress1').AsString = '' then begin //<-- hier natürlich die Variabel abfragen, die dem Parameter :OLD_Adress1 zugewiesen wird. MainModule.UniMainModule.mySQLUpdateSQL1.ModifySQL.Add('Adress1 is null and'); end else begin MainModule.UniMainModule.mySQLUpdateSQL1.ModifySQL.Add('Adress1 = :OLD_Adress1 and'); end; if MainModule.UniMainModule.mySQLQuery3.FieldByName('Adress2').AsString = '' then begin MainModule.UniMainModule.mySQLUpdateSQL1.ModifySQL.Add('Adress2 is null and'); end else begin MainModule.UniMainModule.mySQLUpdateSQL1.ModifySQL.Add('Adress2 = :OLD_Adress2 and'); end; MainModule.UniMainModule.mySQLUpdateSQL1.ModifySQL.Add('Straße = :OLD_Straße and'); MainModule.UniMainModule.mySQLUpdateSQL1.ModifySQL.Add('PLZ = :OLD_PLZ and'); MainModule.UniMainModule.mySQLUpdateSQL1.ModifySQL.Add('Ort = :OLD_Ort and'); MainModule.UniMainModule.mySQLUpdateSQL1.ModifySQL.Add('Land = :OLD_Land and'); if MainModule.UniMainModule.mySQLQuery3.FieldByName('Such1').AsString = '' then begin MainModule.UniMainModule.mySQLUpdateSQL1.ModifySQL.Add('Such1 is null and'); end else begin MainModule.UniMainModule.mySQLUpdateSQL1.ModifySQL.Add('Such1 = :OLD_Such1 and'); end; if MainModule.UniMainModule.mySQLQuery3.FieldByName('Such2').AsString = '' then begin MainModule.UniMainModule.mySQLUpdateSQL1.ModifySQL.Add('Such2 is null'); //Such2 = :OLD_Such2'; end else begin MainModule.UniMainModule.mySQLUpdateSQL1.ModifySQL.Add('Such2 = :OLD_Such2'); //Such2 = :OLD_Such2'; end; |
AW: MySQL Query Update funktioniert nicht
Mir fällt gerade auf, sollte es nicht ehr sorum lauten, wenn ich den neuen Wert als NULL definieren will, wenn der String leer ist?
Code:
Aber wie komme ich an den neuen Wert :Adress1 nach der Eingabe in der DBGrid heran?
MainModule.UniMainModule.mySQLUpdateSQL1.ModifySQL.Clear;
MainModule.UniMainModule.mySQLUpdateSQL1.ModifySQL .Add('update `' + Tabelle + '`'); MainModule.UniMainModule.mySQLUpdateSQL1.ModifySQL .Add('set'); MainModule.UniMainModule.mySQLUpdateSQL1.ModifySQL .Add('Firma = :Firma,'); if :Adress1 = '' then begin MainModule.UniMainModule.mySQLUpdateSQL1.ModifySQL .Add('Adress1 = NULL,'); end else begin MainModule.UniMainModule.mySQLUpdateSQL1.ModifySQL .Add('Adress1 = :Adress1,'); end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:54 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 by Thomas Breitkreuz