LPARAMETERS tcDataSource,tcProvider IF VARTYPE(tcDataSource) <> [C] OR JUSTEXT(tcDataSource) <> [DBC] MessageBox([Uma base de dados deve ser informada para que a conexão possa ser estabelecida.],64,[Atenção.]) RETURN .F. ENDIF IF VARTYPE(tcProvider) <> [C] tcProvider = [VFPOleDB.1] ENDIF LOCAL oConn AS [AdoDB.Connection],oRS AS [AdoDB.RecordSet] ,; oCmd AS [AdoDB.Command],oPrm1 AS [AdoDB.Parameter] ,; oPrm2 AS [AdoDB.Parameter] LOCAL lcConnString AS String,lnRetVal AS Integer oConn = CREATEOBJECT([AdoDB.Connection]) oRS = CREATEOBJECT([AdoDB.recordSet]) oCmd = CREATEOBJECT([AdoDB.Command]) *-- Parâmetro OUTPUT da SP = lnId *-- Valor de OutPut para oPrm1.Direction = 2 *-- Parâmetro INPUT da SP = tcCampo *-- Valor de Input para oPrm2.Direction = 1 lcConnString = [Provider = ] + tcProvider + [; Data Source = ] + tcDataSource oConn.CursorLocation = 3 && adUseClient oCOnn.Mode = 16 && adModeShareDenyNone oConn.Open(lcConnString) oCmd.CommandType = 8 oCmd.CommandText = [_st_GeraId] && Nome da Procedure oCmd.ActiveConnection = oConn oPrm1 = oCmd.CreateParameter() oPrm1.Name = [lnId] oPrm1.Type = 3 && adInteger oPrm1.Direction = 2 oPrm1.Size = 4 && bytes oPrm1.Value = 0 && inicializei o valor de retorno. oCmd.Parameters.Append(oPrm1) oCmd.CreateParameter() oPrm2 = oCmd.CreateParameter() oPrm2.Name = [tcCampo] oPrm2.Type = 200 && adVarChar oPrm2.Direction = 1 && input Parameter oPrm2.Size = 25 && Um campo pode ter no máximo 25 caracteres, neste caso específico oPrm2.Value = [MinhaPK] oCmd.Parameters.Append(oPrm2) && Anexando outro parâmetro ao objeto oCmd oCmd.Execute() && Para executar o Comando