Executando Store Procedure MSSQL Via ADO

Forum sobre SQL.

Moderador: Moderadores

Avatar do usuário
Itamar M. Lins Jr.
Administrador
Administrador
Mensagens: 7928
Registrado em: 30 Mai 2007 11:31
Localização: Ilheus Bahia
Curtiu: 1 vez

Executando Store Procedure MSSQL Via ADO

Mensagem por Itamar M. Lins Jr. »

Guardando aqui esse exemplo.

Código: Selecionar todos

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!

Código: Selecionar todos

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.
Saudações,
Itamar M. Lins Jr.
Responder