Power Builder - PB con SQLite "totalmente" portable?

 
Vista:
sin imagen de perfil

PB con SQLite "totalmente" portable?

Publicado por Jorge (41 intervenciones) el 12/07/2014 00:15:08
Buenas, tengo una gran duda, quisiera saber si me pueden ayudar:

Requiero crear una aplicación en PB completamente portable, para ser llevada por usb. Requiero de una bd obviamente portable, para esto veo que mucha gente recomienda SQLite. Y aca me surgen 2 inconvenientes:

1. Realizar la conexion desde PB. Para conectarme podría instalar el driver ODBC de SQLite con lo cual ya podría conectarme desde PB a la base de datos. Mi duda : ¿Es posible llegar a conectarse desde PB a la BD de SQLite sin necesidad de instalar el driver ODBC? ¿Se puede crear en el S.O. un Origen de Datos a SQLite sin instalar driver alguno?

2. Realizar la conexión desde la aplicación portable. En vista que el aplicativo se transportará en un usb, es poco probable que el usuario pueda, y sepa, cómo instalar un driver odbc. Y en realidad si el aplicativo es "portable" no DEBE haber necesidad de instalar nada. Por tanto, ¿Cómo se puede hacer para que el aplicativo se conecte a la bd de SQLite directamente, es decir, sin instalar drivers en las pc donde se ejecuta el aplicativo?

Gracias por sus respuestas
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Adolfo
Val: 250
Bronce
Ha mantenido su posición en Power Builder (en relación al último mes)
Gráfica de Power Builder

PB con SQLite "totalmente" portable?

Publicado por Adolfo (258 intervenciones) el 12/07/2014 01:16:25
Te recomiendo que utilices bd en Access y que tu aplicación busque el ODBC al momento de ejecutarse y de no encontrarse lo cree, aqui esta el codigo, funciona bien a 32 bits pero no estoy muy seguro que funcione a 64 bits, este codigo iria en el OPEN de la aplicacion:

String ls_reg, ls_path, ls_arch
Integer li_rtn

SetNull(ls_reg)
RegistryGet("HKEY_CURRENT_USER\Software\ODBC\ODBC.INI\ODBC Data Sources", "DemoVtas", RegString!, ls_reg)

if IsNull(ls_reg) then
li_rtn = GetFileOpenName("Archivo a cargar", ls_path, ls_arch, "mdb", "Access DataBase (*.mdb), *.mdb", GetCurrentDirectory())
if li_rtn < 1 then Halt
RegistrySet("HKEY_CURRENT_USER\Software\ODBC\ODBC.INI\ODBC Data Sources", "DemoVtas", RegString!, "Microsoft Access Driver (*.mdb)")
RegistrySet("HKEY_CURRENT_USER\Software\ODBC\ODBC.INI\DemoVtas", "DBQ", RegString!, ls_path)
RegistrySet("HKEY_CURRENT_USER\Software\ODBC\ODBC.INI\DemoVtas", "Description", RegString!, "Operadores Revuelta100")
RegistrySet("HKEY_CURRENT_USER\Software\ODBC\ODBC.INI\DemoVtas", "Driver", RegString!, "C:\Windows\system32\odbcjt32.dll")
RegistrySet("HKEY_CURRENT_USER\Software\ODBC\ODBC.INI\DemoVtas", "DriverId", ReguLong!, 25)
RegistrySet("HKEY_CURRENT_USER\Software\ODBC\ODBC.INI\DemoVtas", "FIL", RegString!, "MS Access;")
RegistrySet("HKEY_CURRENT_USER\Software\ODBC\ODBC.INI\DemoVtas", "SafeTransactions", ReguLong!, 0)
RegistrySet("HKEY_CURRENT_USER\Software\ODBC\ODBC.INI\DemoVtas", "UID", RegString!, "")
RegistrySet("HKEY_CURRENT_USER\Software\ODBC\ODBC.INI\DemoVtas\Engines\Jet", "ImplicitCommitSync", RegString!, "")
RegistrySet("HKEY_CURRENT_USER\Software\ODBC\ODBC.INI\DemoVtas\Engines\Jet", "MaxBufferSize", ReguLong!, 2048)
RegistrySet("HKEY_CURRENT_USER\Software\ODBC\ODBC.INI\DemoVtas\Engines\Jet", "PageTimeout", ReguLong!, 5)
RegistrySet("HKEY_CURRENT_USER\Software\ODBC\ODBC.INI\DemoVtas\Engines\Jet", "Threads", ReguLong!, 3)
RegistrySet("HKEY_CURRENT_USER\Software\ODBC\ODBC.INI\DemoVtas\Engines\Jet", "UserCommitSync", ReguLong!, "Yes")
end if
// Profile DemoVtas
SQLCA.DBMS = "ODBC"
SQLCA.AutoCommit = True
SQLCA.DBParm = "ConnectString='DSN=DemoVtas'"
Connect;
if sqlca.sqlcode = -1 then
MessageBox("Error","No se pudo conectar a la base del DemoVtas~r~n" + sqlca.sqlerrtext,StopSign!)
Halt
end if


En ACCESS las instrucciones delete e insert cambian un poquito:

DELETE FROM MenxUsu
WHERE Usu_Clave = :is_usu_clave;

INSERT INTO MenxUsu VALUES(:is_usu_clave,:ls_men_clave, :li_mxu_posicion);
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar