Descargar como doc, pdf o txt
Descargar como doc, pdf o txt
Está en la página 1de 12

Manual de referencia de la clase 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

No sirven los conectores .net

windows 2000,xp,vista,7,8,8.1,10,servidores 2000,2003,2008,2008r2,2012,2012r2,2016, 32 y 64 bits

para activar las conexiones remotas de una pc a otra pc servidor con windows y sql server de cualquier version

1 deben activar en el sql server , permitir conexiones remotas en el servidor


2 en cada pc cliente deben abrir el puerto 1433 TCP del Firewall de windows o del antivirus que usen
3 instalar en cada pc cliente el sqlncli.msi del sql server que estan utilizando 32 o 64 bits

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\

O para 32 y 64 bits copiar la sqldata.dll a c:\windows

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].

Diseada por Germn Fabricio Valdez

Diseo de las bases de datos

Las tablas que la base de datos contiene deben poseer.

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.

Puede verse la base de datos de ejemplo fabrica.

Detalle de cada mtodo de la sqldata.dll.

Nombre y descripcin Forma de uso Ejemplo


Crear instancia de LOCAL osqldata as sqldata OF sqldata.sqldata LOCAL osqldata as sqldata OF sqldata.sqldata
la clase. osqldata=CREATEOBJECT("sqldata.sqldata") osqldata=CREATEOBJECT("sqldata.sqldata")
Solo es necesario
una instancia al
principio de cada
modulo o mtodo.
Psqlcargar. Osqldataloadnum=CREATEOBJECT("custom") Osqldataload1=CREATEOBJECT("custom")
Crea todas las psqlcargar(objeto screen,"numero o nombre de psqlcargar(_screen,"1",osqldataload1)
propiedades y clases conexin",objeto custom)
necesarios para el
entorno de

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")

Psqlerror. osqldata.psqlerror(objeto screen) osqldata.psqlerror(_screen)


Rutina que deshace
las transacciones
abiertas en caso de
producirse un error
en el sistema. Debe
ir en el
procedimiento
llamado por ON ERROR

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

Psqlcomtran. osqldata.psqlcomtran(objeto screen,"numero o osqldata.psqlcomtran(_screen,"1")


Se utiliza para nombre de conexin")
iniciar una
transaccin. Es
necesaria para
psqlgrabar
Psqlfintran. osqldata.psqlfintran(objeto screen,"numero o osqldata.psqlfintran(_screen,"1")
Finaliza la nombre de conexin")
transaccin abierta
con psqlcomtran

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

Lea tambien instrucciones.txt t vea los ejemplos para cada servidor

Ejemplo de uso de todas las funciones.

*Las tablas de la base de datos debe contener un campo llamado ID (llave).


*Puede tener tambien campos UI (uniqueidentifier valor predeterminado newid()) y TS (timestamp).o char(38)
*Es importante que todos los campos tengan un valor predeterminado.
*Los campos fechas deben marcarse como nulas sin valor por defecto
*Debe respetarse las minusculas de la llamada a la clase.
*Especialmente diseada para conectarse va internet.
*Para registrar la clase usar regsvr32 c:\windows\qldata.dll.
*Puede usarse el metodo OPENTABLES del dataenvironment para alojar cdigo de consulta de datos.
*Es necesario declarar la clase en cada modulo o mtodo por lo menos una vez.
Pgina 7 de 12
*configuraciones de fox necesarias
SET STATUS OFF
SET ECHO OFF
SET TALK OFF
SET NOTIFY OFF
SET NOTIFY CURSOR OFF
SET CONSOLE OFF
SET TEXTMERGE ON
SET DELETED ON
SET DATE TO DMY
SET CENTURY ON

*configurando el evento para atrapar errores


ON ERROR do perror

*creacin del entorno de conexin


LOCAL osqldata as sqldata OF sqldata.sqldata
osqldata=CREATEOBJECT("sqldata.sqldata")
osqldataload1=CREATEOBJECT("custom")
osqldata.psqlcargar(_screen,"1",osqldataload1)

*creacin del entorno de conexin para una segunda conexin


LOCAL osqldata as sqldata OF sqldata.sqldata
osqldata=CREATEOBJECT("sqldata.sqldata")
osqldataload2=CREATEOBJECT("custom")
osqldata.psqlcargar(_screen,"2",osqldataload2)

*estableciendo la cadena de conexion


LOCAL osqldata as sqldata OF sqldata.sqldata
osqldata=CREATEOBJECT("sqldata.sqldata")
osqldata.psqlcadena(_screen,"1","sql2005","pcgerman\sqlexpress","sa","contrasea","spanish","read uncommitted")

*estableciendo la cadena de conexion para la segunda conexin


LOCAL osqldata as sqldata OF sqldata.sqldata
osqldata=CREATEOBJECT("sqldata.sqldata")
osqldata.psqlcadena(_screen,"2","sql2005","pcgerman\sqlexpress","sa","contrasea","spanish","read uncommitted")

*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

*iniciando la conexion con psqlcomienzo


LOCAL osqldata as sqldata OF sqldata.sqldata
osqldata=CREATEOBJECT("sqldata.sqldata")
osqldata.psqlcomienzo(_screen,"1")

*llamada a un formulario para editar la tabla clientes


DO FORM clientes

*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

*grabando los cambios en el cursor (modificados, nuevos, eliminados)


TRY
LOCAL osqldata as sqldata OF sqldata.sqldata
osqldata=CREATEOBJECT("sqldata.sqldata")
SELECT clientes
TABLEUPDATE(.t.)
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")
Pgina 9 de 12
osqldata.psqlerror(_screen)
MESSAGEBOX("Debido a un error no se grabaron los cambios. Intente nuevamente",16,"Atencin")
SELECT CLIENTES
TABLEREVERT(.T.)
FINALLY
ENDTRY

*refrescando el registro para obtener el id de cada registro nuevo insertado.


LOCAL osqldata as sqldata OF sqldata.sqldata
osqldata=CREATEOBJECT("sqldata.sqldata")
SELECT clientes
osqldata.psqlrefrescar(_screen,"1",_screen,"clientes")
REFRESH()
BROWSE

*cancelando cualquier cambio realizado en el cursor


LOCAL osqldata as sqldata OF sqldata.sqldata
osqldata=CREATEOBJECT("sqldata.sqldata")
osqldata.psqlcancelar(_screen,"1",_screen,"clientes")

*realizando una segunda consulta para ser grabada posteriormente (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

SELECT clientes
BROWSE

*enviando un comando al sql


LOCAL osqldata as sqldata OF sqldata.sqldata
osqldata=CREATEOBJECT("sqldata.sqldata")
IF USED("comando")
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 language 'spanish'")
IF USED("comando")
USE IN comando &&es necesario que el cursor no exista despues de llamar a psqlejecutar
Pgina 10 de 12
ENDIF

*finalizando el bloque de psqlcomienzo


osqldata.psqlfinal(_screen,"1")

*cerrando los cursores


USE IN clientes

*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

*enviando parametros de entrada y salida al servidor


*siempre deben especificar el nombre de la variable igual a la de SQL
*deben usar los tipos de datos en minuscula que los pueden sacar de AFIELD()
*siempre deben especificar la longitud de los caracteres
*siempre deben especificar 0 o cualquier valoer en longitud de fecha y fechashoras
*los numeros decimales y enteros deben especificar longitud y decimales igual que en sql
*los valores de los parametros de entrada se ingresan en formato caracter
*los valores de los parametros de salida se muestran en formato caracter
*no se puede especificar tipo de datos cursor de salida

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")

*desconectando la segunda conexin


LOCAL osqldata as sqldata OF sqldata.sqldata
osqldata=CREATEOBJECT("sqldata.sqldata")
osqldata.psqldesconectar(_screen,"2")

*descargando variables del entorno de la sqldata


REMOVEPROPERTY(_screen,"sqlconnection1")
REMOVEPROPERTY(_screen,"sqldata1")
REMOVEPROPERTY(_screen,"sqlconnection2")
REMOVEPROPERTY(_screen,"sqldata2")
REMOVEPROPERTY(_screen,"vcadenaconexiones")
REMOVEPROPERTY(_screen,"vcantidadconexiones")

LOCAL osqldata as sqldata OF sqldata.sqldata


osqldata=CREATEOBJECT("sqldata.sqldata")
MESSAGEBOX(osqldata.psqlacercade())

PROCEDURE PERROR
LOCAL osqldata as sqldata OF sqldata.sqldata
osqldata=CREATEOBJECT("sqldata.sqldata")
osqldata.psqlerror(_screen)
quit

Pgina 12 de 12

También podría gustarte