Ich versuche, bestimmte Zeilen aus meiner Datenbank durch eine Artikelnr
(in Niederländisch) zu löschen.Gelöschte in einer gespeicherten Prozedur fehlgeschlagen beim Aufruf aus VBA
Wenn ich versuche, meinen Code vom Zugriff auszuführen, wird kein Fehler ausgegeben, aber es wird auch nichts gelöscht.
Fehle ich hier etwas?
IF EXISTS (SELECT * FROM sys.objects WHERE type = 'P' AND name = 'spVerwijderArtikel')
DROP PROCEDURE spVerwijderArtikel
GO
CREATE PROCEDURE spVerwijderArtikel
(@ArtikelNr integer)
AS
BEGIN Transaction
DELETE FROM artikelprijs
WHERE ArtikelNr = @ArtikelNr
DELETE FROM Artikel
WHERE ArtikelNr = @ArtikelNr
IF @@ERROR <> 0
BEGIN
ROLLBACK
RAISERROR ('Error tijdens het uitvoeren', 16 , 1)
RETURN
END
COMMIT
GO
Und mein Code aus dem Zugriff versucht, die gespeicherte Prozedur auszuführen:
Private Sub Command2_Click()
Dim conn As ADODB.Connection
Dim rs As ADODB.Recordset
Dim sConnString As String
sConnString = "Provider=SQLOLEDB;Data Source=.\SQLEXPRESS;" & _
"Initial Catalog=KlantArtikelOpdracht;" & _
"Integrated Security=SSPI;"
Set conn = New ADODB.Connection
Set rs = New ADODB.Recordset
conn.Open sConnString
Set rs = conn.Execute("EXEC spVerwijderArtikel'" & TxTArtikelNr & "'")
End Sub
mir jemand bei diesem Problem helfen könnte?
Mit einem Integer, würde ich sagen, Sie brauchen 'Execute (" EXEC spVerwijderArtikel "& TxTArtikelNr)' – Andre
@Andre Das ist egal. SQL wird es implizit umwandeln. Allerdings ist das OP sicher, dass TxTArtikelNr beim Verketten mit dem Befehl eigentlich ein int ist? Auch sollten Sie SQL-Abfrage-Parametrisierung verwenden, um SQL-Injection-Angriffe zu vermeiden (auch es ist eine gute Angewohnheit) –
Sie sollten in der Verwendung von versuchen/fangen in Ihrem SQL. Es wird dieses Problem nicht beheben, aber Ihr Code wird viel sauberer sein. Und parametriere deine Abfragen bevor Bobby Tische zu Besuch kommen. http://bobby-tables.com/ –