FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin para Harbour/xHarbour SQL Server
Posts: 115
Joined: Sat Mar 07, 2009 09:36 PM
SQL Server
Posted: Fri Sep 23, 2011 03:10 PM

Buenos D铆as Foro: Por favor estoy desarrollando un sistema para muchas maquinas y el sistema anterior trabaja con bases de datos tipo mdb y necesitar铆a algun ejemplo si son tan amables de como crear, abrir, etc con bases tipo SQL SERVER. desde ya se agradece. Si alguien cree que debo abonar los ejemplos que me pase los precios a mi correo juanca252@yahoo.com.ar ... tengo fwh612 t bcc55.

Posts: 1364
Joined: Wed Jun 21, 2006 12:39 AM
Re: SQL Server
Posted: Fri Sep 23, 2011 04:50 PM

Puedes usar ado para comunicarte con el motor. Es f谩cil y pr谩ctico y no necesitas ninguna utilidad para trabajar con motores SQL.

Saludos

Posts: 582
Joined: Fri Oct 07, 2005 02:17 PM
Re: SQL Server
Posted: Fri Sep 23, 2011 05:43 PM

Tambien tienes una opcion pago SQLRDD que comercializa la gente de xharbour.com tienen una opcion para Borland C 5.5, Yo la he robado, y funciona Ok, es mas en el foro Alfredo Artega hasta donde lei tiene sus sistemas trabajando con esta libreria y le va Ok.

Enrrique Vertiz Pitta

Lima-Peru

xHb 1.23.1026X, Fwh 25.01, BCC74, MySQL 8.0.X, SQLLIB 1.9m
Posts: 364
Joined: Tue Oct 25, 2005 07:06 PM
Re: SQL Server
Posted: Fri Sep 23, 2011 05:53 PM

como asi que la has robado?, esperamos todos sea un error de teclado y que te falto la "P" jajaja

Software especializado para oficinas contables con grandes volumenes de Informacion
Impresion de todos los formularios del Seniat, Dian

alex_patino74@hotmail.com
whatsapp 57+3214777217
Posts: 582
Joined: Fri Oct 07, 2005 02:17 PM
Re: SQL Server
Posted: Fri Sep 23, 2011 06:00 PM

Efectivamente se quedo la "P" atracada :-)

Enrrique Vertiz Pitta

Lima-Peru

xHb 1.23.1026X, Fwh 25.01, BCC74, MySQL 8.0.X, SQLLIB 1.9m
Posts: 105
Joined: Thu Oct 20, 2005 12:29 PM
Re: SQL Server
Posted: Fri Sep 23, 2011 11:42 PM
Yo ya he hecho 2 aplicaciones usando solo harbour y fivewin (sin usar nada mas), debes conocer un poco de lenguaje sql.

yo trabajo mucho con stored procedures y funciones del lado del servidor.

por ejemplo debes olvidarte de manejar las tablas como si fueran un archivo dbf, la arquitectura es distinta aunque ya pasaste de dbf a mdb y ya debes saber usar querys.
primero descargas sqlexpress desde la pagina de microsoft y lo instalas.
segundo revisa si tienes instalado el sql native client, porque ese es el driver que uso en el ejemplo (si no lo instalo el sqlexpress lo puedes bajar desde la web de microsoft)
por ultimo usas estas 2 funciones en tus programas estas son las funciones que uso:
Code (fw): Select all Collapse
function main()
Local oAdo := ADOConnector()
Local oRs  := ADORecordSet( oAdo, "SELECT * FROM itemfac")

xbrowse( oRs )

Return nil


Function ADOConnector()

   Local cStr     := "Driver={SQL Native Client};database=basededatos;server=localhost;user id=sa;password=123"  
   Local oReturn  := tOleAuto():New("ADODB.connection")

   oReturn:ConnectionSTring  := cStr

   try
      oReturn:Open()
   catch
      oReturn := nil
      msginfo( 'Error conectando con el servidor' )
   end try

Return oReturn

Function ADORecordSet( oConnect, cSql )
   Local oRs
   Local cError := "No se ha podido crear el objeto RECORDSET !"

   try

      oRs := CreateObject("ADODB.RecordSet")
      oRs:CursorLocation  := 3
      oRs:LockType        := 4
      oRs:ActiveConnection:= oConnect
      oRs:source := cSql

      oRs:Open()

   catch oerror

      //MsgStop( "Error construyendo recordset (ADO)" + CRLF + cSql, cError )
      memoedit( cSql ) //uso memoedit para en caso de un error con la sintaxis copio y pego en el sql management studio del servidor y lo pruebo

   end try

Return oRS
Posts: 105
Joined: Thu Oct 20, 2005 12:29 PM
Re: SQL Server
Posted: Fri Sep 23, 2011 11:47 PM

Disculpa no habia visto que usa 6.12, esto no te va a servir, si quieres hacer algo moderno y profesional vas a tener rascarte el bolsillo, el salto es demasiado grande yo uso 11.01 y ya estoy en proceso de comprar la nueva version de fw (es la mejor inversion que he hecho).

Posts: 132
Joined: Sun Oct 23, 2005 04:09 PM
Re: SQL Server
Posted: Tue Apr 10, 2012 04:55 PM

Hola Simon!

Veo que usas ado para tus sistemas, estoy empezando a migrar mis aplicaciones a MySql, podrias proporcionarme un ejemplo basico de como le hiciste.

Saludos y gracias de antemano

Posts: 1818
Joined: Wed Oct 26, 2005 02:49 PM
Re: SQL Server
Posted: Wed Apr 11, 2012 09:52 PM
Amigo aqui un ejemplo con altas bajas y modificaciones con ADO, espero te sirva

Code (fw): Select all Collapse
**********************************************************
* PROGRAMA DE INVENTARIOS Y COSTOS DE PRODUCCION EN MYSQL*
* Modulo: Cat谩logo de Bodegas聽 聽 聽 聽 聽 聽 聽 聽 聽 聽*
* Inicio: 06 de Abril de 2006聽 聽聽 聽 聽 聽 聽 聽 聽 聽聽 *
* Actual: 19 de Febrero de 2008聽聽 聽 聽 聽 聽 聽 聽 聽聽 *
**********************************************************
#include "fivewin.ch"
#include "xbrowse.ch"
#include "report.ch"
#include "Ado.ch"

pBodegas()

********************
*Catalogo de Bodegas
********************
PROC pBodegas()

LOCAL aCol:={0,0},oCuadro
oLamcla:oC1vg1:=space(100)
oLamcla:vOrden:="b_nombre"
oLamcla:oTimpr:=1

oVar 聽 := "SELECT * from "+oLamcla:tBode+" ORDER BY "+alltrim(oLamcla:vOrden)
TRY
聽 oLamcla:oRsBodega:=tOleAuto():New("ADODB.RecordSet")
CATCH oError
聽 MsgStop( "No se ha podido crear el RECORDSET !","Error de Datos" )
END

oLamcla:oRsBodega:CursorLocation 聽:= adUseClient //adUseServer
oLamcla:oRsBodega:LockType 聽 聽 聽 聽:= adLockOptimistic
oLamcla:oRsBodega:CursorType 聽 聽 聽:= adOpenKeyset
oLamcla:oRsBodega:Source 聽 聽 聽 聽 聽:= oVar
oLamcla:oRsBodega:ActiveConnection( oLamcla:oServer )
TRY
聽 oLamcla:oRsBodega:Open()
CATCH oError
聽 MsgStop( "No se ha podido ejecutar el comando !", "Error de Datos" )
END

DEFINE BRUSH oFondo FILE ".\res\res_403.BMP"
DEFINE DIALOG oCuadro RESOURCE "orMedida" ICON "#8001" TRANSPARENT BRUSH oFondo

聽 REDEFINE BUTTONBMP Btn_Limp ID 4003 OF oCuadro BITMAP "Blimpi2" TOOLTIP oLamcla:mTfil ACTION pBusBod(oLamcla:oC1vg1:=space(100))
聽 REDEFINE GET oC1og1 VAR oLamcla:oC1vg1 ID 4002 OF oCuadro UPDATE VALID(pBusBod(),.T.)

聽 oLamcla:oBrwBode := TXBrowse():New( oCuadro )
聽 oLamcla:oBrwBode:nMarqueeStyle 聽 聽 聽 := MARQSTYLE_HIGHLROW
聽 oLamcla:oBrwBode:nColDividerStyle 聽 聽:= LINESTYLE_RAISED
聽 oLamcla:oBrwBode:nHeaderLines 聽 聽 聽 聽:= 1
聽 oLamcla:oBrwBode:lColDividerComplete := .t.
聽 oLamcla:oBrwBode:lRecordSelector 聽 聽 := .t.
聽 oLamcla:oBrwBode:bClrSel 聽聽 聽 聽 聽:= {|| { CLR_BLACK,oLamcla:cClr7 } }
聽 oLamcla:oBrwBode:bClrStd 聽聽 聽 聽 聽:= {|| IF( (oLamcla:oRsBodega:AbsolutePosition()%2)==0,{CLR_BLACK,oLamcla:cClr2},{CLR_BLACK,oLamcla:cClr1} ) }
聽 oLamcla:oBrwBode:bClrSelFocus 聽 聽 聽 聽:= {|| { CLR_WHITE,RGB(147,160,112) } }

聽 aCol[ 1] 聽 聽 聽 聽 聽 聽 聽 聽 聽 := oLamcla:oBrwBode:AddCol()
聽 aCol[ 1]:bStrData 聽 聽 聽 聽 聽:= { || If( oLamcla:oRsBodega:Eof, Space( nWidth ), cValtoChar( oLamcla:oRsBodega:Fields( "b_bodega" ):Value ) ) }
聽 aCol[ 1]:cHeader 聽 聽 聽 聽 聽 聽:= "Codigo"
聽 aCol[ 1]:nHeadStrAlign 聽 聽 := AL_LEFT
聽 aCol[ 1]:nDataStrAlign 聽 聽 := AL_LEFT
聽 aCol[ 1]:nWidth 聽 聽 聽 聽 聽 聽:= 80

聽 aCol[ 2] 聽 聽 聽 聽 聽 聽 聽 聽 聽 := oLamcla:oBrwBode:AddCol()
聽 aCol[ 2]:bStrData 聽 聽 聽 聽 聽:= { || If( oLamcla:oRsBodega:Eof, Space( nWidth ), cValtoChar( oLamcla:oRsBodega:Fields( "b_nombre" ):Value ) ) }
聽 aCol[ 2]:cHeader 聽 聽 聽 聽 聽 聽:= "Nombre"
聽 aCol[ 2]:nHeadStrAlign 聽 聽 := AL_LEFT
聽 aCol[ 2]:nDataStrAlign 聽 聽 := AL_LEFT
聽 aCol[ 2]:nWidth 聽 聽 聽 聽 聽 聽:= 225

聽 oLamcla:oBrwBode:SetADO( oLamcla:oRsBodega )
聽 oLamcla:oBrwBode:CreateFromResource( 102 )

聽 oCuadro:cTitle 聽 := "Tabla de Bodegas"
聽 oCuadro:bKeyDown := {|nKey|iif(nKey == 114,(oLamcla:vgraba:=.t.,oLamcla:autoriza(64)),(iif(nKey == 115,(oLamcla:vgraba:=.f.,oLamcla:autoriza(65)),(iif(nKey == 116,(oLamcla:autoriza(66)),(""))))))}

ACTIVATE DIALOG oCuadro NOWAIT On Init (Centra( oCuadro ),oCuadro:refresh(),BarraBod( oCuadro )) CENTERED


**************************************
*CREA LA BARRA DE HERRAMIENTAS BODEGAS
**************************************
FUNCTION BarraBod( oCuadro )
LOCAL oBar,oBtn,oCodigo,oNombre

MENU oOrdTal POPUP 2007
聽 MENUITEM oCodigo PROMPT "C贸digo" ACTION (oCodigo:SetCheck( .T. ),oNombre:SetCheck( .F. ),oLamcla:vOrden:="b_bodega",pOrdBod())
聽 MENUITEM oNombre PROMPT "Nombre" ACTION (oCodigo:SetCheck( .F. ),oNombre:SetCheck( .T. ),oLamcla:vOrden:="b_nombre",pOrdBod())
ENDMENU

MENU oPopup POPUP 2007
聽 MENUITEM "Configurar Impresora" ACTION PrinterSetup()
聽 SEPARATOR
聽 MENUITEM "Generar reporte a impresora" ACTION (oLamcla:oTimpr:=1,oLamcla:autoriza(67))
聽 MENUITEM "Generar reporte a Excel" 聽ACTION (oLamcla:oTimpr:=2,oLamcla:autoriza(67))
ENDMENU

oCodigo:SetCheck( .T. )
oNombre:SetCheck( .F. )
DEFINE BUTTONBAR oBar OF oCuadro SIZE 60,60 2007
DEFINE BUTTON OF oBar RESOURCE "#8016" PROMPT "Agregar" TOOLTIP "Agregar Registro - F3" ACTION (oLamcla:vgraba:=.t.,oLamcla:autoriza(64))
DEFINE BUTTON OF oBar RESOURCE "#8014" PROMPT "Modificar" TOOLTIP "Modificar Registro - F4" ACTION (oLamcla:vgraba:=.f.,oLamcla:autoriza(65))
DEFINE BUTTON OF oBar RESOURCE "#8017" PROMPT "Borrar" TOOLTIP "Borrar Registro - F5" ACTION oLamcla:autoriza(66)
DEFINE BUTTON OF oBar RESOURCE "#8012" PROMPT "Imprimir" TOOLTIP "Imprimir Listado" MENU oPopup ACTION (oLamcla:oTimpr:=1,oLamcla:autoriza(67))
DEFINE BUTTON OF oBar RESOURCE "#8019" PROMPT "Ordenar" TOOLTIP "Organizar Informaci贸n" MENU oOrdTal ACTION (oCodigo:SetCheck( .F. ),oNombre:SetCheck( .T. ),oLamcla:vOrden:="b_nombre",pOrdBod())
DEFINE BUTTON OF oBar RESOURCE "#8013" PROMPT "Cerrar" TOOLTIP "Cerra Ventana" ACTION (oLamcla:oRsBodega:Close(),oCuadro:End())
oBar:GoTop()

RETURN .T.

****************
*Agregar Bodegas
****************
PROC pAgreBod()

oB2vg1:=space(3)
oB2vg2:=space(50)
oB2vg3:=space(50)
oB2vg4:=space(20)

DEFINE BRUSH oFondo FILE ".\res\res_403.BMP"
DEFINE DIALOG oCuadr1 RESOURCE "orBodeg1" ICON "#8001" TRANSPARENT BRUSH oFondo

聽REDEFINE BUTTONBMP Btn_Grab ID 11 OF oCuadr1 BITMAP "Bgrab" ACTION pValiBod()
聽REDEFINE BUTTONBMP Btn_Canc ID 10 OF oCuadr1 BITMAP "Bcanc" ACTION oCuadr1:End()

聽REDEFINE GET oB2og1 VAR oB2vg1 ID 4001 OF oCuadr1
聽REDEFINE GET oB2og2 VAR oB2vg2 ID 4003 OF oCuadr1
聽REDEFINE GET oB2og3 VAR oB2vg3 ID 4004 OF oCuadr1
聽REDEFINE GET oB2og4 VAR oB2vg4 ID 4006 OF oCuadr1

聽oCuadr1:cTitle := "Agregar Registro Bodegas"

ACTIVATE DIALOG oCuadr1 CENTERED

****************
*Validar Bodegas
****************
PROC pValiBod()

IF Empty(oB2vg1)
聽 MsgStop("Digite Codigo Bodega",oLamcla:mImco)
聽 oB2og1:setfocus()
ELSE
聽 IF Empty(oB2vg2)
聽 聽 MsgStop("Digite Nombre Bodega",oLamcla:mImco)
聽 聽 oB2og2:setfocus()
聽 ELSE
聽 聽 IF oLamcla:vgraba=.t.
聽 聽 聽 oVar:="SELECT * from " + oLamcla:tBode +" WHERE b_bodega='"+alltrim(oB2vg1)+"'"
聽 聽 聽 TRY
聽 聽 聽 聽 oConsBO := CreateObject("ADODB.Recordset")
聽 聽 聽 CATCH oError
聽 聽 聽 聽 MsgStop(oLamcla:mErnt,oLamcla:mErco)
聽 聽 聽 聽 RETURN(.F.)
聽 聽 聽 END
聽 聽 聽 oConsBO:CursorLocation 聽:= adUseClient //adUseServer
聽 聽 聽 oConsBO:LockType 聽 聽 聽 聽:= adLockOptimistic
聽 聽 聽 oConsBO:CursorType 聽 聽 聽:= adOpenKeyset
聽 聽 聽 oConsBO:Source 聽 聽 聽 聽 聽:= oVar
聽 聽 聽 oConsBO:ActiveConnection( oLamcla:oServer )
聽 聽 聽 TRY
聽 聽 聽 聽 oConsBO:Open()
聽 聽 聽 CATCH oError
聽 聽 聽 聽 MsgStop(oLamcla:mComa,mDato)
聽 聽 聽 END
聽 聽 聽 nRegistros := oConsBO:RecordCount()

聽 聽 聽 IF nRegistros#0
聽 聽 聽 聽 oConsBO:MoveFirst()
聽 聽 聽 聽 vMedi:=oConsBO:Fields("b_bodega"):Value
聽 聽 聽 聽 vNomb:=oConsBO:Fields("b_nombre"):Value
聽 聽 聽 聽 oConsBO:close()
聽 聽 聽 聽 MsgAlert("Bodega Existente:"+CRLF+;
聽 聽 聽 聽 聽 聽 聽 聽 聽"C贸digo:->"+alltrim(vMedi)+CRLF+;
聽 聽 聽 聽 聽 聽 聽"Nombre:->"+alltrim(vNomb)+CRLF+;
聽 聽 聽 聽 聽 聽 聽"Digite Nuevamente",oLamcla:mDato)
聽 聽 聽 聽 oB2og1:setfocus()
聽 聽 聽 ELSE
聽 聽 聽 聽 oConsBO:close()
聽 聽 pGrabBod()
聽 聽 聽 ENDIF

聽 聽 ELSEIF oLamcla:vgraba=.f.
聽 聽 聽 pGrabBod()
聽 聽 ENDIF
聽 ENDIF
ENDIF

************************************
*Graba los datos en la base de datos
************************************
PROC pGrabBod()

uFec:=date()
uTim:=subs(time(),1,8)
uCou:=alltrim(oLamcla:vCous)

IF oLamcla:vgraba=.t.
聽 oLamcla:oRsBodega:Addnew()
聽 oLamcla:oRsBodega:Fields("b_bodega"):value := alltrim(oB2vg1)
聽 oLamcla:oRsBodega:Fields("b_nombre"):value := alltrim(oB2vg2)
聽 oLamcla:oRsBodega:Fields("b_direcc"):value := alltrim(oB2vg3)
聽 oLamcla:oRsBodega:Fields("b_telefo"):value := alltrim(oB2vg4)
聽 oLamcla:oRsBodega:Fields("umovim"):value := 0
聽 oLamcla:oRsBodega:Fields("usuari"):value := uCou
聽 oLamcla:oRsBodega:Fields("ufecha"):value := uFec
聽 oLamcla:oRsBodega:Fields("uhoras"):value := uTim
聽 oLamcla:oRsBodega:Update()
ELSE
聽 oLamcla:oRsBodega:Fields("b_bodega"):value := alltrim(oB2vg1)
聽 oLamcla:oRsBodega:Fields("b_nombre"):value := alltrim(oB2vg2)
聽 oLamcla:oRsBodega:Fields("b_direcc"):value := alltrim(oB2vg3)
聽 oLamcla:oRsBodega:Fields("b_telefo"):value := alltrim(oB2vg4)
聽 oLamcla:oRsBodega:Fields("usuari"):value := uCou
聽 oLamcla:oRsBodega:Fields("ufecha"):value := uFec
聽 oLamcla:oRsBodega:Fields("uhoras"):value := uTim
聽 oLamcla:oRsBodega:Update()
ENDIF
oLamcla:oRsBodega:Requery()
oLamcla:oBrwBode:Refresh()
oCuadr1:end()


******************
*Modificar Bodegas
******************
PROC pModiBod()

tama:=50-len(oLamcla:oRsBodega:Fields("b_nombre"):Value)
tamb:=50-len(oLamcla:oRsBodega:Fields("b_direcc"):Value)
tamc:=20-len(oLamcla:oRsBodega:Fields("b_telefo"):Value)
oB2vg1:=oLamcla:oRsBodega:Fields("b_bodega"):Value
oB2vg2:=oLamcla:oRsBodega:Fields("b_nombre"):Value+space(tama)
oB2vg3:=oLamcla:oRsBodega:Fields("b_direcc"):Value+space(tamb)
oB2vg4:=oLamcla:oRsBodega:Fields("b_telefo"):Value+space(tamc)

DEFINE BRUSH oFondo FILE ".\res\res_403.BMP"
DEFINE DIALOG oCuadr1 RESOURCE "orBodeg1" ICON "#8001" TRANSPARENT BRUSH oFondo

聽REDEFINE BUTTONBMP Btn_Grab ID 11 OF oCuadr1 BITMAP "Bgrab" ACTION pValiBod()
聽REDEFINE BUTTONBMP Btn_Canc ID 10 OF oCuadr1 BITMAP "Bcanc" ACTION oCuadr1:End()

聽REDEFINE GET oB2og1 VAR oB2vg1 ID 4001 OF oCuadr1
聽REDEFINE GET oB2og2 VAR oB2vg2 ID 4003 OF oCuadr1
聽REDEFINE GET oB2og3 VAR oB2vg3 ID 4004 OF oCuadr1
聽REDEFINE GET oB2og4 VAR oB2vg4 ID 4006 OF oCuadr1

聽oB2og1:disable()
聽oCuadr1:cTitle := "Modificar Registro Tabla Bodegas"

ACTIVATE DIALOG oCuadr1 CENTERED

****************
*Borrar Registro
****************
PROC pBorrBod()
nRegistros := oLamcla:oRsBodega:RecordCount()
IF nRegistros#0
聽 oM2vg1:=oLamcla:oRsBodega:Fields("b_bodega"):Value
聽 oM2vg2:=oLamcla:oRsBodega:Fields("b_nombre"):Value
聽 IF MSGNOYES("Confirma Eliminar Bodega"+CRLF+;
聽 聽 聽 聽 聽 聽 聽 "C贸digo:->"+alltrim(oM2vg1)+CRLF+;
聽 聽 聽 聽 聽 "Nombre:->"+alltrim(oM2vg2),oLamcla:mCoto)
聽 聽 oLamcla:oRsBodega:Delete()
聽 聽 oLamcla:oRsBodega:Requery()
聽 聽 oLamcla:oBrwBode:Refresh()
聽 ENDIF
ENDIF

************************************
*hace la busqueda global en la tabla
************************************
PROC pBusBod()
IF Empty(oLamcla:oC1vg1)
聽 聽 oLamcla:oRsBodega:Filter := ""
ELSE
聽 oLamcla:oRsBodega:Filter := oLamcla:vOrden+" LIKE '%" + alltrim(oLamcla:oC1vg1) + "%'"
聽 IF oLamcla:oRsBodega:EOF .and. oLamcla:oRsBodega:BOF
聽 聽 MsgStop( oLamcla:mBusc,oLamcla:mDato)
聽 聽 oLamcla:oRsBodega:Filter := ""
聽 ENDIF
ENDIF
oLamcla:oRsBodega:REQUERY()
oLamcla:oBrwBode:Refresh()
RETURN( NIL )

******************
*orden de la tabla
******************
PROC pOrdBod()
oLamcla:oRsBodega:Sort := oLamcla:vOrden
oLamcla:oRsBodega:REQUERY()
oLamcla:oBrwBode:Refresh()

*********************
*Imprimir Informaci贸n
*********************
PROC pImprBod()
nRegistros := oLamcla:oRsBodega:RecordCount()
IF nRegistros#0
聽 IF (oLamcla:oTimpr=1,pIPBod(),pIXBod())
ELSE
聽 Msginfo(oLamcla:mErim,oLamcla:mDato)
ENDIF
********************
*IMPRIME EN PANTALLA
********************
PROC pIPBod()
local oReport,nLinea := 1, nHasta := oLamcla:oRsBodega:RECORDCOUNT(), ;
nBookMark := oLamcla:oRsBodega:BookMark
oLamcla:oRsBodega:MoveFirst()
uFec:=dtoc(date())
uTim:=subs(time(),1,8)

REPORT oReport CAPTION "TABLA DE BODEGAS" 聽HEADER oLamcla:vGnom,"NIT:"+lymatrim(oLamcla:vGnit)+"-"+lymatrim(oLamcla:vGdig),"TABLA DE BODEGAS","P谩gina N煤mero: " + STR (oReport:nPage, 3),"Fecha Reporte: "+uFec+" - Hora: "+uTim;
CENTER 聽PREVIEW
聽 COLUMN TITLE "C贸digo" DATA oLamcla:oRsBodega:Fields("b_bodega"):value SIZE 9
聽 COLUMN TITLE "Nombre" DATA oLamcla:oRsBodega:Fields("b_nombre"):value SIZE 25
聽 COLUMN TITLE "Direcci贸n" DATA oLamcla:oRsBodega:Fields("b_direcc"):value SIZE 25
聽 COLUMN TITLE "Tel茅fono" DATA oLamcla:oRsBodega:Fields("b_telefo"):value SIZE 15
END REPORT

oReport:bWhile := { || nLinea <= nHasta }
oReport:oDevice:SetPortrait()
oReport:oDevice:lPrvModal := .T.
IF oReport:lCreated
聽 oReport:bSkip := { | | nLinea++, oLamcla:oRsBodega:MoveNext() }
ENDIF

ACTIVATE REPORT oReport ;
ON END oLamcla:oRsBodega:BookMark := nBookMark
oLamcla:oRsBodega:REQUERY()
oLamcla:oBrwBode:Refresh()


********************
*IMPRIME EN EXCEL
********************
PROC pIXBod()

LOCAL fila:=1
LOCAL vCod:="CODIGO"
LOCAL vNom:="NOMBRE"
LOCAL vDir:="DIRECCION"
LOCAL vTel:="TELEFONO"

Gvtitu:="TABLA DE BODEGAS"
oXls 聽 聽:= Txls():New( ".\xls\Bodegas.xls",, .T. )

oXls:Width( 01 , 10 )
oXls:Width( 02 , 50 )
oXls:Width( 03 , 50 )
oXls:Width( 04 , 20 )

oXls:Say( fila, 01, Gvtitu ,,,,,1 )
++fila

oXls:Say( fila, 01, vCod ,,,,,1 )
oXls:Say( fila, 02, vNom ,,,,,1 )
oXls:Say( fila, 03, vDir ,,,,,1 )
oXls:Say( fila, 04, vTel ,,,,,1 )
++fila

oLamcla:oRsBodega:MoveFirst()
Do While !oLamcla:oRsBodega:Eof()
聽 oXls:Say( fila, 01, oLamcla:oRsBodega:Fields( "b_bodega" ):Value ,,,,,0 )
聽 oXls:Say( fila, 02, oLamcla:oRsBodega:Fields( "b_nombre" ):Value ,,,,,0 )
聽 oXls:Say( fila, 03, oLamcla:oRsBodega:Fields( "b_direcc" ):Value ,,,,,0 )
聽 oXls:Say( fila, 04, oLamcla:oRsBodega:Fields( "b_telefo" ):Value ,,,,,0 )
聽 oLamcla:oRsBodega:MoveNext()
聽 ++fila
EndDo

oXls:End()

oLamcla:oRsBodega:REQUERY()
oLamcla:oBrwBode:Refresh()

SHELLEXECUTE(,"OPEN",".\xls\Bodegas.xls",,,)


Aqu铆 el trozo de c贸digo que hace la conexi贸n con la db

Code (fw): Select all Collapse
***************************************
*REALIZA CON CONEXION PARA LOS PERMISOS
***************************************
FUNCTION ConPerm()

TRY
聽 oLamcla:oConPer:=toleauto():new("adodb.connection")
CATCH oError
聽 MsgStop( "No se ha podido crear la conexi贸n !", "Error de datos")
END

oLamcla:oConPer:ConnectionString:="Driver={MySQL ODBC 3.51 Driver};Server=localhost;Port=3306;User=root;Password=Pass;Option=3;"
TRY
聽 oLamcla:oConPer:Open()
CATCH oError
聽 MsgStop( "No pude abrir la conexi贸n para crear las tablas !", "Error de datos")
END

cCommandSql := "USE "+oLamcla:cEmpDBda
TRY
聽 oLamcla:oConPer:Execute(cCommandSql)
CATCH oError
聽 IF MSGNOYES(oLamcla:mEdb1+CRLF+oLamcla:mEdb2+CRLF+oLamcla:mEdb3,oLamcla:mErco)
聽 聽 cCommandSql := "CREATE DATABASE IF NOT EXISTS "+oLamcla:cEmpDBda
聽 聽 TRY
聽 聽 聽 oLamcla:oConPer:Execute(cCommandSql)
聽 聽 CATCH oError
聽 聽 聽 聽MSGINFO(oLamcla:mEdb4,oLamcla:mErco)
聽 聽 END
聽 ELSE
聽 聽 QUIT
聽 ENDIF
END
Saludos
LEANDRO AREVALO
Bogot谩 (Colombia)
https://hymlyma.com
https://hymplus.com/
leandroalfonso111@gmail.com
leandroalfonso111@hotmail.com

[ Turbo Incremental Link64 6.98 Embarcadero 7.70 ] [ FiveWin 25.01 ] [ xHarbour 64 bits) ]
Posts: 132
Joined: Sun Oct 23, 2005 04:09 PM
Re: SQL Server
Posted: Thu Apr 12, 2012 10:33 PM

Agradezco mucho tu aporte, Leandro

voy a probarlo, me llevar茅 un rato en esto

Saludos
desde M茅xico

Continue the discussion