oConn := CreateObject("ADODB.Connection")
oConn:ConnectionString := "PROVIDER=SQLOLEDB;DATASOURCE=miservidor;DATABASE=mibasedatos;UID=miusuario;PWD=miclave"
oConn:Open()
oConn:Execute("Copiar_Diagrama "+Alltrim(Str(AUX->A_RECNO))+", '"+Str(nDCODDES,3)+"', ")
oConn:Close()
SP = Store Procedure!
Pedro,
Te comparto unas lÃneas de código donde utilizo ADO, me conecto a una base de datos SQL, ejecuto un SP con parametro y me traigo información de los SP que voy ejecutando, espero te sirva para que tengas idea de CÓMO traer los datos de ResulSet a tu aplicación
PROCEDURE GetBEInformation()
LOCAL oGetBEInfo := CreateObject("ADODB.Recordset")
LOCAL oCommPer := CreateObject("ADODB.Recordset")
LOCAL oCountry := CreateObject("ADODB.Recordset")
TurnOffControls()
IF Frm_BEInfo.Txt_BE.Value < 101
MsgExclamation("Este DIN no se puede consultar ya que es"+CORTEL+"para uso exclusivo del sistema","¡Error!")
Frm_BEInfo.Txt_BE.SetFocus
RETURN
ENDIF
CursorWait()
LnDin := ALLTRIM(STR(Frm_BEInfo.Txt_BE.Value))
LsRSBEInfo := "usp_HMG_BEInfo &LnDin"
oGetBEInfo:Open(LsRSBEInfo, cn, adOpenDynamic, adLockOptimistic)
DO CASE
CASE oGetBEInfo:RecordCount = 0
CursorArrow()
MsgInfo("No existe ese DIN, teclee uno válido.","!Error¡")
Frm_BEInfo.Txt_BE.SetFocus
oGetBEInfo:Close()
RETURN
OTHERWISE
oGetBEInfo:MoveFirst()
CursorWait()
WAIT WINDOW "Espere... Cargando información del DIN" NOWAIT
GnActive := oGetBEInfo:Fields("Active"):VALUE
GnNameTy := oGetBEInfo:Fields("NameTy"):VALUE
// Pone el nombre en la etiqueta y si esta inactivo lo hace saber
DO WHILE !oGetBEInfo:EOF()
LsNameTy := oGetBEInfo:Fields("NameTy"):Value
IF LsNameTy = 0
Frm_BEInfo.Lbl_BEName.Value := IIF(GnActive = 1,"Nombre: "+(oGetBEInfo:Fields("Name"):VALUE),+;
"Nombre: "+(oGetBEInfo:Fields("Name"):VALUE)+" *INACTIVO*")
GsEMailAddrAfiliate := oGetBEInfo:Fields("EMailAddr"):Value
ELSE
Frm_BEInfo.Lbl_CoAfiliate.Value := "Co-DIN "+(oGetBEInfo:Fields("Name"):VALUE)
GsEMailAddrCoAfiliate := oGetBEInfo:Fields("EMailAddr"):Value
ENDIF
IF GnActive = 1
Frm_BEInfo.Lbl_BEName.FontColor := {0,0,255}
ELSE
Frm_BEInfo.Lbl_BEName.FontColor := {255,0,0}
ENDIF
oGetBEInfo:MoveNext()
ENDDO
oGetBEInfo:CLOSE()
WAIT CLEAR
ENDCASE
* Llena el combo de los periodos que se usa para buscar las órdenes
oCommPer:Open("usp_Nice_ShowCommPer", cn, adOpenDynamic, adLockOptimistic)
IF oCommPer:RecordCount = 0
MsgInfo("No hay periodos a mostrar")
oCommPer:CLOSE()
RETURN
ELSE
Frm_BEInfo.Cbo_InitEarningPeriod.DeleteAllItems
Frm_BEInfo.Cbo_EndEarningPeriod.DeleteAllItems
oCommPer:MoveFirst()
DO WHILE !oCommPer:EOF()
Frm_BEInfo.Cbo_CommPer.additem(oCommPer:Fields(""):VALUE)
Frm_BEInfo.Cbo_FromCommPerComm.additem(oCommPer:Fields(""):VALUE)
Frm_BEInfo.Cbo_ToCommPerComm.additem(oCommPer:Fields(""):VALUE)
Frm_BEInfo.Cbo_InitEarningPeriod.additem(oCommPer:Fields(""):VALUE)
Frm_BEInfo.Cbo_EndEarningPeriod.additem(oCommPer:Fields(""):VALUE)
oCommPer:MOVENEXT()
ENDDO
ENDIF
oCommPer:CLOSE()
* Llena el combo de monedas para la busqueda de cheques generados
oCurrencies := CreateObject("ADODB.Recordset")
oCurrencies:Open("usp_HMG_Currencies", cn, adOpenDynamic, adLockOptimistic)
IF oCurrencies:RecordCount = 0
MsgInfo("No hay monedas que mostrar")
ELSE
Frm_BEInfo.Cbo_CurrencyEarning.DeleteAllItems
oCurrencies:MoveFirst()
DO WHILE !oCurrencies:EOF()
Frm_BEInfo.Cbo_CurrencyEarning.additem(oCurrencies:Fields("Currency"):VALUE)
oCurrencies:MoveNext()
ENDDO
oCurrencies:CLOSE()
ENDIF
* Llena los datos Generales de BE
LsRSBEAddress := "usp_HMG_BEAddress &LnDin"
oGetBEInfo:Open(LsRSBEAddress, cn, adOpenDynamic, adLockOptimistic)
IF oGetBEInfo:RecordCount = 0
MsgInfo("Este DIN no tiene ninguna dirección")
ELSE
oGetBEInfo:MoveFirst()
DO WHILE !oGetBEInfo:EOF()
GnAddressTy := oGetBEInfo:Fields("AddressTy"):VALUE
IF GnAddressTy = 0
Frm_BEInfo.Edit_MailingAddress.Value := oGetBEInfo:Fields("Address1"):VALUE+CORTEL+;
oGetBEInfo:Fields("Address2"):VALUE+CORTEL+;
oGetBEInfo:Fields("Address3"):VALUE+CORTEL+;
ALLTRIM(oGetBEInfo:Fields("City"):VALUE)+","+ALLTRIM(oGetBEInfo:Fields("State"):VALUE)+CORTEL+;
ALLTRIM(oGetBEInfo:Fields("CountryCd"):VALUE)+" CP "+ALLTRIM(oGetBEInfo:Fields("Zip"):VALUE)+CORTEL+;
"E-Mail: "+GsEMailAddrAfiliate
ELSE
Frm_BEInfo.Edit_ShippingAddress.Value := oGetBEInfo:Fields("Address1"):VALUE+CORTEL+;
oGetBEInfo:Fields("Address2"):VALUE+CORTEL+;
oGetBEInfo:Fields("Address3"):VALUE+CORTEL+;
ALLTRIM(oGetBEInfo:Fields("City"):VALUE)+","+ALLTRIM(oGetBEInfo:Fields("State"):VALUE)+CORTEL+;
ALLTRIM(oGetBEInfo:Fields("CountryCd"):VALUE)+" CP "+ALLTRIM(oGetBEInfo:Fields("Zip"):VALUE)+CORTEL+;
"E-Mail: "+GsEMailAddrAfiliate
ENDIF
oGetBEInfo:MoveNext()
ENDDO
ENDIF
oGetBEInfo:CLOSE()
* Llena el grid con los teléfonos
LsRSBEPhone := "usp_HMG_BEPhones &LnDin"
oGetBEInfo:OPEN(LsRSBEPhone, cn, adOpenDynamic, adLockOptimistic)
IF oGetBEInfo:RecordCount =0
MsgInfo("Este DIN no tiene ningún teléfono")
ELSE
oGetBEInfo:MOVEFIRST()
DO WHILE !oGetBEInfo:EOF()
Frm_BEInfo.Grd_BEPhone.AddItem ({ oGetBEInfo:Fields("Descr"):VALUE,oGetBEInfo:Fields("Phone"):VALUE})
oGetBEInfo:MOVENEXT()
ENDDO
ENDIF
oGetBEInfo:CLOSE()
* Lleno el grid con sus patrocinadores (UpLine)
LsRSMyUpLine := "usp_HMG_MyUpLine &LnDin"
oGetBEInfo:OPEN(LsRSMyUpLine, cn, adOpenDynamic, adLockOptimistic)
IF oGetBEInfo:RecordCount = 0
MsgInfo("Ese DIN no tiene ascendencia")
ELSE
oGetBEInfo:MOVEFIRST()
DO WHILE !oGetBEInfo:EOF()
Frm_BEInfo.Grd_UpLine.AddItem ({ ALLTRIM(STR(oGetBEInfo:Fields("ULBE"):VALUE)),+;
oGetBEInfo:Fields("Descr"):VALUE,+;
oGetBEInfo:Fields("Approval"):Value,+;
oGetBEInfo:Fields("Reason"):Value })
oGetBEInfo:MOVENEXT()
ENDDO
ENDIF
/* Llena el combo de Paises para el tab de MISCELANEOS */
oCountry:Open("usp_HMG_Countries", cn, adOpenDynamic, adLockOptimistic)
IF oCountry:RecordCount > 0
oCountry:MoveFirst()
DO WHILE !oCountry:EOF()
Frm_BEInfo.Cbo_CriteriaCountryCd.additem(oCountry:Fields("CountryName"):VALUE)
oCountry:MoveNext()
ENDDO
oCountry:Close()
ENDIF
oGetBEInfo:CLOSE()
Wait Clear
CursorArrow()
* Revisa si el usuario tiene acceso a ver información general del DIN.
*IF !CheckAccess()
* Frm_BEInfo.Btn_Exit.SetFocus
* RETURN
*ENDIF
RETURN
Si tienes alguna duda con gusto puedo ayudarte en lo poco que se. (que no se mucho)
C o r d i a l m e n t e ,
Jorge Posadas Ch.
Director General.
http://posoft.mx
Saudações,
Itamar M. Lins Jr.