Como Usar La Sqldata
Como Usar La Sqldata
dll
Descripcin
La sqldata.dll es una clase desarrollada en Visual FoxPro 9.0 sp2 y ADO. Con esta clase es posible realizar conexiones al motor de base de datos sql server en sus
versiones 2000, 2005, 2008, 2008r2, 2012, 2014,2016.
Tambien mysql,mariadb,firebird,prosgreSQL,Visual Foxpro,Oracle otros servidores sql que tienen conector odbc y tambin oledb
para activar las conexiones remotas de una pc a otra pc servidor con windows y sql server de cualquier version
les dejo todas las versiones de los SQLNCLI.MSI de todas las versiones de SQL SERVER
van a notar que con distintos sqlncli.msi podran acceder igual a otras versiones de sql server
debern instalar en el cliente el conector odbc u oledb para el servidor sql que eligieron
Abriendo una consola como administrador deben registrar la clase con regsvr32.exe
para 32 bits copiar sqldata.dll a C:\windows\system32
y para 64 bits copiar sqldata.dll C:\Windows\SysWOW64\
Esta clase probada en distintas aplicaciones, resuelve los problemas que pueden ocurrir en las conexiones a servidores mediante internet, y facilita el desarrollo
de aplicaciones complejas.
Deben respetarse algunas pautas de diseo de las bases de datos para que la clase pueda realizar las operaciones de agregar, modificar y eliminar registros.
Pgina 1 de 12
Al agregar registros con APPEND BLANK debe seguirle un REPLACE de todos los campos fechas con .NULL. SQL no reconoce las fechas en blanco
Deben utilizarse rutinas de lectura y grabacin al servidor que involucran funciones de la sqldata y funciones nativas de Visual FoxPro. El usar las rutinas de
grabacin que se indican como ejemplo har que ADO recordset se reconecte en caso de haber cortes en internet.
Debido a que el cursor que se forma en la consulta a SQL es un cursoradapter, pueden usarse todas las funciones de Visual Foxpro relacionadas.
Licencia
Esta clase es libre y gratuita. Puede ser usada en aplicaciones comerciales. Para consultas o sugerencias enviar correo a [email protected].
1) Un campo identity con el nombre id (esto es obligatorio). A partir de la versin 12.01.0001 podran elegir el id key
2) Un campo uniqueidentifier con nombre ui marcada por rowguide y con valor predeterminado newid() (esto es opcional, pero ser til en caso de
querer realizar aplicaciones distribuidas). O ui char(38) para otros motores
3) Un campo timestamp con nombre ts (esto es opcional, pero ser til en caso de querer realizar aplicaciones distribuidas).
4) Los campos datetime (fechas) deben marcarse que permiten nulos.
5) Cualquier otro campo debe ser marcado como no nulo y con valor predeterminado.
Pgina 2 de 12
desarrollo.
Psqlcadena. osqldata.psqlcadena(objeto screen,"numero o osqldata.psqlcadena(_screen,"1", "sql2005",
Establece la cadena nombre de conexion", "versin del servidor "pcgerman\sqlexpress", "sa", "contrasea",
de conexin al (sqlauto,sql2000, sql2005, sql2008, sql2012, "spanish", "read uncommitted")
servidor SQL. sql2014,sql2016)", "direccin del
servidor\instancia", "usuario",
"contrasea", "lenguaje del servidor",
"mtodo de manejo de transacciones)
o
osqldata.psqlcadena(objeto screen,"numero o
nombre de conexion", "user",cadena de
conexin ado)
Psqlcomienzo. osqldata.psqlcomienzo(objeto screen,"numero osqldata.psqlcomienzo(_screen,"1")
Realiza la conexin o nombre de conexin")
al servidor si este
est desconectado.
Tambin verifica la
conexin y reconecta
en caso de fallas.
Psqlejecutar. IF USED("cursor") IF USED("clientes")
Realiza consultas y USE IN cursor USE IN clientes &&es necesario que el
comandos en el ENDIF cursor no exista antes de llamar a
servidor y trae el ocursor=CREATEOBJECT("cursoradapter") psqlejecutar
resultado a un osqldata.psqlejecutar(objeto screen,"numero ENDIF
cursor. o nombre de conexin", objeto entorno de oclientes=CREATEOBJECT("cursoradapter")
Conultag: trae el datos, objeto cursoradapter, "consultag, osqldata.psqlejecutar(_screen, "1",
cursor para ser consulta o comando", "cursor", _screen,oclientes, "consultag", "clientes",
grabado "basededatos.dbo.tabla", "select * from "fabrica.dbo.clientes", "select * from
posteriormente. basededatos.dbo.tabla") fabrica.dbo.clientes")
CURSORSETPROP("Buffering",3,"cursor") &&por CURSORSETPROP("Buffering",3,"clientes") &&por
defecto es buffering 5 defecto es buffering 5
Pgina 3 de 12
Psqlejecutar para IF USED("comando")
enviar comandos. USE IN comando &&es necesario que el
cursor no exista antes de llamar a
psqlejecutar
ENDIF
ocomando=CREATEOBJECT("cursoradapter")
osqldata.psqlejecutar(_screen, "1",
_screen,ocomando, "comando", "comando", "",
"set languaje 'spanish'")
IF USED("comando")
USE IN comando &&es necesario que el
cursor no exista despues de llamar a
psqlejecutar
ENDIF
Psqlejecutar para osqldata.psqlcomienzo(_screen,"2")
ejecutar
procedimientos osqldata.psqlparametros("inicializar")
almacenados osqldata.psqlparametros("agregar","@mult1","i",
"entrada",10,0,"10")
osqldata.psqlparametros("agregar","@mult2","f",
"entrada",10,2,"22,55")
osqldata.psqlparametros("agregar","@mult3","d",
"entrada",0,0,DTOC(DATE()))
osqldata.psqlparametros("agregar","@mult4","c",
"entrada",20,0,"hola mundo")
osqldata.psqlparametros("agregar","@mult5","t",
"entrada",0,0,TTOC(DATETIME()))
osqldata.psqlparametros("agregar","@result","i"
,"salida",10,0,"")
ocom=osqldata.psqlejecutar(_screen,"2",,,"proce
dimiento",,,"fabrica.dbo.sp_test")
MESSAGEBOX( osqldata.psqlparametros("resultado"
,"@result"))
osqldata.psqlparametros("finalizar")
osqldata.psqlfinal(_screen,"2")
Pgina 4 de 12
Psqlfinal. osqldata.psqlfinal(objeto screen,"numero o osqldata.psqlfinal(_screen,"1")
Cierra el bloque nombre de conexin")
abierto por
psqlcomienzo
Psqldesconectar. osqldata.psqldesconectar(objeto osqldata.psqldesconectar(_screen,"1")
Se desconecta del screen,"numero o nombre de conexin")
servidor.
Descargar entorno de REMOVEPROPERTY(objeto screen, REMOVEPROPERTY(_screen,"sqlconnection1")
la sqldata. "sqlconnectionconexion") REMOVEPROPERTY(_screen,"sqldata1")
REMOVEPROPERTY(objeto screen, REMOVEPROPERTY(_screen,"sqlconnection2")
"sqldataconexion") REMOVEPROPERTY(_screen,"sqldata2")
REMOVEPROPERTY(objeto screen, REMOVEPROPERTY(_screen,"vcadenaconexiones")
"vcadenaconexiones") REMOVEPROPERTY(_screen,"vcantidadconexiones")
REMOVEPROPERTY(objeto screen,
"vcantidadconexiones")
Pgina 5 de 12
Psqlgrabar. osqldata.psqlgrabar(objeto screen, "numero o TRY
Graba un cursor nombre de conexin", objeto del entorno de LOCAL osqldata as sqldata OF
obtenido con datos, "cursor") sqldata.sqldata
consultag SELECT clientes
TABLEUPDATE(.t.)
osqldata=CREATEOBJECT("sqldata.sqldata")
osqldata.psqlcomienzo(_screen,"1")
osqldata.psqlcomtran(_screen,"1")
osqldata.psqlgrabar(_screen, "1", _screen,
"clientes")
osqldata.psqlfintran(_screen,"1")
osqldata.psqlfinal(_screen,"1")
WAIT "Grabado." WINDOW NOWAIT
CATCH TO oerror
*deshace las transacciones activas
LOCAL osqldata as sqldata OF
sqldata.sqldata
osqldata=CREATEOBJECT("sqldata.sqldata")
osqldata.psqlerror(_screen)
MESSAGEBOX("Debido a un error no se
grabaron los cambios. Intente
nuevamente",16,"Atencin")
FINALLY
ENDTRY
Psqlestado. osqldata.psqlestado(objeto screen,"numero o IF osqldata.psqlestado(_screen,"1")=.f.
Se utiliza para nombre de conexin") MESSAGEBOX("Error al
verificar la conectarse",64,"Atencin")
conexin inicial al RETURN
servidor SQL ENDIF
Pgina 6 de 12
Psqlcomando. osqldata.psqlcomando(objeto screen,"numero o osqldata.psqlcomando(_screen,"1",set language
Envia comandos nombre de conexin",comando sql) spanish)
directamente al
server usando el ADO
connection
Psqlcomandoscon osqldata.psqlcomandoscon(objeto osqldata.psqlcomandoscon(_screen,"1","SET
Envia comndos al screen,"numero o nombre de XACT_ABORT ON")
conectarse al conexion","comando1;comando2;comando3")
servidor
Psqlcampoui retorna osqldata.psqlcampoui() osqldata.psqlcampoui()
un char(38) nico
Psqlcampoid retorna vid=osqldata.psqlcampoid(_screen,"1",_screen vid=osqldata.psqlcampoid(_screen,"1",_screen,"f
El id para un ui ,"fabrica.dbo.clientes",vuiultimo) abrica.dbo.clientes",vuiultimo)
determinado
Psqlcerrar abre la osqldata.psqlcerrar(_screen,"1","automatico" osqldata.psqlcerrar(_screen,"1","automatico")
conexin al server )
en psqlcomienzo y la
cierra en psqlfinal
Psqlinternet osqldata.psqlinternet(_screen,"1","automatic osqldata.psqlinternet(_screen,"1","automatico")
desconecta el cursor o")
del servidor y lo
reconecta cuando va
a grabar cambios
Psqltimer enviara un osqldata.psqltimer(_screen,"1") osqldata.psqltimer(_screen,"1")
comando al servidor
en un timer para
impedir que el
servidor desconecte
al usuario
*verificando la conexiones
IF osqldata.psqlestado(_screen,"1")=.f.
MESSAGEBOX("Error al conectarse",64,"Atencin")
RETURN
ENDIF
IF osqldata.psqlestado(_screen,"2")=.f.
Pgina 8 de 12
MESSAGEBOX("Error al conectarse",64,"Atencin")
RETURN
ENDIF
*lineas para traer un cursor con los datos seleccionados para posteriormente ser grabados los cambios (consultag)
LOCAL osqldata as sqldata OF sqldata.sqldata
osqldata=CREATEOBJECT("sqldata.sqldata")
IF USED("clientes")
USE IN clientes &&es necesario que el cursor no exista antes de llamar a psqlejecutar
ENDIF
oclientes=CREATEOBJECT("cursoradapter")
osqldata.psqlejecutar(_screen,"1",_screen,oclientes,"consultag","clientes","fabrica.dbo.clientes","select * from
fabrica.dbo.clientes")
CURSORSETPROP("Buffering",3,"clientes") &&por defecto es buffering 5
*el tercer parmetro corresponde al objeto formulario que contiene el entorno de datos puede ser (_screen, thisformset,
o thisform)
*solo cuando se trabaja con multiples sesiones de datos.
SELECT clientes
BROWSE
USE IN clientes &&es necesario que el cursor no exista antes de llamar a psqlejecutar
ENDIF
oclientes=CREATEOBJECT("cursoradapter")
osqldata.psqlejecutar(_screen,"1",_screen,oclientes,"consultag","clientes","fabrica.dbo.clientes","select * from
fabrica.dbo.clientes")
CURSORSETPROP("Buffering",3,"clientes") &&por defecto es buffering 5
SELECT clientes
BROWSE
*realizando consulta sobre la segunda conexin (consulta) para ser utilizado en vistas o estadisticas.
LOCAL osqldata as sqldata OF sqldata.sqldata
osqldata=CREATEOBJECT("sqldata.sqldata")
osqldata.psqlcomienzo(_screen,"2")
IF USED("clientes")
USE IN clientes &&es necesario que el cursor no exista antes de llamar a psqlejecutar
ENDIF
oclientes=CREATEOBJECT("cursoradapter")
osqldata.psqlejecutar(_screen,"2",_screen,oclientes,"consulta","clientes","","select * from fabrica.dbo.clientes where
id=1")
osqldata.psqlfinal(_screen,"2")
SELECT clientes
BROWSE
*cerrando el cursor
USE IN clientes
osqldata.psqlcomienzo(_screen,"2")
osqldata.psqlparametros("inicializar")
osqldata.psqlparametros("agregar","@mult1","i","entrada",10,0,"10")
osqldata.psqlparametros("agregar","@mult2","f","entrada",10,2,"22,55")
osqldata.psqlparametros("agregar","@mult3","d","entrada",0,0,DTOC(DATE()))
osqldata.psqlparametros("agregar","@mult4","c","entrada",20,0,"hola mundo")
Pgina 11 de 12
osqldata.psqlparametros("agregar","@mult5","t","entrada",0,0,TTOC(DATETIME()))
osqldata.psqlparametros("agregar","@result","i","salida",10,0,"")
osqldata.psqlejecutar(_screen,"2",,,"procedimiento",,,"fabrica.dbo.sp_test")
MESSAGEBOX( osqldata.psqlparametros("resultado","@result"))
osqldata.psqlparametros("finalizar")
osqldata.psqlfinal(_screen,"2")
*desconectando el servidor
LOCAL osqldata as sqldata OF sqldata.sqldata
osqldata=CREATEOBJECT("sqldata.sqldata")
osqldata.psqldesconectar(_screen,"1")
PROCEDURE PERROR
LOCAL osqldata as sqldata OF sqldata.sqldata
osqldata=CREATEOBJECT("sqldata.sqldata")
osqldata.psqlerror(_screen)
quit
Pgina 12 de 12