STORE PROCEDURE
Boa tarde
como eu faço para chamar de dentro do vb as procedures abaixo
Retornar o ultimo numero do campo ID da tabela
CREATE PROCEDURE SP_GERADOR(
PNOME VARCHAR(50) CHARACTER SET WIN1252)
RETURNS(
PVALOR INTEGER)
AS
DECLARE VARIABLE vSTM VARCHAR(500);
BEGIN
vSTM = [ô]SELECT NEXT VALUE FOR [ô] || :pNOME || [ô] FROM RDB$DATABASE[ô];
EXECUTE STATEMENT vSTM INTO :pVALOR;
SUSPEND;
END
Procedure Gravar/Alterar/Excluir cliente
pID D_CPONUMVAL0 vou informar o numero encontrado na procedure anterior
CREATE PROCEDURE SP_TBLCLIENTE(
pID D_CPONUMVAL0,
pCLIENTE D_NOME,
pVULGO D_NOME ,
pNASCIMENTO D_DATA,
pCGC D_CNPJ,
pIE D_IE,
pENDERECO D_ENDERECO,
pSSP D_SSP,
pBAIRRO D_BAIRRO,
pCEP D_CEP,
pCIDADE D_CIDADE,
pUF D_UF ,
pTELEFONE D_TELEFONE,
pATIVO D_SIMNAO,
pDATAULTCOMPRA D_DATA,
pVALORPAGAR D_VALOR,
pLIMITECOMPRA D_VALOR,
pANIVERSA D_DATA,
pTPO D_FJ)
AS
BEGIN
IF (:pTPO = [ô]I[ô]) then
INSERT INTO TBLCLIENTE
(CLIENTE,VULGO,NASCIMENTO,CGC,IE,ENDERECO,
SSP,BAIRRO,CEP,CIDADE,UF,
TELEFONE,ATIVO,DATAULTCOMPRA,VALORPAGAR,LIMITECOMPRA,ANIVERSA)VALUES(
:pCLIENTE,:pVULGO,:pNASCIMENTO, :pCGC,
:pIE, :pENDERECO, :pSSP, :pBAIRRO,
:pCEP, :pCIDADE, :pUF, :pTELEFONE,
:pATIVO, :pDATAULTCOMPRA, :pVALORPAGAR, :pLIMITECOMPRA, :pANIVERSA);
IF (:pTPO = [ô]A[ô]) THEN
UPDATE TBLCLIENTE
SET
CLIENTE = :pCLIENTE, VULGO = :pVULGO,
NASCIMENTO = :pNASCIMENTO, CGC = :pCGC,
IE = :pIE, ENDERECO = :pENDERECO,
SSP = :pSSP, BAIRRO = :pBAIRRO,
CEP = :pCEP, CIDADE = :pCIDADE,
UF = :pUF, TELEFONE = :pTELEFONE,
ATIVO = :pATIVO, DATAULTCOMPRA = :pDATAULTCOMPRA,
VALORPAGAR = :pVALORPAGAR, LIMITECOMPRA = :pLIMITECOMPRA,
ANIVERSA = :pANIVERSA
WHERE ID = :pID;
IF (:pTPO = [ô]E[ô]) THEN
DELETE FROM TBLCLIENTE
WHERE ID = :pID;
END;
como eu faço para chamar de dentro do vb as procedures abaixo
Retornar o ultimo numero do campo ID da tabela
CREATE PROCEDURE SP_GERADOR(
PNOME VARCHAR(50) CHARACTER SET WIN1252)
RETURNS(
PVALOR INTEGER)
AS
DECLARE VARIABLE vSTM VARCHAR(500);
BEGIN
vSTM = [ô]SELECT NEXT VALUE FOR [ô] || :pNOME || [ô] FROM RDB$DATABASE[ô];
EXECUTE STATEMENT vSTM INTO :pVALOR;
SUSPEND;
END
Procedure Gravar/Alterar/Excluir cliente
pID D_CPONUMVAL0 vou informar o numero encontrado na procedure anterior
CREATE PROCEDURE SP_TBLCLIENTE(
pID D_CPONUMVAL0,
pCLIENTE D_NOME,
pVULGO D_NOME ,
pNASCIMENTO D_DATA,
pCGC D_CNPJ,
pIE D_IE,
pENDERECO D_ENDERECO,
pSSP D_SSP,
pBAIRRO D_BAIRRO,
pCEP D_CEP,
pCIDADE D_CIDADE,
pUF D_UF ,
pTELEFONE D_TELEFONE,
pATIVO D_SIMNAO,
pDATAULTCOMPRA D_DATA,
pVALORPAGAR D_VALOR,
pLIMITECOMPRA D_VALOR,
pANIVERSA D_DATA,
pTPO D_FJ)
AS
BEGIN
IF (:pTPO = [ô]I[ô]) then
INSERT INTO TBLCLIENTE
(CLIENTE,VULGO,NASCIMENTO,CGC,IE,ENDERECO,
SSP,BAIRRO,CEP,CIDADE,UF,
TELEFONE,ATIVO,DATAULTCOMPRA,VALORPAGAR,LIMITECOMPRA,ANIVERSA)VALUES(
:pCLIENTE,:pVULGO,:pNASCIMENTO, :pCGC,
:pIE, :pENDERECO, :pSSP, :pBAIRRO,
:pCEP, :pCIDADE, :pUF, :pTELEFONE,
:pATIVO, :pDATAULTCOMPRA, :pVALORPAGAR, :pLIMITECOMPRA, :pANIVERSA);
IF (:pTPO = [ô]A[ô]) THEN
UPDATE TBLCLIENTE
SET
CLIENTE = :pCLIENTE, VULGO = :pVULGO,
NASCIMENTO = :pNASCIMENTO, CGC = :pCGC,
IE = :pIE, ENDERECO = :pENDERECO,
SSP = :pSSP, BAIRRO = :pBAIRRO,
CEP = :pCEP, CIDADE = :pCIDADE,
UF = :pUF, TELEFONE = :pTELEFONE,
ATIVO = :pATIVO, DATAULTCOMPRA = :pDATAULTCOMPRA,
VALORPAGAR = :pVALORPAGAR, LIMITECOMPRA = :pLIMITECOMPRA,
ANIVERSA = :pANIVERSA
WHERE ID = :pID;
IF (:pTPO = [ô]E[ô]) THEN
DELETE FROM TBLCLIENTE
WHERE ID = :pID;
END;
Bom depois de bater cabeça eu consegui segue abaixo para quem quiser
Firebird 2.1
Criando o gerador campo autonumeração
CREATE GENERATOR GEN_TBLCLIENTE;
Procedure
CREATE PROCEDURE SP_TBLCLIENTE(
pID D_CPONUMVAL0,
pTPO D_FJ,
pCLIENTE D_NOME,
pVULGO D_NOME ,
pNASCIMENTO D_DATA,
pCGC D_CNPJ,
pIE D_IE,
pSSP D_SSP,
pENDERECO D_ENDERECO,
pBAIRRO D_BAIRRO,
pCEP D_CEP,
pCIDADE D_CIDADE,
pUF D_UF ,
pTELEFONE D_TELEFONE,
pATIVO D_SIMNAO,
pDATAULTCOMPRA D_DATA,
pVALORPAGAR D_VALOR,
pLIMITECOMPRA D_VALOR,
pDTCADASTRO D_DATA,
pBLOQUEIO D_CPONUMVAL0
)
AS
BEGIN
IF (:pTPO = [ô]I[ô]) then
INSERT INTO TBLCLIENTE
(ID,CLIENTE,VULGO,NASCIMENTO,CGC,IE,SSP,ENDERECO,
BAIRRO,CEP,CIDADE,UF,
TELEFONE,ATIVO,DATAULTCOMPRA,VALORPAGAR,
LIMITECOMPRA,DTCADASTRO,BLOQUEIO)VALUES(
:pID,:pCLIENTE,:pVULGO,:pNASCIMENTO, :pCGC,
:pIE, :pSSP, :pENDERECO, :pBAIRRO,
:pCEP, :pCIDADE, :pUF, :pTELEFONE,
:pATIVO, :pDATAULTCOMPRA, :pVALORPAGAR,
:pLIMITECOMPRA, :pDTCADASTRO,:pBLOQUEIO);
IF (:pTPO = [ô]A[ô]) THEN
UPDATE TBLCLIENTE
SET
CLIENTE = :pCLIENTE, VULGO = :pVULGO,
NASCIMENTO = :pNASCIMENTO, CGC = :pCGC,
IE = :pIE, SSP = :pSSP,ENDERECO = :pENDERECO,
BAIRRO = :pBAIRRO, CEP = :pCEP, CIDADE = :pCIDADE,
UF = :pUF, TELEFONE = :pTELEFONE,
ATIVO = :pATIVO, DATAULTCOMPRA = :pDATAULTCOMPRA,
VALORPAGAR = :pVALORPAGAR, LIMITECOMPRA = :pLIMITECOMPRA,
DTCADASTRO = :pDTCADASTRO, BLOQUEIO = :pBLOQUEIO
WHERE ID = :pID;
IF (:pTPO = [ô]E[ô]) THEN
DELETE FROM TBLCLIENTE
WHERE ID = :pID;
END;
Observação.
é aconselhavel comitar a operação, e dá uma rollback caso ocorra algum erro, com isso o generator fica sempre atualizado.
Na inclusão para pegar o ultimo ID da tabela
Dim Result As String
cnn.BeginTrans
Set Rs1 = Cnn.Execute([Ô]SELECT * from SP_GERADOR([ô]GEN_TBLCLIENTE[ô])[Ô])
Result = Rs1.Fields(0)
Rs1.Close
Set Rs1 = Nothing
Dim cmd As New ADODB.Command
Dim RST As ADODB.Recordset
Dim pSTR As ADODB.Parameter
[ô]//Na alteração de registro o Result deve ser substitutuido pelo id da linha da tabela
Set pSTR = cmd.CreateParameter([Ô]pID[Ô], adInteger, adParamInput, , Result)
cmd.Parameters.Append pSTR
[ô]//O tipo de operação [Ô]I[Ô] Inclusão [Ô]A[ô] ALteração ou [Ô]E[Ô] Exclusão
[ô]//Na exclusão passar para procedure somente o primeiro e segundo parametro
Set pSTR = cmd.CreateParameter([Ô]pTPO[Ô], adVarChar, adParamInput, 1, [Ô]I[Ô])
cmd.Parameters.Append pSTR
Set pSTR = cmd.CreateParameter([Ô]pCLIENTE[Ô], adVarChar, adParamInput, 70, Me.Cliente)
cmd.Parameters.Append pSTR
Set pSTR = cmd.CreateParameter([Ô]pVULGO[Ô], adVarChar, adParamInput, 70, Me.Vulgo)
cmd.Parameters.Append pSTR
Set pSTR = cmd.CreateParameter([Ô]pANIVERSARIO[Ô], adDate, , adParamInput, Format(Me.Aniversa, [Ô]mm/dd/yyyy[Ô]))
cmd.Parameters.Append pSTR
Set pSTR = cmd.CreateParameter([Ô]pCNPJ[Ô], adVarChar, adParamInput, 18, Me.CNPJ)
cmd.Parameters.Append pSTR
Set pSTR = cmd.CreateParameter([Ô]pIE[Ô], adVarChar, adParamInput, 14, IIf(Me.IE = [Ô][Ô] Or IsNull(Me.IE), VAZ, Me.Telefone))
cmd.Parameters.Append pSTR
Set pSTR = cmd.CreateParameter([Ô]pSSP[Ô], adVarChar, adParamInput, 2, IIf(Me.SSP = [Ô][Ô] Or IsNull(Me.SSP), VAZ, Me.SSP))
cmd.Parameters.Append pSTR
Set pSTR = cmd.CreateParameter([Ô]pENDERECO[Ô], adVarChar, adParamInput, 100, Me.Endereco)
cmd.Parameters.Append pSTR
Set pSTR = cmd.CreateParameter([Ô]pBAIRRO[Ô], adVarChar, adParamInput, 50, Me.Bairro)
cmd.Parameters.Append pSTR
Set pSTR = cmd.CreateParameter([Ô]pCEP[Ô], adVarChar, adParamInput, 9, Me.Cep)
cmd.Parameters.Append pSTR
Set pSTR = cmd.CreateParameter([Ô]pCIDADE[Ô], adVarChar, adParamInput, 70, Me.Cidade)
cmd.Parameters.Append pSTR
Set pSTR = cmd.CreateParameter([Ô]pUF[Ô], adVarChar, adParamInput, 2, Me.UF)
cmd.Parameters.Append pSTR
Set pSTR = cmd.CreateParameter([Ô]pTELEFONE[Ô], adVarChar, adParamInput, 20, IIf(Me.Telefone = [Ô][Ô] Or IsNull(Me.Telefone), VAZ, Me.Telefone))
cmd.Parameters.Append pSTR
Set pSTR = cmd.CreateParameter([Ô]pATIVO[Ô], adInteger, adParamInput, , IIf(Me.Ativo = [Ô][Ô] Or IsNull(Me.Ativo), 0, Me.Ativo))
cmd.Parameters.Append pSTR
Set pSTR = cmd.CreateParameter([Ô]pDATAULTCOMPRA[Ô], adDate, adParamInput, , Null)
cmd.Parameters.Append pSTR
Set pSTR = cmd.CreateParameter([Ô]pVALORPAGAR[Ô], adDouble, adParamInput, , 0)
cmd.Parameters.Append pSTR
Set pSTR = cmd.CreateParameter([Ô]pLIMITECOMPRA[Ô], adDouble, adParamInput, , IIf(Me.Limite = [Ô][Ô] Or IsNull(Me.Limite), 0, 0))
cmd.Parameters.Append pSTR
Set pSTR = cmd.CreateParameter([Ô]pDTCADASTRO[Ô], adDate, adParamInput, , Format(Date, [Ô]mm/dd/yyyy[Ô]))
cmd.Parameters.Append pSTR
Set pSTR = cmd.CreateParameter([Ô]pBLOQUEIO[Ô], adInteger, adParamInput, , IIf(Me.Bloqueio = [Ô][Ô] Or IsNull(Me.Bloqueio), 0, Me.Bloqueio))
cmd.Parameters.Append pSTR
With cmd
.ActiveConnection = Cnn
.CommandType = adCmdStoredProc
.CommandText = [Ô]SP_TBLCLIENTE[Ô]
.Execute
End With
Set pSTR = Nothing
cnn.CommitTrans
Firebird 2.1
Criando o gerador campo autonumeração
CREATE GENERATOR GEN_TBLCLIENTE;
Procedure
CREATE PROCEDURE SP_TBLCLIENTE(
pID D_CPONUMVAL0,
pTPO D_FJ,
pCLIENTE D_NOME,
pVULGO D_NOME ,
pNASCIMENTO D_DATA,
pCGC D_CNPJ,
pIE D_IE,
pSSP D_SSP,
pENDERECO D_ENDERECO,
pBAIRRO D_BAIRRO,
pCEP D_CEP,
pCIDADE D_CIDADE,
pUF D_UF ,
pTELEFONE D_TELEFONE,
pATIVO D_SIMNAO,
pDATAULTCOMPRA D_DATA,
pVALORPAGAR D_VALOR,
pLIMITECOMPRA D_VALOR,
pDTCADASTRO D_DATA,
pBLOQUEIO D_CPONUMVAL0
)
AS
BEGIN
IF (:pTPO = [ô]I[ô]) then
INSERT INTO TBLCLIENTE
(ID,CLIENTE,VULGO,NASCIMENTO,CGC,IE,SSP,ENDERECO,
BAIRRO,CEP,CIDADE,UF,
TELEFONE,ATIVO,DATAULTCOMPRA,VALORPAGAR,
LIMITECOMPRA,DTCADASTRO,BLOQUEIO)VALUES(
:pID,:pCLIENTE,:pVULGO,:pNASCIMENTO, :pCGC,
:pIE, :pSSP, :pENDERECO, :pBAIRRO,
:pCEP, :pCIDADE, :pUF, :pTELEFONE,
:pATIVO, :pDATAULTCOMPRA, :pVALORPAGAR,
:pLIMITECOMPRA, :pDTCADASTRO,:pBLOQUEIO);
IF (:pTPO = [ô]A[ô]) THEN
UPDATE TBLCLIENTE
SET
CLIENTE = :pCLIENTE, VULGO = :pVULGO,
NASCIMENTO = :pNASCIMENTO, CGC = :pCGC,
IE = :pIE, SSP = :pSSP,ENDERECO = :pENDERECO,
BAIRRO = :pBAIRRO, CEP = :pCEP, CIDADE = :pCIDADE,
UF = :pUF, TELEFONE = :pTELEFONE,
ATIVO = :pATIVO, DATAULTCOMPRA = :pDATAULTCOMPRA,
VALORPAGAR = :pVALORPAGAR, LIMITECOMPRA = :pLIMITECOMPRA,
DTCADASTRO = :pDTCADASTRO, BLOQUEIO = :pBLOQUEIO
WHERE ID = :pID;
IF (:pTPO = [ô]E[ô]) THEN
DELETE FROM TBLCLIENTE
WHERE ID = :pID;
END;
Observação.
é aconselhavel comitar a operação, e dá uma rollback caso ocorra algum erro, com isso o generator fica sempre atualizado.
Na inclusão para pegar o ultimo ID da tabela
Dim Result As String
cnn.BeginTrans
Set Rs1 = Cnn.Execute([Ô]SELECT * from SP_GERADOR([ô]GEN_TBLCLIENTE[ô])[Ô])
Result = Rs1.Fields(0)
Rs1.Close
Set Rs1 = Nothing
Dim cmd As New ADODB.Command
Dim RST As ADODB.Recordset
Dim pSTR As ADODB.Parameter
[ô]//Na alteração de registro o Result deve ser substitutuido pelo id da linha da tabela
Set pSTR = cmd.CreateParameter([Ô]pID[Ô], adInteger, adParamInput, , Result)
cmd.Parameters.Append pSTR
[ô]//O tipo de operação [Ô]I[Ô] Inclusão [Ô]A[ô] ALteração ou [Ô]E[Ô] Exclusão
[ô]//Na exclusão passar para procedure somente o primeiro e segundo parametro
Set pSTR = cmd.CreateParameter([Ô]pTPO[Ô], adVarChar, adParamInput, 1, [Ô]I[Ô])
cmd.Parameters.Append pSTR
Set pSTR = cmd.CreateParameter([Ô]pCLIENTE[Ô], adVarChar, adParamInput, 70, Me.Cliente)
cmd.Parameters.Append pSTR
Set pSTR = cmd.CreateParameter([Ô]pVULGO[Ô], adVarChar, adParamInput, 70, Me.Vulgo)
cmd.Parameters.Append pSTR
Set pSTR = cmd.CreateParameter([Ô]pANIVERSARIO[Ô], adDate, , adParamInput, Format(Me.Aniversa, [Ô]mm/dd/yyyy[Ô]))
cmd.Parameters.Append pSTR
Set pSTR = cmd.CreateParameter([Ô]pCNPJ[Ô], adVarChar, adParamInput, 18, Me.CNPJ)
cmd.Parameters.Append pSTR
Set pSTR = cmd.CreateParameter([Ô]pIE[Ô], adVarChar, adParamInput, 14, IIf(Me.IE = [Ô][Ô] Or IsNull(Me.IE), VAZ, Me.Telefone))
cmd.Parameters.Append pSTR
Set pSTR = cmd.CreateParameter([Ô]pSSP[Ô], adVarChar, adParamInput, 2, IIf(Me.SSP = [Ô][Ô] Or IsNull(Me.SSP), VAZ, Me.SSP))
cmd.Parameters.Append pSTR
Set pSTR = cmd.CreateParameter([Ô]pENDERECO[Ô], adVarChar, adParamInput, 100, Me.Endereco)
cmd.Parameters.Append pSTR
Set pSTR = cmd.CreateParameter([Ô]pBAIRRO[Ô], adVarChar, adParamInput, 50, Me.Bairro)
cmd.Parameters.Append pSTR
Set pSTR = cmd.CreateParameter([Ô]pCEP[Ô], adVarChar, adParamInput, 9, Me.Cep)
cmd.Parameters.Append pSTR
Set pSTR = cmd.CreateParameter([Ô]pCIDADE[Ô], adVarChar, adParamInput, 70, Me.Cidade)
cmd.Parameters.Append pSTR
Set pSTR = cmd.CreateParameter([Ô]pUF[Ô], adVarChar, adParamInput, 2, Me.UF)
cmd.Parameters.Append pSTR
Set pSTR = cmd.CreateParameter([Ô]pTELEFONE[Ô], adVarChar, adParamInput, 20, IIf(Me.Telefone = [Ô][Ô] Or IsNull(Me.Telefone), VAZ, Me.Telefone))
cmd.Parameters.Append pSTR
Set pSTR = cmd.CreateParameter([Ô]pATIVO[Ô], adInteger, adParamInput, , IIf(Me.Ativo = [Ô][Ô] Or IsNull(Me.Ativo), 0, Me.Ativo))
cmd.Parameters.Append pSTR
Set pSTR = cmd.CreateParameter([Ô]pDATAULTCOMPRA[Ô], adDate, adParamInput, , Null)
cmd.Parameters.Append pSTR
Set pSTR = cmd.CreateParameter([Ô]pVALORPAGAR[Ô], adDouble, adParamInput, , 0)
cmd.Parameters.Append pSTR
Set pSTR = cmd.CreateParameter([Ô]pLIMITECOMPRA[Ô], adDouble, adParamInput, , IIf(Me.Limite = [Ô][Ô] Or IsNull(Me.Limite), 0, 0))
cmd.Parameters.Append pSTR
Set pSTR = cmd.CreateParameter([Ô]pDTCADASTRO[Ô], adDate, adParamInput, , Format(Date, [Ô]mm/dd/yyyy[Ô]))
cmd.Parameters.Append pSTR
Set pSTR = cmd.CreateParameter([Ô]pBLOQUEIO[Ô], adInteger, adParamInput, , IIf(Me.Bloqueio = [Ô][Ô] Or IsNull(Me.Bloqueio), 0, Me.Bloqueio))
cmd.Parameters.Append pSTR
With cmd
.ActiveConnection = Cnn
.CommandType = adCmdStoredProc
.CommandText = [Ô]SP_TBLCLIENTE[Ô]
.Execute
End With
Set pSTR = Nothing
cnn.CommitTrans
Tópico encerrado , respostas não são mais permitidas