[SQL] Stored procedure - Problem

Intiii

Grünschnabel
Zur Zeit versuche ich, meine auf Access basierende DB auf SQL umzuschreiben, die VB-Funktionen sollen dabei zur stored procedures werden.

Eine Funktion (vb) wird soll 2x angesprochen werden - einmal für alle Datensätze, und einmal nur für einen Datensatz (ID)

Nun habe ich folgendes Problem:
Via Click aus der Access-DB heraus möchte ich die ID an die stored procedure übergeben, bzw. die Funktion komplett nutzen können

Es soll ein Update passieren:

Code:
Alter PROCEDURE "sp_set_IIDs"
@UID int	
AS
begin

-------------------------------------------
-- IIDvergabe über Tabelle IIDs
-------------------------------------------

IF UID <> '''' THEN SET ID = 'and Item.ReportID=' @UID
END IF

	UPDATE Item
	SET Item.IID = IIDs.IID, Item.IIcon = IIDs.IIcon
	FROM Item 
	INNER JOIN IIDs ON Item.IPage = IIDs.IPage and  Item.IField = IIDs.IField
	WHERE IIDs.Upd=1 & ID

end

Im Update-Statement zuletzt das & ID soll also beinhalten, wenn eine (U)ID übergeben wurde:

and Item.ReportID = [die (U)ID aus der Übergabe] - ansonsten, soll das ganze ohne ablaufen, also das Update-Statement endet dann mit "Upd=1"

Wie kriege ich das am besten gelöst?

in vbcode (funktioniert, wie gesagt) sieht das so aus:

Code:
...
Dim upd1 As String

If ID <> "" Then ID = "and ReportID=" & ID

    upd1 = "UPDATE Item INNER JOIN IIDs ON (Item.IPage = IIDs.IPage) AND (Item.IField = IIDs.IField) " _
        & "SET Item.IID = [IIDs].[IID], Item.IIcon = [IIDs].[IIcon] " _
        & "WHERE (((IIDs.Upd)=1)) " & ID

    CurrentProject.Connection.Execute upd1

Gruß intiii
 
Zuletzt bearbeitet:
Sodele, habe's hinbekommen:

Also: In dem Formular gibt's nur noch ein Verweis:

Call IIDsetzenfunction(Me.ID)

Dann flugs ein Modul erstellt mit folgender Funktion:

Option Compare Database
Public con As ADODB.Connection
Public cmdPubsIID As ADODB.Command

Function IIDsetzenfunction(Optional ID As String)

On Error Resume Next
If con.State = adStateClosed Then
Set con = New ADODB.Connection
con.Open "Provider=sqloledb;Data Source=server;Initial Catalog=db1;Integrated Security=SSPI;" 'User ID=; Password=;
End If

On Error GoTo 0

'Methodenobjekt anlegen
Set cmdPubsIID = CreateObject("ADODB.Command")

'Übergabevariable
Set tmpID = cmdPubsIID.CreateParameter("@UID", adInteger, adParamInput, , ID)


'Name des Methodenobjekts(stored Procedure)angeben
cmdPubsIID.CommandText = "sp_set_IIDs"

'Typ des Methodenobjekts angeben
cmdPubsIID.CommandType = adCmdStoredProc

'zuweisen der entsprechenden Verbindung auf der die Methode angewendet wird
Set cmdPubsIID.ActiveConnection = con

'Übergabe
cmdPubsIID.Parameters.Append tmpID

'ausführen der Methode
cmdPubsIID.Execute

'Objekt zurücksetzen
Set cmdPubsIID = Nothing

'Verbindung zur Datenbank schliessen
con.Close

End Function

Und schon klappt der Aufruf der Stored procedure

Apropos, die SP:

Alter PROCEDURE sp_set_IIDs @UID varchar(4000)
AS
BEGIN

DECLARE @Query1 VARCHAR (4000)
...
------------------------------------------
-- IIDvergabe über Tabelle IIDs
------------------------------------------

Set @Query1 = 'UPDATE Item SET Item.IID = IIDs.IID, Item.IIcon = IIDs.IIcon FROM Item INNER JOIN IIDs ON Item.IPage = IIDs.IPage and Item.IField = IIDs.IField '
...


IF @UID <> ''
BEGIN
set @Query1 = @Query1 + 'WHERE IIDs.Upd=1 and Item.ReportID = ' + @UID + ';'
...
END
ELSE BEGIN
set @Query1 = @Query1 + 'WHERE IIDs.Upd=1;'
...

END
Exec(@Query1)
...
END
 

Neue Beiträge

Zurück