RETORNAR VALOR ADPARAMOUTPUT DE STORED PROCEDURE
Boa noite a todos!
Estou tentando retornar o @@Identity com a minha Stored Procedure, mas não está retornando. Em outras aplicações em C# funciona normalmente, mas na minha em VB6 não. Onde estou errando?
Private Sub cmdRegistrar_Click()
Dim res As Integer
Set Comando = New ADODB.Command
With Comando
.ActiveConnection = Conexao
.CommandType = adCmdStoredProc
.CommandText = [Ô]usp_inserir[Ô]
.Parameters.Append .CreateParameter([Ô]empid[Ô], adInteger, adParamOutput)
.Parameters.Append .CreateParameter([Ô]firstname[Ô], adVarChar, adParamInput, 30, txtFirstName.Text)
.Parameters.Append .CreateParameter([Ô]lastname[Ô], adVarChar, adParamInput, 30, txtLastName.Text)
.Parameters.Append .CreateParameter([Ô]hiredate[Ô], adDate, adParamInput, 10, Format(txtHireDate.Text, [Ô]yyyy-MM-dd[Ô]))
.Parameters.Append .CreateParameter([Ô]mgrid[Ô], adInteger, adParamInput, 4, Val(txtMGrid.Text))
.Parameters.Append .CreateParameter([Ô]ssn[Ô], adVarChar, adParamInput, 20, txtSSN.Text)
.Parameters.Append .CreateParameter([Ô]salary[Ô], adCurrency, adParamInput, , txtSalary.Text)
End With
MsgBox Comando([Ô]empid[Ô])
Set Registro = Comando.Execute
Set Comando.ActiveConnection = Nothing
Set Comando = Nothing
Call CarregarTabela
End Sub
Segue o código do meu Stored Procedure:
IF OBJECT_ID([ô]dbo.usp_inserir[ô], [ô]P[ô]) IS NOT NULL
DROP PROC dbo.usp_inserir;
GO
CREATE PROC dbo.usp_inserir
@empid INT OUTPUT,
@firstname VARCHAR(30),
@lastname VARCHAR(30),
@hiredate DATE,
@mgrid INT,
@ssn VARCHAR(20),
@salary MONEY
AS
BEGIN
INSERT INTO Empregados(
firstname,
lastname,
hiredate,
mgrid,
ssn,
salary
)
VALUES(
@firstname,
@lastname,
@hiredate,
@mgrid,
@ssn,
@salary
)
SET @empid = (SELECT @@IDENTITY)
END
Estou tentando retornar o @@Identity com a minha Stored Procedure, mas não está retornando. Em outras aplicações em C# funciona normalmente, mas na minha em VB6 não. Onde estou errando?
Private Sub cmdRegistrar_Click()
Dim res As Integer
Set Comando = New ADODB.Command
With Comando
.ActiveConnection = Conexao
.CommandType = adCmdStoredProc
.CommandText = [Ô]usp_inserir[Ô]
.Parameters.Append .CreateParameter([Ô]empid[Ô], adInteger, adParamOutput)
.Parameters.Append .CreateParameter([Ô]firstname[Ô], adVarChar, adParamInput, 30, txtFirstName.Text)
.Parameters.Append .CreateParameter([Ô]lastname[Ô], adVarChar, adParamInput, 30, txtLastName.Text)
.Parameters.Append .CreateParameter([Ô]hiredate[Ô], adDate, adParamInput, 10, Format(txtHireDate.Text, [Ô]yyyy-MM-dd[Ô]))
.Parameters.Append .CreateParameter([Ô]mgrid[Ô], adInteger, adParamInput, 4, Val(txtMGrid.Text))
.Parameters.Append .CreateParameter([Ô]ssn[Ô], adVarChar, adParamInput, 20, txtSSN.Text)
.Parameters.Append .CreateParameter([Ô]salary[Ô], adCurrency, adParamInput, , txtSalary.Text)
End With
MsgBox Comando([Ô]empid[Ô])
Set Registro = Comando.Execute
Set Comando.ActiveConnection = Nothing
Set Comando = Nothing
Call CarregarTabela
End Sub
Segue o código do meu Stored Procedure:
IF OBJECT_ID([ô]dbo.usp_inserir[ô], [ô]P[ô]) IS NOT NULL
DROP PROC dbo.usp_inserir;
GO
CREATE PROC dbo.usp_inserir
@empid INT OUTPUT,
@firstname VARCHAR(30),
@lastname VARCHAR(30),
@hiredate DATE,
@mgrid INT,
@ssn VARCHAR(20),
@salary MONEY
AS
BEGIN
INSERT INTO Empregados(
firstname,
lastname,
hiredate,
mgrid,
ssn,
salary
)
VALUES(
@firstname,
@lastname,
@hiredate,
@mgrid,
@ssn,
@salary
)
SET @empid = (SELECT @@IDENTITY)
END
Tente assim.
With Comando
.ActiveConnection = conexao
.CommandType = adCmdStoredProc
.CommandText = [Ô]usp_inserir[Ô]
.Parameters.Append .CreateParameter([Ô]empid[Ô], adInteger, adParamOutput)
.Parameters.Append .CreateParameter([Ô]firstname[Ô], adVarChar, adParamInput, 30)
.Parameters.Append .CreateParameter([Ô]lastname[Ô], adVarChar, adParamInput, 30)
.Parameters.Append .CreateParameter([Ô]hiredate[Ô], adDate, adParamInput, 10)
.Parameters.Append .CreateParameter([Ô]mgrid[Ô], adInteger, adParamInput, 4)
.Parameters.Append .CreateParameter([Ô]ssn[Ô], adVarChar, adParamInput, 20)
.Parameters.Append .CreateParameter([Ô]salary[Ô], adCurrency, adParamInput)
.Parameters([Ô]firstname[Ô]) = txtFirstName.Text
.Parameters([Ô]lastname[Ô]) = txtLastName.Text
.Parameters([Ô]hiredate[Ô]) = Format(txtHireDate.Text, [Ô]yyyy-MM-dd[Ô])
.Parameters([Ô]mgrid[Ô]) = Val(txtMGrid.Text)
.Parameters([Ô]ssn[Ô]) = txtSSN.Text
.Parameters([Ô]salary[Ô]) = txtSalary.Text
End With
With Comando
.ActiveConnection = conexao
.CommandType = adCmdStoredProc
.CommandText = [Ô]usp_inserir[Ô]
.Parameters.Append .CreateParameter([Ô]empid[Ô], adInteger, adParamOutput)
.Parameters.Append .CreateParameter([Ô]firstname[Ô], adVarChar, adParamInput, 30)
.Parameters.Append .CreateParameter([Ô]lastname[Ô], adVarChar, adParamInput, 30)
.Parameters.Append .CreateParameter([Ô]hiredate[Ô], adDate, adParamInput, 10)
.Parameters.Append .CreateParameter([Ô]mgrid[Ô], adInteger, adParamInput, 4)
.Parameters.Append .CreateParameter([Ô]ssn[Ô], adVarChar, adParamInput, 20)
.Parameters.Append .CreateParameter([Ô]salary[Ô], adCurrency, adParamInput)
.Parameters([Ô]firstname[Ô]) = txtFirstName.Text
.Parameters([Ô]lastname[Ô]) = txtLastName.Text
.Parameters([Ô]hiredate[Ô]) = Format(txtHireDate.Text, [Ô]yyyy-MM-dd[Ô])
.Parameters([Ô]mgrid[Ô]) = Val(txtMGrid.Text)
.Parameters([Ô]ssn[Ô]) = txtSSN.Text
.Parameters([Ô]salary[Ô]) = txtSalary.Text
End With
Omar, mas e a saÃda?
Olá Kelly, abaixo segue a forma que eu usava quando eu usava o VB6, o código abaixo serve pra gerar um número de pedido retornando para a aplicação sempre o próximo número. é só você adaptar e testar ok.
No VB6
No SQL Server
Abraços
No VB6
Public Function GetNumeroPedido() As Long
Dim cmd As New ADODB.Command
On Error GoTo Trata_Erro
With cmd
.ActiveConnection = Conexao
.CommandText = [Ô]sp_unicoIds[Ô]
.CommandType = adCmdStoredProc
.Parameters.Append .CreateParameter([Ô]Return[Ô], adInteger, adParamReturnValue)
.Execute
End With
GetNumeroPedido = cmd(0)
Dispose:
Set cmd = Nothing
Exit Function
Trata_Erro:
GetNumeroPedido = -1
GoTo Dispose
End Function
No SQL Server
CREATE PROCEDURE [dbo].[sp_unicoIds]
AS
IF (SELECT COUNT([SeuCampoDePedidoSequencial]) FROM [SuaTabelaDeNumerosSequencias]) = 0
INSERT INTO [SuaTabelaDeNumerosSequencias] ([SeuCampoDePedidoSequencial]) VALUES(0)
UPDATE [SuaTabelaDeNumerosSequencias]
SET [SeuCampoDePedidoSequencial] = [SeuCampoDePedidoSequencial] + 1
RETURN (SELECT [SeuCampoDePedidoSequencial] FROM [SuaTabelaDeNumerosSequencias])
Abraços
Gostei da forma como escreveu o seu procedimento armazenado usando RETURN, nunca usei dessa forma.
Obrigada Lampião!
Obrigada Lampião!
Tópico encerrado , respostas não são mais permitidas