oConn.CursorLocation = adUseClientSecond, because of the bug in the VFP OLE DB provider, you've to set CommandType to adCmdText (1) or to adCmdUnknown (8), and not to adStoredProc (4). See Readme.htm on VFP installation CD for more info.
>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 = VFPOleDB.1; Data Source = d:\TESTE\MEUBD.DBC] >oConn.CursorLocation = 2 && adUseServer >oCOnn.Mode = 16 && adModeShareDenyNone >oConn.Open(lcConnString) >oCmd.CommandType = 4 && Stored Procedure >oCmd.CommandText = [_st_GeraId] && Nome da Procedure >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 >>