Въпрос за MS SQL Server 2000 процедура
5 отговора
273 прегледа
Въпрос за MS SQL Server 2000 процедура
Някой знае ли как се връщат стойности от съхранена процедура към VBA.
От VBA функция извиквам съхранена процедура която връща нещо. Как върнатата стойност да се предаде на променлива от функцията?
Ако някой знае как, моля да ми изпрати един елементарен пример. Ще бъда много благодарен.
От VBA функция извиквам съхранена процедура която връща нещо. Как върнатата стойност да се предаде на променлива от функцията?
Ако някой знае как, моля да ми изпрати един елементарен пример. Ще бъда много благодарен.
Re: Въпрос за MS SQL Server 2000 процедура
sub example
dim rs as New AdoDB.Recordset
dim strVar as String
rs.Open "yourstoredprocedure", CurrentProject.Connecttion
strVar = rs!Value
rs.Close
end sub
'
' Your procedure :
' select Value from table
'
'
Thank you. Here is another solution as well
Hi,
Thank you for your reply. Meanwhile I found another solution using Command.
Here is a sample:
VBA client side:
'-------------------------------------------------------------
Private Function GetDestinationID(OrderID As Long) As Long
On Error GoTo GetDestinationID_Err
Dim cmd As ADODB.Command
Set cmd = New ADODB.Command
With cmd
.ActiveConnection = CurrentProject.Connection
.CommandText = "usp_GetDestinationID"
.CommandType = adCmdStoredProc
.Parameters.Append .CreateParameter("@intOrderID", adInteger, adParamInput, , OrderID)
.Parameters.Append .CreateParameter("@intDestinationID", adInteger, adParamOutput)
.Execute
GetDestinationID = .Parameters("@intDestinationID").Value
End With
WrapUp:
Exit_GetDestinationID:
Set cmd = Nothing
Exit Function
GetDestinationID_Err:
Call LogMsgError(Err.Description, Err.Number, ModuleName$, "GetDestinationID")
Resume Exit_GetDestinationID
End Function
'-----------------------------------------------------
T-SQL server side:
CREATE PROCEDURE dbo.usp_GetDestinationID
(
@intOrderID int,
@intDestinationID int=0 OUTPUT
)
AS
SET NOCOUNT ON
BEGIN
SELECT @intDestinationID=lv.DestinationID
FROM dbo.[Land Voyages] AS lv INNER JOIN dbo.[Pickup Booking List] AS pbl
ON lv.LandVoyageID=pbl.LandVoyageID
WHERE pbl.OrderID = @intOrderID
END
GO
'------------------------------------
Regards
Dani

Thank you for your reply. Meanwhile I found another solution using Command.
Here is a sample:
VBA client side:
'-------------------------------------------------------------
Private Function GetDestinationID(OrderID As Long) As Long
On Error GoTo GetDestinationID_Err
Dim cmd As ADODB.Command
Set cmd = New ADODB.Command
With cmd
.ActiveConnection = CurrentProject.Connection
.CommandText = "usp_GetDestinationID"
.CommandType = adCmdStoredProc
.Parameters.Append .CreateParameter("@intOrderID", adInteger, adParamInput, , OrderID)
.Parameters.Append .CreateParameter("@intDestinationID", adInteger, adParamOutput)
.Execute
GetDestinationID = .Parameters("@intDestinationID").Value
End With
WrapUp:
Exit_GetDestinationID:
Set cmd = Nothing
Exit Function
GetDestinationID_Err:
Call LogMsgError(Err.Description, Err.Number, ModuleName$, "GetDestinationID")
Resume Exit_GetDestinationID
End Function
'-----------------------------------------------------
T-SQL server side:
CREATE PROCEDURE dbo.usp_GetDestinationID
(
@intOrderID int,
@intDestinationID int=0 OUTPUT
)
AS
SET NOCOUNT ON
BEGIN
SELECT @intDestinationID=lv.DestinationID
FROM dbo.[Land Voyages] AS lv INNER JOIN dbo.[Pickup Booking List] AS pbl
ON lv.LandVoyageID=pbl.LandVoyageID
WHERE pbl.OrderID = @intOrderID
END
GO
'------------------------------------
Regards
Dani
За общи приказки всики дава акъл.
За общи приказки всеки дава акъл и се пише разбирач, а като стане въпрос някой да зададе конкретен въпрос никой не се обажда.
Дайте конкретен работещ пример за използване на Recordset за обръщане към съхранена процедура при която да се връщат стойности.
Вече разбрах как става с Command. Мога да придавам и стойности чрез Connection а, с Recordset някой знае ли дали може.
Дайте конкретен работещ пример за използване на Recordset за обръщане към съхранена процедура при която да се връщат стойности.
Вече разбрах как става с Command. Мога да придавам и стойности чрез Connection а, с Recordset някой знае ли дали може.
Re: За общи приказки всики дава акъл.
tezi klubowe sa za dawane na syweti i pomo6t taka 4e da nau4i6 ne6to. Towa ne e mqsto kydeto idwa6 i kazwa6 'daite mi primeren kod za towa i towa'. Ako pita6 kak se prawi, ima hora koito da ti obqsnqt, ako iska6 konkreten kod, malko hora sa meraklii da sednat da ti go napi6at...
Re:Не искам конкретен код
Не искам конкретен код. Искам какъвто и да е кратък код който да показва по принцип как се използва Recordset за обръщане към съхранена процедура която да връща стойност.
Пак повтарям че с Command мога да го направя, но ми е интересно дали може с Recordset.
Пак повтарям че с Command мога да го направя, но ми е интересно дали може с Recordset.