Delphi-PRAXiS
Seite 1 von 3  1 23      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi INSERT INTO sonst UPDATE! (https://www.delphipraxis.net/44175-insert-into-sonst-update.html)

Peeters 14. Apr 2005 17:52

Datenbank: MS SQL-Server • Version: 2000 • Zugriff über: ADO

INSERT INTO sonst UPDATE!
 
Hallo,

ich benötige Eure Hilfe. Möchte gerne einen SQL Anweisung erstellen die anhand einer vorhandenen Tabelle abfragt, ob ein vorhandener Datensatz existiert oder nicht, wenn nicht dann INSERT INTO, wenn doch dann UPDATE. Wie ist das am besten zu realisieren?

Mit besten Dank im voraus.

Hansa 14. Apr 2005 18:17

Re: INSERT INTO sonst UPDATE!
 
geht wohl nur mit einer Stored Procedure und einer Variablen da drin

MarcusB 14. Apr 2005 19:05

Re: INSERT INTO sonst UPDATE!
 
Hi,

suchst Du sowas wie REPLACE?

[edit]: Ok, wer lesen kann ist klar im Vorteil, hatte leider MySQL gelesen statt MS SQL :? [/edit]

jensw_2000 14. Apr 2005 19:45

Re: INSERT INTO sonst UPDATE!
 
Am Besten über eine Stored Procedure ...

SQL-Code:
CREATE PROCEDURE SET_Artikel
  @SaveOK     BIT =0 OUTPUT,   -- Ausgabeparameter, mit dem Delphi den Erfolg der SP abfragen kann ...
  @ArtNr      VARCHAR(10) = NULL,
  @Bezeichnung VARCHAR(50) = NULL,
  @Preis      REAL = 0
AS
BEGIN
  -- Parameter prüfen
 
  IF @ArtNr IS NULL OR @Bezeichnung IS NULL
  BEGIN
    SELECT @SaveOK=0
    RAISERROR('Artielbezeichnung und Artikelnummer dürfen nicht NULL sein ! Vorgang abgebrochen ! ',16,1,'SQL')
  END
  ELSE BEGIN
    -- alle Artikel mit der Artikelnummer "@Artnr" aktualisieren
    UPDATE Artikel SET Bezeichnung = @Bezeichnung,
                     Preis      = @Preis
    WHERE Artnr = @ArtNr

    IF @@ROWCOUNT = 0   -- (also kein Datensatz aktualisiert wurde (RowsAffected =0) )
    BEGIN
      INSERT INTO Artikel (
                            ArtNr,
                            Bezeichnung,
                            Preis
                          )
              VALUES     ( 
                            @ArtNr,
                            @Bezeichnung,
                            @Preis
                          )
    END
    SELECT @SaveOK=1
  END

 
END

[Zusatz]

In Delphi würde ich die SP so benutzen:

Delphi-Quellcode:
Procedure TForm1.Button1Click(Sender:TObject);
begin
  if SaveArtikel = False then showmessage('Der Datensatz wurde nicht gespeichert');
end;

function SaveArtikel:Boolean;
  var SP:TAdoStoredPoc;
begin
 
  Result:=False;
  SP:=TAdoStoredProc.create(nil);
  try
    SP.Connection:=Datamodule1.AdoConn;             // hier gehören noch ein paar Prüfungen hin
    SP.Procedurename='SET_Artikel';                 // z.B. ist AdoConn.Connected=true ?
    SP.Parameters.refresh;                          // enthält edit_Artnr.text einen String, der in
    SP.Parameters[2].value:=Form1.edit_Artnr.text;  // einen Float konvertierbar ist usw ...
    SP.Parameters[3].value:=Form1.edit_ArtBez.text;
    SP.Parameters[4].value:=StrToFloat(Form1.edit_ArtPreis.text);
    SP.ExecProc;
    Result:=(SP.Parameters[1].value = true); // <<-- das ist SaveOK aus der SP ...
  finally
    FreeAndNil(SP);
  end;
 

end;


[/Zusatz]


:hi:

Schöne Grüße,
Jens

Hansa 14. Apr 2005 20:16

Re: INSERT INTO sonst UPDATE!
 
Was soll denn die Frage mit Replace zu tun haben ? 8) Ich weiß, was er will. Also : SPs schon mal benutzt ?

So geht das (allerdings in IB/FB) :

SQL-Code:
CREATE PROCEDURE SP (
    bla INTEGER,
    ...
    )
AS
DECLARE VARIABLE AENDERN INTEGER;
begin
  AENDERN = -1;
  select ID from TABELLE where (.....) into :AENDERN;
  if (AENDERN < 0) then begin
    insert into TABELLE (bla,...)
           values (:bla,...);
  end
  else begin
    update TAG8 set bla=bla+ :bla,...
    where (???);
  end
  suspend;
end
^

Peeters 15. Apr 2005 16:44

Re: INSERT INTO sonst UPDATE!
 
Wie aber erstelle ich eine SP aus Delphi heraus?

Hansa 15. Apr 2005 16:56

Re: INSERT INTO sonst UPDATE!
 
Wozu so was in Delphi machen ?

Peeters 15. Apr 2005 16:59

Re: INSERT INTO sonst UPDATE!
 
Weil ich lieber den Ball bei mir halten möchte. Auch bei den Views mache ich das so bzw. ich erstelle aus Delphi heraus immer wieder eine SELECT Anweisung, um Daten auf das Formular zubekommen.

Peeters 15. Apr 2005 17:08

Re: INSERT INTO sonst UPDATE!
 
Der eigenliche Hintergrund ist, ich möchte nicht das der Anwender damit konfrontiert wird erst einmal mit den SQL Query Analyzer die SP zu erstellen. Ich möchte lieber, wenn es dann soweit ist das aus Delphi heraus die SP erstell bzw. gändert wird. Ohne das ich den Analyzer dazu bewegen muss die neue SP einzulesen.

Hansa 15. Apr 2005 17:13

Re: INSERT INTO sonst UPDATE!
 
Du willst also den Anwender eine SP zusammenbauen lassen, obwohl du selber nicht weißt, wie das überhaupt geht ? :shock:


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:11 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