AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi INSERT INTO sonst UPDATE!
Thema durchsuchen
Ansicht
Themen-Optionen

INSERT INTO sonst UPDATE!

Ein Thema von Peeters · begonnen am 14. Apr 2005 · letzter Beitrag vom 20. Okt 2005
Antwort Antwort
Seite 1 von 3  1 23      
Peeters

Registriert seit: 3. Dez 2002
Ort: Meerbusch
86 Beiträge
 
Delphi 2007 Enterprise
 
#1

INSERT INTO sonst UPDATE!

  Alt 14. Apr 2005, 18:52
Datenbank: MS SQL-Server • Version: 2000 • Zugriff über: ADO
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.
Peeters
  Mit Zitat antworten Zitat
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#2

Re: INSERT INTO sonst UPDATE!

  Alt 14. Apr 2005, 19:17
geht wohl nur mit einer Stored Procedure und einer Variablen da drin
Gruß
Hansa
  Mit Zitat antworten Zitat
MarcusB

Registriert seit: 7. Mär 2004
121 Beiträge
 
Delphi 7 Professional
 
#3

Re: INSERT INTO sonst UPDATE!

  Alt 14. Apr 2005, 20:05
Hi,

suchst Du sowas wie REPLACE?

[edit]: Ok, wer lesen kann ist klar im Vorteil, hatte leider MySQL gelesen statt MS SQL [/edit]
  Mit Zitat antworten Zitat
jensw_2000
(Gast)

n/a Beiträge
 
#4

Re: INSERT INTO sonst UPDATE!

  Alt 14. Apr 2005, 20:45
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]




Schöne Grüße,
Jens
  Mit Zitat antworten Zitat
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#5

Re: INSERT INTO sonst UPDATE!

  Alt 14. Apr 2005, 21:16
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
^
Gruß
Hansa
  Mit Zitat antworten Zitat
Peeters

Registriert seit: 3. Dez 2002
Ort: Meerbusch
86 Beiträge
 
Delphi 2007 Enterprise
 
#6

Re: INSERT INTO sonst UPDATE!

  Alt 15. Apr 2005, 17:44
Wie aber erstelle ich eine SP aus Delphi heraus?
Peeters
  Mit Zitat antworten Zitat
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#7

Re: INSERT INTO sonst UPDATE!

  Alt 15. Apr 2005, 17:56
Wozu so was in Delphi machen ?
Gruß
Hansa
  Mit Zitat antworten Zitat
Peeters

Registriert seit: 3. Dez 2002
Ort: Meerbusch
86 Beiträge
 
Delphi 2007 Enterprise
 
#8

Re: INSERT INTO sonst UPDATE!

  Alt 15. Apr 2005, 17:59
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
  Mit Zitat antworten Zitat
Peeters

Registriert seit: 3. Dez 2002
Ort: Meerbusch
86 Beiträge
 
Delphi 2007 Enterprise
 
#9

Re: INSERT INTO sonst UPDATE!

  Alt 15. Apr 2005, 18:08
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.
Peeters
  Mit Zitat antworten Zitat
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#10

Re: INSERT INTO sonst UPDATE!

  Alt 15. Apr 2005, 18:13
Du willst also den Anwender eine SP zusammenbauen lassen, obwohl du selber nicht weißt, wie das überhaupt geht ?
Gruß
Hansa
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 3  1 23      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:06 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