Sqldata y Sqldata2 v63 2020.08.02 FREE (maximo de registros)

323 views
Skip to first unread message

Germán Fabricio Valdez

unread,
Aug 2, 2020, 4:08:34 PM8/2/20
to Comunidad de Visual Foxpro en Español
Sqldata y Sqldata2 v63 2020.08.02 FREE (maximo de registros)

hola grupo

link de descarga
sqldata

sqldata2

solo hay que hacer pocos cambios en el formulario.  
-traer un cursor, modificarlos con instrucciones de vfox,y grabarlo
-luego aprenderan a optimizarlo
-puede convivir con dbf, y los motores a la vez 

un nuevo parametro maxrk
esto hace que se traigan del servidor al cliente, solamente un maximo de registros, 
similar a select TOP, pero sin espeficarlo

ejemplo
osqldata.psqlejecutar(_screen,"1",thisform,oclientes,"consultag","clientes","clientes","select * from clientes order by id",,,"maxrk50")
trae los primeros 50 registros

maxrk0 trae el cursor vacio
____________________

funciona para red local, internet servidores propios, y servidores de terceros

recomiendo que si tienen que migrar de dbf al servidor, usen sql server desde la version 2008 R2 SP2 en adelante,
permite multiples conexiones, por ejemplo sqlserver , y mysql, y distintos drivers de conexion
conectando un servidor a la vez,  o varios

ventajas de sql server (la cual recomiendo)

*sql server tiene el tipo de dato "bit", que es para almacenar valores .T. y .F. , las demas bases de datos hay que cambiar todo a 1 y 0
*ademas del campo "money" que no existe en ninguna otro motor de base de datos
*hay muchas herramientas para sql server como reparador de base de datos, y otros
*pueden complementar con Visual Studio .NET y OFFICE 
*pueden crear procedimientos almacenados complejos
*y todo es de microsoft
*hay versiones gratuitas y una version standar y otra enterpise.
ademas se pueden conectar a MICROSOFT AZURE en la web (desde vfp), donde se puede acceder desde varias sucursales, creando una VPN, o directamente
*tiene drivers para python , php, y otros
*el servidor de azure tiene precios gratis y accesibles, a medida que crece mas la empresa
*ademas que tiene todo el respaldo de MICROSOFT
*y otras grandes ventajas.

German Fabricio Valdez 
email: gfva...@hotmail.com, y gfav...@gmail.com, para cualquier consulta, error, o mejoras

pueden ir convirtiendo el proyecto por etapas, combinando dbf, con servidores de base de datos, por ejemplo sqlserver

sqldata2 corre en VFPA 2019.08.30 en adelante 

mejoras
-los campos de tipo fechas, y image, blob, tienen que permitir nulos, ya que la clase, no permite fechas vacias, "0000-00-00", o "0000-00-00 00:00:00", de mariadb y mysql
-si hay fechas en formularios, que pueden quedar vacias, hay que convertirla a nulo antes de grabar, colocando este codigo en el valid del textbox,  en formularios o grillas: this.value=IIF(ISBLANK(this.value),null,this.value), o claquier otro metodo
-para cambiar a valor nulo de un textbox presionen control+0
-los erres al conectarse se graban en %appdata%\sqldata o %appdata%\sqldata2, y se muestra
_______

Clase para Visual Foxpro, que permite conectarse a servidores remotos (sql server, mysql, mariadb, postgresql, firebird, oracle)

sqldata2 tiene las mismas funcionalidades que sqldata, y pueden trabajar juntas en el proyecto

la clase visual sqldata esta diseñada con cursoradapter via ADO (oledb,oledb-odbc)

la clase visual sqldata2 esta diseñada con cursoradapter via ODBC (unicamente)

pueden conectarse a base de datos en la nube (MICROSOFT AZURE, GOOGLE CLOUD, AMAZON WEB, y otros)

sqldata y sqldata2 ,tambien funcionan en Visual Foxpro Advanced de 64 bits

en ambos casos pueden usar los archivos VCX,VCT, en sus proyectos sin tener en cuenta la registracion de las dll

si la quieren registrar a la sqldata.dll (32bits o 64bits), lo pueden hacer


*Con la clase sqldata, gratuita, que he desarrollado, para la comunidad de FOX, podran acceder a servidores microsoft sql server, mysql, mariadb,postgreSQL,oracle,firebird,visual foxpro (32 bits), access y excel, facilmente, o si necesitan interactuar con otros motores a la vez
*la clase devuelve en las consultas al servidor, un cursor DBF, despues modifican el cursor, y cuando lo graban traduce
las modificaciones al server

Esta desarrollado forma nativa VFP9 SP2 para VFP9 SP2 , tambien permite compilar el proyecto en Visual Foxpro 8 SP1
resuelve muchos problemas de conexion en red local e internet 
para ser usada en tecnica de programacion cliente-servidor. 
además podran usar tecnicas para servidores de bases de datos distribuidos 
esta version de la sqldata es compatible con las anteriores 
pueden acceder a distintos servidores a la vez, del mismo motor o distintos

compatible con sql2000, sql2005, sql2008, y sql2008r2, sql2012, sql2014, sql2016, sql2017, sql2019  (express, estandar, developer, enterprise), mysql, mariadb, postgresql, firebird, oracle
windows 7,8,8.1,10(mayo 2020), (32 y 64 bits)

deben instalar el correspondiente sqlncli.msi de 32 o 64 bits en cada PC cliente para cada version SQL Server que utilicen
o el nuevo msoledbsql.msi 32 y 64bits, tambien los controladores odbc de mysql y mariadb, postgresql, oracle, firebird

se incluye un manual en word e instrucciones.txt , una base de datos de ejemplo en sql2014, varios prg, 4 formularios, 1 reporte, 1 base de datos de Visual Foxpro 2 tablas, 1 archivo de Access 2013, 1 de Excel 2013, y un proyecto con ejemplos

pueden usar la sqldata.dll (32 y 64 bits) y registrala en cada pc, 
o la clase visual sqldata (vcx,vct)


______

*ejenplo de una grabacion de cabecera-detalle sin usar id, ejemplo (tipo,numero) o (documento)
*osqldata.psqlejecutar(_screen,"6",_screen,oclientes,"consultag","clientes","","select * from fabrica.clientes",,"tipo,documento","grabarid")


*ejemplo de una grabacion CABECERA-DETALLE, leer y grabar en mysql, mariadb, postgresql, sql server, oracle, utilizando campos ID para relacionar 

*cree uan base de datos llamada fabrica
*luego cree una tabla llamada clientes
*id autoincremental primary key o serial, direccion, domicilio, telefono, fnacimineto, precio, confirma (boolean)
*y una tabla detalle con id autoincremental primary key o serial, idcliente int y cuota=int

*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 
SET NULLDISPLAY TO "sin datos" 
SET POINT TO ","
SET HOURS TO 24
SET SECONDS ON
SET ESCAPE OFF 
SET CLASSLIB TO sqldata
*configurando el evento para atrapar errores 
*ON ERROR do perror  WITH ERROR( ), MESSAGE( ), PROGRAM( ), LINENO( )
ON SHUTDOWN quit 

*creación del entorno de conexión para una sexta conexión via a odbc mysql
LOCAL osqldata as sqldata OF sqldata.sqldata 
osqldata=CREATEOBJECT("sqldata.sqldata")
osqldataload6=CREATEOBJECT("custom")
osqldata.psqlcargar(_screen,"6",osqldataload6)

LOCAL osqldata as sqldata OF sqldata.sqldata 
osqldata=CREATEOBJECT("sqldata.sqldata")
osqldata.psqlcadena(_screen,"6","odbcsql-mysql","DRIVER={MySQL ODBC 8.0 ANSI Driver} ;SERVER=localhost; PORT=3306; MULTI_STATEMENTS=1; database=fabrica; OPTIONS=88082432","root","colon.1618","spanish","read uncommitted")

IF osqldata.psqlestado(_screen,"6")=.f.
MESSAGEBOX("Error al conectarse 6",64,"Atención")
RETURN 
ENDIF 

osqldata.psqlcerrar(_screen,"6","automatico") &&abre la conexion al servidor en psqlcomienzo y la cierra en psqlfinal los parametros son manual o automatico
osqldata.psqlinternet(_screen,"6","automatico") &&indica que la conexion es por internet
osqldata.psqlcache(_screen,"6","automatico") &&indica que se usara cache por cada consultac

____________ hasta aqui es la configuracion de la clase , se debe colocar en el prg de inicio por unica vez

____________ lo que sigue se puede poner en el load del formulario o en botones y otros

IF USED("clientes")
USE IN clientes &&es necesario que el cursor no exista antes de llamar a psqlejecutar
ENDIF 
IF USED("detalle")
USE IN detalle &&es necesario que el cursor no exista antes de llamar a psqlejecutar
ENDIF 
LOCAL osqldata as sqldata OF sqldata.sqldata 
osqldata=CREATEOBJECT("sqldata.sqldata")
osqldata.psqlcomienzo(_screen,"6")
oclientes=CREATEOBJECT("cursoradapter")
osqldata.psqlejecutar(_screen,"6",_screen,oclientes,"consultag","clientes","","select * from fabrica.clientes") &&trae el cursor vacio
CURSORSETPROP("Buffering",3,"clientes") &&por defecto es buffering 5
RECCOUNT("clientes")

*el tercer parámetro 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 sino usar _screen
odetalle=CREATEOBJECT("cursoradapter")
osqldata.psqlejecutar(_screen,"6",_screen,odetalle,"consultag","detalle","","select * from fabrica.detalle") &&trae el cursor vacio
CURSORSETPROP("Buffering",3,"detalle") &&por defecto es buffering 5
RECCOUNT("detalle")

osqldata.psqlfinal(_screen,"6")

SELECT clientes
APPEND BLANK 
replace nombre WITH "German",;
direccion WITH "los andes",;
telefono WITH "444",;
fnacimiento WITH DATE(),;
precio WITH 10.20,;
confirma WITH .t.

SELECT detalle
APPEND BLANK 
replace cuota WITH 2

SELECT clientes
IF NOT TABLEUPDATE(.t.)
MESSAGEBOX("No se grabaran los ultimos cambios",64,"Atencion")
TABLEREVERT(.t.)
ENDIF 

SELECT detalle
IF NOT TABLEUPDATE(.t.)
MESSAGEBOX("No se grabaran los ultimos cambios",64,"Atencion")
TABLEREVERT(.t.)
ENDIF 

*grabando los cambios en el cursor (modificados, nuevos, eliminados)
LOCAL osqldata as sqldata OF sqldata.sqldata 
osqldata=CREATEOBJECT("sqldata.sqldata")
osqldata.psqlcomienzo(_screen,"6")
osqldata.psqlcomtran(_screen,"6")
osqldata.psqlgrabar(_screen,"6",_screen,"clientes")
SELECT clientes 
REFRESH() &&refrescando el registro para obtener el id de cada registro nuevo insertado. la idea es ingresar el registro a la cabecera y varios al detalle
UPDATE detalle SET idcliente=clientes.id WHERE idcliente=0 &&ahora con el id, lo agregamos a la tabla detalle
osqldata.psqlgrabar(_screen,"6",_screen,"detalle")
osqldata.psqlfintran(_screen,"6")
osqldata.psqlfinal(_screen,"6")
WAIT "Grabado." WINDOW NOWAIT 

USE IN clientes
USE IN detalle

 
* fin del ejemplo con mysql, se destruye la clase en memoria al salir del programa (optativo)

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

REMOVEPROPERTY(_screen,"sqlconnection6")
REMOVEPROPERTY(_screen,"sqldata6")

LOCAL osqldata as sqldata OF sqldata.sqldata 
osqldata=CREATEOBJECT("sqldata.sqldata")
MESSAGEBOX(osqldata.psqlacercade())


PROCEDURE PERROR
LPARAMETER merror, mess, mprog, mlineno

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

MESSAGEBOX("Ocurrio un error."+mess+". Modulo:"+mprog+"N° de linea"+ALLTRIM(STR(mlineno,10,0))+", reintente",64,"Atencion")

RETURN TO MASTER 

Edwin Duran

unread,
Aug 2, 2020, 4:54:12 PM8/2/20
to Comunidad de Visual Foxpro en Español
Gracias

Germán Fabricio Valdez

unread,
Aug 11, 2020, 3:14:07 PM8/11/20
to Comunidad de Visual Foxpro en Español
corrijo un error v63b, en sqldata2, en tiempo de ejecucion


SQLSETPROP(0,'Transactions', 1) && La conexión #0 está ocupada.
antes de conectarse al servidor
en vfp9 da este error, pero no en todos los windows

ahora cambie la instruccion  
despues de conectarse
SQLSETPROP(Handle ,'Transactions', 1)

los que usan sqldata2 lo modificaban, en cada actualizacion de la clase,, pero ahora no sera necesario

Dsan

unread,
Aug 12, 2020, 3:21:17 PM8/12/20
to publice...@googlegroups.com

Excelente, gracias German por tu aporte..

Saludes

DSanchez



--
Visita el Blog de la Comunidad Visual FoxPro en Español: http://comunidadvfp.blogspot.com
---
Has recibido este mensaje porque estás suscrito al grupo "Comunidad de Visual Foxpro en Español" de Grupos de Google.
Para cancelar la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a publicesvfoxp...@googlegroups.com.
Para ver esta conversación en el sitio web, visita https://groups.google.com/d/msgid/publicesvfoxpro/b0bab348-5984-4a22-bbce-22a5056a715co%40googlegroups.com.
Reply all
Reply to author
Forward
0 new messages