Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi temporäres Problem mit dem Update auf Datensätze (https://www.delphipraxis.net/119496-temporaeres-problem-mit-dem-update-auf-datensaetze.html)

Cosamia 27. Aug 2008 14:46

Datenbank: SQL • Version: 2005 • Zugriff über: ADO

temporäres Problem mit dem Update auf Datensätze
 
Hallo zusammen,

ich schreibe Daten aus einer Text-Datei den Inhalt in eine SQL-DB. Dies funtioniert zum Anlegen enes Datensatzes wie folgt:

Delphi-Quellcode:
if m = 0 then begin
     adoquery1.sql.Clear;
     adoquery1.sql.text := 'Insert into auftraege ('+Temps1+') values ('''+temps2+''')';;
     adoquery1.ExecSQL;


     adoquery1.sql.clear;
     adoquery1.SQL.text := 'select max (ID) as MaxID from auftraege';
     adoquery1.Open;
     timestamp := adoquery1.FindField('MaxID').AsString;
und folgend um die Daten zu kompletieren

Delphi-Quellcode:
if m <> 0 then begin
     adoquery1.sql.Clear;
     adoquery1.sql.text := 'update auftraege set '+Temps1+'='''+temps2+''' Where ID= '''+timestamp+''' ';;
     adoquery1.ExecSQL;
     inc(k);
     result := 0;
Jetzt habe ich das Problem wenn mehrere User unterschiedliche Daten einlesen, dass es beim Update zeitweise immer wieder zu Problemen kommt, und er in eine Exception läuft.
Es wird aber von den unterschiedlichen Usern nie auf den selbigen Datensatz zugegriffen.

Jemand eine Idee woran das liegen könnte?

Danke.

mkinzler 27. Aug 2008 14:50

Re: temporäres Problem mit dem Update auf Datensätze
 
Ich würde SQL-Parameter verwenden:
Delphi-Quellcode:
adoquery1.sql.text := 'Insert into auftraege (:auft) values ( :wert);';
adoquery1.Parameter.ParamByName('auft').Value := temp1;
adoquery1.Parameter.ParamByName('wert').Value := temp2;

adoquery1.ExecSQL;

Cosamia 27. Aug 2008 15:09

Re: temporäres Problem mit dem Update auf Datensätze
 
Ok, habe ich bisher noch nicht genutz, und falle Prompt damit auf die Nase.

Auftraege kein gültiger Objektname

Delphi-Quellcode:
     adoquery1.sql.text := 'Insert into auftraege (:auft) values (:wert);';
     adoquery1.Parameters.ParamByName('auft').Value := temps1;
     adoquery1.Parameters.ParamByName('wert').Value := temps2;
     adoquery1.ExecSQL;
Was stimmt an der Syntax nicht?

DeddyH 27. Aug 2008 15:14

Re: temporäres Problem mit dem Update auf Datensätze
 
AFAIK gehen Parameter nur mit Feldwerten, nicht mit Feldbezeichnern. So könnte es aber gehen (ungetestet):
Delphi-Quellcode:
adoquery1.sql.text := Format('Insert into auftraege (%s) values (:wert);',[temps1]);
adoquery1.Parameters.ParamByName('wert').Value := temps2;
adoquery1.ExecSQL;

Cosamia 27. Aug 2008 15:15

Re: temporäres Problem mit dem Update auf Datensätze
 
so funzt es:

Delphi-Quellcode:
 adoquery1.sql.add ('Insert into auftraege (:auft) values (:wert);');
     adoquery1.Parameters.ParamByName('auft').Value := temps1;
     adoquery1.Parameters.ParamByName('wert').Value := temps2;
     adoquery1.ExecSQL;

Cosamia 27. Aug 2008 15:35

Re: temporäres Problem mit dem Update auf Datensätze
 
Und wie funzt das mit den Parameters mit einem Update-Statement?

mkinzler 27. Aug 2008 15:37

Re: temporäres Problem mit dem Update auf Datensätze
 
Genauso

SQL-Code:
update <tabelle> set <feld1> = :wert1, ...

Cosamia 27. Aug 2008 15:39

Re: temporäres Problem mit dem Update auf Datensätze
 
wie ein Update Statement grundsätzlich funzt ist mir schon geläufig, aber es will mit den Parameters nicht funktionieren.
Die "(" gefällt ihm nicht.

Delphi-Quellcode:
     adoquery1.sql.text := 'update auftraege set (:auft) = (:wert) Where ID= '''+timestamp+''';';
     adoquery1.Parameters.ParamByName('auft').Value := temps1;
     adoquery1.Parameters.ParamByName('wert').Value := temps2;
     adoquery1.ExecSQL;

DeddyH 27. Aug 2008 15:43

Re: temporäres Problem mit dem Update auf Datensätze
 
Beim Update werden auch keine Klammern gesetzt.

Cosamia 27. Aug 2008 15:44

Re: temporäres Problem mit dem Update auf Datensätze
 
Danke, habe es gerade bemerkt :oops:


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:01 Uhr.

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