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
jensw_2000
(Gast)

n/a Beiträge
 
#1

Re: INSERT INTO sonst UPDATE!

  Alt 14. Apr 2005, 19: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
Antwort Antwort


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 08:07 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