Einzelnen Beitrag anzeigen

ele

Registriert seit: 18. Feb 2009
129 Beiträge
 
Delphi 2010 Professional
 
#4

AW: TADOCommand mit Parametern - PK-Verletzung

  Alt 12. Jun 2012, 13:20
Das Problem kenne ich.
Man kann einen Parameter nicht auf diese Weise wiederverwenden.

Inzwischen verwende ich SQL Variabeln um das zu Umgehen. Alternativ kannst du dafür sorgen, dass die Parameter nur jeweils einmal vorkommen (:ID1, :ID2, etc.). Dann musst du allerdings jedem Parameter den entsprechenden Wert zuweisen.

Die Lösung mit den Variabeln finde ich jedoch übersichtlicher und einfacher:

Code:
DECLARE @ID integer
DECLARE @Name varchar(20)
SET @ID = :ID
SET @Name = :Name
DECLARE @TRANSE CHAR(8) = 'Transe00';
BEGIN TRANSACTION @TRANSE;
IF NOT EXISTS(SELECT * FROM ST_VKL WHERE ID=@ID)
INSERT INTO ST_VKL (ID,NAME) VALUES(@ID,@Name)
ELSE
UPDATE ST_VKL SET NAME=@Name WHERE ID=@ID;
IF @@ERROR = 0
COMMIT TRANSACTION @TRANSE
ELSE
ROLLBACK TRANSACTION @TRANSE;
Für die Typen von ID und Name benutzt du natürlich das was du brauchst. Da du diese Information nicht geliefert hast, musste ich irgendwas erfinden...

Übrigens würde ich die Parameter nicht mit @ deklarieren. Das @ Symbol wird von SQL für Variablen verwendet, wenn du das von Delphi aus machst genügt :VariabelName.
  Mit Zitat antworten Zitat