Delphi-PRAXiS
Seite 1 von 3  1 23      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   SQL UPDATE will nicht (https://www.delphipraxis.net/171853-sql-update-will-nicht.html)

Privateer3000 28. Nov 2012 14:39

Datenbank: Firebird • Version: 2.1 • Zugriff über: ZEOS7

SQL UPDATE will nicht
 
Hallöchen,
ich steh grad irgendwie aufm Schlauch:
folgendes update:
Code:
try
    v_ma:='Passwort1';
    v_ta:='Passwort2';
     ug:=TStringList.Create;
     systemquer.Active:=True;
     systemquer.Edit;
      ug.Add('update SYSTEM set MPASSWORT='+v_ma+',TAPASS='+v_ta+' where ID=1');
      sysupdate.ModifySQL:=ug; { TODO 1 -oIch -cSQL : Update vervollständigen }
       try
         systemquer.Post;
         systemquer.Refresh;
       except
         Showmessage('Speichern fehlgeschlagen!');
       end;
  finally
    ug.Free;
    systemquer.Active:=False;
  end;
produziert folgende Fehlermeldung:
Code:
Execute, proto: firebird-2.1, msg: Dynamic SQL Error SQL error code = -206 Column unknown Passwort1 At line 1, column 29, errcode: -206, error: Column does not belong to referenced table The SQL: update SYSTEM set MPASSWORT=Passwort1,TAPASS=Passwort2 where ID=1
Wieso soll Passwort1 "Column unknown" sein? :evil:
Ich hab es auch ohne Update-Kompo probiert (dyn. Query)

Was passiert da?

DeddyH 28. Nov 2012 14:42

AW: SQL UPDATE will nicht
 
Da fehlen die Anführungszeichen, es handelt sich ja wohl um Strings. Wieso benutzt Du keine SQL-Parameter, abgesehen von den Sicherheitsaspekten sind solche Probleme damit auch gleich vom Tisch?

Privateer3000 28. Nov 2012 15:06

AW: SQL UPDATE will nicht
 
Weil ich nicht weiß wie bei der TZUpdateSQL von ZEOS
Parameter übergeben werden.
Params.ParamByName('XY') werden nicht akzeptiert.

Wie diese Parameter eingesetzt werden, hab ich keine Dok gefunden.
Man kan zur Laufzeit wie auch zu Entwicklerzeit diese setzen.
aber wie?
Bei der TZQuery geht das einwandfrei
Code:
with ug do begin
     Close; SQL.Clear;
     SQL.Text:='update SYSTEM set MPASSWORT = :MA,TAPASS = :TA where ID=1';
      ParamByName('MA').Value:=v_ma;
      ParamByName('TA').Value:=v_ta;
       try
         ExecSQL;
       except
         Showmessage('Speichern fehlgeschlagen!');
       end;
      end;
das funktioniert auch.

mkinzler 28. Nov 2012 15:09

AW: SQL UPDATE will nicht
 
Die Parameter werden automatisch mit den Werten, welche du in die Felder schreibst, belegt.

Privateer3000 28. Nov 2012 15:13

AW: SQL UPDATE will nicht
 
Zitat:

Zitat von mkinzler (Beitrag 1193441)
Die Parameter werden automatisch mit den Werten, welche du in die Felder schreibst, belegt.

Sondern?
Ich seh da einfach nicht durch.
Die Doks zu ZEOS sind so lückenhaft.
Wie muss denn die Paramter-gedingse zur Laufzeit denn aussehen?
:roll::roll:

DeddyH 28. Nov 2012 15:14

AW: SQL UPDATE will nicht
 
Mit ZEOS kenne ich mich nicht aus, aber laut Tutorial im DT soll es auch beim TZUpdateSQL Parameter geben.

mkinzler 28. Nov 2012 15:16

AW: SQL UPDATE will nicht
 
Delphi-Quellcode:
DataSet.Edit;
DataSet.FieldByName(<Feld>).Value := <Wert>;
->
Entsprechender Wert in Parameter des UpdateSQL wird gesetzt.
Delphi-Quellcode:
DataSet.Post;
->
Delphi-Quellcode:
UpdateSQL.ExecuteSQL;
wird ausgeführt

http://www.delphi-treff.de/tutorials...d/tzupdatesql/

Lemmy 28. Nov 2012 15:23

AW: SQL UPDATE will nicht
 
Was dir Markus sagen will: Verwende TUpdateSQL nicht direkt sondern immer in Verbindung mit einer TQUery. Dort solltest DU im Objektinspektor die Möglichkeit haben eine TUpdateSQL-Instanz zu hinterlegen.

WEnn Du nun in der TQuery deinen Select hast (Select * from X where ID=:ID) und in der TUpdateSQL die dazugehörigen DML-Befehle (die ggf. auch automatisch anhand der Select erzeugt werden), dann arbeitest Du ganz einfach mit der Query:

Delphi-Quellcode:
  Query.OPen;
  Query.Update;
  Query.FieldByName('eins').AsString := 'eins';
  Query.Post;
und die Query und TUpdateSQL übernehmen den REst.

p80286 28. Nov 2012 15:32

AW: SQL UPDATE will nicht
 
Abgesehen von dem bisher geschriebenen,
was haben systemquer und sysupdate miteinander zu tun?

Delphi-Quellcode:
try
  v_ma:='Passwort1';
  v_ta:='Passwort2';
  ug:=TStringList.Create;
  systemquer.Active:=True;
  systemquer.Edit;
  ug.Add('update SYSTEM set MPASSWORT='+v_ma+',TAPASS='+v_ta+' where ID=1');

  sysupdate.ModifySQL:=ug; { TODO 1 -oIch -cSQL : Update vervollständigen }

  try
    systemquer.Post;
    systemquer.Refresh;
  except
     Showmessage('Speichern fehlgeschlagen!');
  end;
  finally
    ug.Free;
    systemquer.Active:=False;
  end;
Gruß
K-H

Privateer3000 28. Nov 2012 17:26

AW: SQL UPDATE will nicht
 
Vielen Dank für Eure Antworten!

sysupdate ist eine TZUpdateSQL und bammelt
an der systemquer (TZQuery) dran.
Das funktioniert normalerweise.
Nur das Parameterdingenskirchen verstehe ich nicht.
Ich werde die Posts mal durchgehen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:15 Uhr.
Seite 1 von 3  1 23      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz