![]() |
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. |
Re: INSERT INTO sonst UPDATE!
geht wohl nur mit einer Stored Procedure und einer Variablen da drin
|
Re: INSERT INTO sonst UPDATE!
Hi,
suchst Du sowas wie ![]() [edit]: Ok, wer lesen kann ist klar im Vorteil, hatte leider MySQL gelesen statt MS SQL :? [/edit] |
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 |
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 ^ |
Re: INSERT INTO sonst UPDATE!
Wie aber erstelle ich eine SP aus Delphi heraus?
|
Re: INSERT INTO sonst UPDATE!
Wozu so was in Delphi machen ?
|
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.
|
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.
|
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 02:46 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-2025 by Thomas Breitkreuz