Delphi-PRAXiS
Seite 2 von 4     12 34      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   DB 2Werte vergleichen um zwischen Insert und Update zu unterscheiden (https://www.delphipraxis.net/198653-db-2werte-vergleichen-um-zwischen-insert-und-update-zu-unterscheiden.html)

rokli 22. Nov 2018 14:41

AW: DB 2Werte vergleichen um zwischen Insert und Update zu unterscheiden
 
Hallo!

Du kannst auch den mächtigen MERGE verwenden ... dann hast Du INSERT und UPDATE mit einer SQL Anweisung erschlagen, sofern Deine Daten eindeutig sind.

(Edit: Sofern die DB das kann; bei MS SQL und IBM DB2 funktioniert es.)

Gruß

Amenovis 24. Nov 2018 15:57

AW: DB 2Werte vergleichen um zwischen Insert und Update zu unterscheiden
 
wow echt super viele Ansätze DANKE mhh Merge und Upset da geh ich mal lesen, das klingt auch sehr Interessant :-D

lg

Timo

Amenovis 25. Nov 2018 18:19

AW: DB 2Werte vergleichen um zwischen Insert und Update zu unterscheiden
 
Sorry für Doppelposting aber hat vielleicht jemand eine Idee was ich jetzt wieder Falsch mache ?

Delphi-Quellcode:
RQuery2.SQL.Text:='SELECT count(*) as var2 FROM OPmonth where ID=:ID';
  RQuery2.ParamByName('ID').AsString := edit25.Text;
  RQuery2.Open;
  if RQuery2.FieldByName('var2').AsInteger > 0
  then begin
  id:=Edit15.Text;
  query1.Params.CreateParam(ftString,'id',ptinputoutput);
  query1.ParamByName('id').Text:=id;
  query1.SQL.Text:='select WorkH,EIndex,WIndex from OPmonth where id=:id';
  Query1.Open;
  Query1.Params.CreateParam(ftString,'WorkH',ptInputOutput);
  Query1.Params.CreateParam(ftString,'EIndex',ptInputOutput);
  Query1.Params.CreateParam(ftString,'WIndex',ptInputOutput);
  Query1.ParamByName('WorkH').Text:=Edit29.Text;
  Query1.ParamByName('EIndex').Text:=Edit64.Text;
  Query1.ParamByName('WIndex').Text:=Edit65.Text;
  Query1.SQL.Text:='update OPmonth set WorkH=:WorkH,EIndex=:EIndex,WIndex=:WIndex where id=:id';
  Query1.ExecSQL;
  end
  else
  query1.SQL.Text:='select WorkH,EIndex,WIndex from OPmonth where id=:id';
  Query1.Open;
  Query1.Params.CreateParam(ftString,'WorkH',ptInputOutput);
  Query1.Params.CreateParam(ftString,'EIndex',ptInputOutput);
  Query1.Params.CreateParam(ftString,'WIndex',ptInputOutput);
  Query1.ParamByName('WorkH').Text:=Edit29.Text;
  Query1.ParamByName('EIndex').Text:=Edit64.Text;
  Query1.ParamByName('WIndex').Text:=Edit65.Text;
  Query1.SQL.Text:='Insert into OPmonth (WorkH,EIndex,WIndex)'+
   'values (:WorkH,:EIndex,WIndex)';
  Query1.ExecSQL;
  end;

Schokohase 25. Nov 2018 19:17

AW: DB 2Werte vergleichen um zwischen Insert und Update zu unterscheiden
 
Erst den SQL Text setzen und dann die Parameter bearbeiten.

Amenovis 25. Nov 2018 19:22

AW: DB 2Werte vergleichen um zwischen Insert und Update zu unterscheiden
 
Bitte was meinst du ?

mkinzler 25. Nov 2018 19:25

AW: DB 2Werte vergleichen um zwischen Insert und Update zu unterscheiden
 
Zitat:

Zitat von Amenovis (Beitrag 1419180)
Bitte was meinst du ?

Delphi-Quellcode:
  Query1.SQL.Text:='update OPmonth set WorkH=:WorkH,EIndex=:EIndex,WIndex=:WIndex where id=:id';
  Query1.Params.CreateParam(ftString,'WorkH',ptInputOutput);
  Query1.Params.CreateParam(ftString,'EIndex',ptInputOutput);
  Query1.Params.CreateParam(ftString,'WIndex',ptInputOutput);
  Query1.ParamByName('WorkH').Text:=Edit29.Text;
  Query1.ParamByName('EIndex').Text:=Edit64.Text;
  Query1.ParamByName('WIndex').Text:=Edit65.Text;
  Query1.ExecSQL;

Amenovis 25. Nov 2018 19:30

AW: DB 2Werte vergleichen um zwischen Insert und Update zu unterscheiden
 
sql logic or missing database mhh

mkinzler 25. Nov 2018 19:33

AW: DB 2Werte vergleichen um zwischen Insert und Update zu unterscheiden
 
Ich habe nur die Reihenfolge der Zeilen getauscht.

Warum liest Du die vorhandenen Werte ert ein ohne Sie zu benötigen? Warum nicht die genannte Lösung per Upsert?

Amenovis 25. Nov 2018 19:37

AW: DB 2Werte vergleichen um zwischen Insert und Update zu unterscheiden
 
ja ich auch das ergebnis blieb das gleiche :(

Delphi-Quellcode:
  RQuery2.SQL.Text:='SELECT count(*) as var2 FROM OPmonth where ID=:ID';
  RQuery2.ParamByName('ID').AsString := edit25.Text;
  RQuery2.Open;
  if RQuery2.FieldByName('var2').AsInteger > 0
  then begin
  Query1.SQL.Text:='update OPmonth set WorkH=:WorkH,EIndex=:EIndex,WIndex=:WIndex where id=:id';
  Query1.Params.CreateParam(ftString,'WorkH',ptInputOutput);
  Query1.Params.CreateParam(ftString,'EIndex',ptInputOutput);
  Query1.Params.CreateParam(ftString,'WIndex',ptInputOutput);
  Query1.ParamByName('WorkH').Text:=Edit29.Text;
  Query1.ParamByName('EIndex').Text:=Edit64.Text;
  Query1.ParamByName('WIndex').Text:=Edit65.Text;
  Query1.ExecSQL;
  end
  else
  Query1.SQL.Text:='Insert into OPmonth (WorkH,EIndex,WIndex)'+
  'values (:WorkH,:EIndex,WIndex)';
  Query1.Params.CreateParam(ftString,'WorkH',ptInputOutput);
  Query1.Params.CreateParam(ftString,'EIndex',ptInputOutput);
  Query1.Params.CreateParam(ftString,'WIndex',ptInputOutput);
  Query1.ParamByName('WorkH').Text:=Edit29.Text;
  Query1.ParamByName('EIndex').Text:=Edit64.Text;
  Query1.ParamByName('WIndex').Text:=Edit65.Text;
  Query1.ExecSQL;
  end;

p80286 25. Nov 2018 19:42

AW: DB 2Werte vergleichen um zwischen Insert und Update zu unterscheiden
 
Delphi-Quellcode:
RQuery2.SQL.Text:='SELECT count(*) as var2 FROM OPmonth where ID=:ID';
   RQuery2.ParamByName('ID').AsString := edit25.Text;
   RQuery2.Open;
   if RQuery2.FieldByName('var2').AsInteger > 0
   then begin
     Query1.SQL.Text:='update OPmonth set WorkH=:WorkH,EIndex=:EIndex,WIndex=:WIndex where id=:id';
     Query1.Params.CreateParam(ftString,'WorkH',ptInputOutput);
     Query1.Params.CreateParam(ftString,'EIndex',ptInputOutput);
     Query1.Params.CreateParam(ftString,'WIndex',ptInputOutput);
     Query1.ParamByName('WorkH').Text:=Edit29.Text;
     Query1.ParamByName('EIndex').Text:=Edit64.Text;
     Query1.ParamByName('WIndex').Text:=Edit65.Text;
     Query1.ExecSQL;
   end
   else
   BEGIN {--------------------------------------------------------------------}
     Query1.SQL.Text:='Insert into OPmonth (WorkH,EIndex,WIndex)'+
                      'values (:WorkH,:EIndex,WIndex)';
     Query1.Params.CreateParam(ftString,'WorkH',ptInputOutput);
     Query1.Params.CreateParam(ftString,'EIndex',ptInputOutput);
     Query1.Params.CreateParam(ftString,'WIndex',ptInputOutput);
     Query1.ParamByName('WorkH').Text:=Edit29.Text;
     Query1.ParamByName('EIndex').Text:=Edit64.Text;
     Query1.ParamByName('WIndex').Text:=Edit65.Text;
     Query1.ExecSQL;
   end;
und jetzt?

Gruß
K-H


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:53 Uhr.
Seite 2 von 4     12 34      

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