Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
** Ejemplo-VFP-accesando-SQLite-con-ODBC.prg
** Jul-2013
** jhernancanom-at-hotmail-dot-com
-1-
D:\Utiles\Motores\SQLite\PRUEBAS-ODBC\Ejemplo-VFP-accesando-SQLite-con-ODBC.prg Jueves, 04 de Julio del 2013 10:32 p.m.
************************************************************************************************
****************** PROCEDURE MAIN **************************************************************
************************************************************************************************
if .not.Registrar()
= MessageBox ( "No se pudo registrar SQLite3ODBC.dll " +chr(13)+chr(13);
+ "No puedo continuar" )
return
endif
CLEAR
close databases
IF lnHandle > 0
*SQLSETPROP(lnHandle,"Asynchronous",.t.)
** si no se comentariza la anterior instrucción aparece: "Invalid call issued while
** executing a SQLEXEC() sequence" al cerrar el Browse
-2-
D:\Utiles\Motores\SQLite\PRUEBAS-ODBC\Ejemplo-VFP-accesando-SQLite-con-ODBC.prg Jueves, 04 de Julio del 2013 10:32 p.m.
local M.cSQL
** Tercera parte: Ejecutamos una operación (un comando SQL) sobre la base de datos SQLite3
*************
** vamos a visualizar los datos de una de las tablas
M.cSQL = "SELECT * FROM customers"
-3-
D:\Utiles\Motores\SQLite\PRUEBAS-ODBC\Ejemplo-VFP-accesando-SQLite-con-ODBC.prg Jueves, 04 de Julio del 2013 10:32 p.m.
** ¿Terminamos?
** =========================================================================================
** De forma didáctica veamos cómo capturamos la estructura de una de las tablas
**
** Con AFIELDS sobre el cursor de VFP obtenemos la estructura
** o también con COPY STRUCTURE EXTENDED
** ¿y qué más?
** voy a hacerlo con 'copy structure extended'...
** Cuarta parte: Veamos la estructura de uno de los archivos de datos (una de la tablas)
select MiCursor
if file('_MiCursor_.dbf')
erase _MiCursor_.*
endif
copy structure extended to _MiCursor_
use _MiCursor_ in 0 exclusive
select _MiCursor_
if .f.
browse nomodify title "Estructura segun 'copy structure extended' - Employees"
else
** una forma más elegante de hacer un BROWSE
** (lástima que dependa de la vble lBrowseSetup)
private oBrowse, lBrowseSetup
lBrowseSetup=.F.
*wait window [Visualizando datos...] nowait
BROWSE NAME oBrowse WHEN BrowseSetup() title "Estructura segun ;
'copy structure extended' - Employees" &&NOWAIT
oBrowse = .null.
wait clear
endif
use in _MiCursor_
erase _MiCursor_.*
** ==========================================================================================
** Sexta parte: Limpiamos el sistema operativo, des-registrando las DLL que registramos al
** inicio nosotros mismos
-4-
D:\Utiles\Motores\SQLite\PRUEBAS-ODBC\Ejemplo-VFP-accesando-SQLite-con-ODBC.prg Jueves, 04 de Julio del 2013 10:32 p.m.
if !Registrar('U')
= MessageBox ( "No se pudo des-registrar SQLite3ODBC.dll " +chr(13)+chr(13) +;
"Pero podemos continuar..." )
endif
wait clear
************************************************************************************************
****************** ENDPROC MAIN ****************************************************************
************************************************************************************************
** De acuerdo al ejemplo "combo-(SQLite)" --se adjunta-- necesitamos registrar sólo una DLL:
** SQLite3ODBC.dll para activar el ODBC de SQLite en nuestras app
** (así nos evitamos tener que hacer una instalación adicional --la del ODBC--)
** (parece que con SQLite también nos evitamos hacer la instalación adicional del motor)
** Veamos...
function Registrar(M.pDes)
if pcount()=0
LOCAL oReg as registry OF 'registry'
oReg = NEWOBJECT('registry','registry')
local M.nRet
* This routine sets a registry key setting
M.nRet = oReg.SetRegKey('Driver','sqlite3odbc.dll',;
'Software\ODBC\ODBC.INI\generic_SQLite_ODBC',-2147483647,.t.)
if M.nRet<>0
=MessageBox('Error en SetRegKey'+chr(13)+transform(M.nRet),0,'Error en SetRegKey')
endif
clear class registry
clear classlib registry
return (M.nRet=0)
endif
oReg = NEWOBJECT('registry','registry')
local M.nRet
* This routine deletes a Registry Key
M.nRet = oReg.DeleteKey(-2147483647,'Software\ODBC\ODBC.INI\generic_SQLite_ODBC')
if M.nRet<>0
=MessageBox(M.nRet,0,'Error en DeleteKey')
endif
clear class registry
clear classlib registry
return (M.nRet=0)
** el "des-registro" se hace al finalizar la app; si no se puede
** des-registrar, realmente no hay problema... ¿cierto?
endif
wait window '¿Qué pasó?' &&nowait noclear
-5-
D:\Utiles\Motores\SQLite\PRUEBAS-ODBC\Ejemplo-VFP-accesando-SQLite-con-ODBC.prg Jueves, 04 de Julio del 2013 10:32 p.m.
** si llegó hasta aquí, sí hay problema... sólo se ejecuta sin parámetro (para registrar)
** o con el parámetro U (para des-registrar)...
return .f.
*----------------------------------------
** Es una idea interesante para visualizar datos y no me aguanté presentárselas
** obtenida de Internet, pero no recuerdo la fuente (la buscaré)
PROCEDURE BrowseSetup
IF NOT lBrowseSetup
WITH oBrowse AS GRID
.LEFT = 50
.TOP = 50
.AUTOFIT()
.HIGHLIGHTSTYLE= 2
.ALLOWCELLSELECTION = .F.
.HIGHLIGHTBACKCOLOR = RGB(255,128,64)
.HIGHLIGHTFORECOLOR = RGB(0,0,0)
.Refresh
ENDWITH
lBrowseSetup = .T.
ENDIF
*----------------------------------------
return
ENDPROC
**
-6-