Base De Datos Sqlite


Objetivo: Base De Datos Sqlite
Hola amigos estaba haciendo un programa con el gestor Slite y cuando lo termine lo quiero compilar me va muy bien hasta el momento pero en estos dias se me cruzo por la cabeza que en una parte yo tengo que especificar el lugar y la direccion de la base y que no siempre va a ser el nombre de usuario "gubuntu" como el ejemplo de abajo;
Conexion = NEW Connection
Conexion.Type = "sqlite3"
Conexion.host = "/home/gubuntu/Documentos/altgr/base1/database"
Conexion.Name = "usuario"
TRY Conexion.Open()
Y mi pregunta es como o si existe algun codigo para crear la base desde un boton y dejar a un lado el tema de especificar la direccion, les agradeceria mucho su ayuda

Perfil MP  
Objetivo: Re: Base De Datos Sqlite
Pues yo lo hago así, en el módulo de conexión:
Private hconn As Connection

Public Sub ConectarBase() As Connection

hconn = New Connection
hconn.Host = User.Home &/ ".visor"
hconn.name = "mibase1"
hconn.type = "sqlite3"
Try hconn.Open()
Return hconn
If Error Then
hconn = Null
Message.Error("error al conectar con la base")

Endif

End

Y en el evento Open de fmain:

If Not Exist(User.Home &/ ".visor/mibase1")
Try Mkdir User.Home &/ ".visor"
Copy "mibase1" To User.Home &/ ".visor/mibase1"
Endif

La base de datos la guardo en la carpeta "Datos" del proyecto, en la primera ejecución crea la carpeta oculta y se copia allí. Incluso si creas un .deb o .rpm , por ejemplo, para instalarlo en otra máquina, lo hace sin problemas.
Espero te sirva. Te comento que esto me lo pasó un compañero del foro cuando recién estaba empezando.
Saludos

Objetivo: Re: Base De Datos Sqlite
Hola amigo, estaba pobando de la forma que dijiste y lo que quiero hacer es que al hacer click en un boton me guarde los siguientes registro "nombre, apellido, edad, id" pero no me funciona con los codigo que me pasaste solo a si me funciona te dejo mi programacion y agradeceria mucho tu ayuda si pudieras corregir mi codigo

PUBLIC Conexion AS Connection
PUBLIC Registro AS Result

PUBLIC SUB Form_Open()
ME.Center
Conexion = NEW Connection
Conexion.Type = "sqlite3"
Conexion.host = "/home/gubuntu/Documentos/altgr/base1/database"
Conexion.Name = "usuario"
TRY Conexion.Open()



END
PUBLIC SUB Button1_Click()
DIM a AS Variant

a = TextBox1.Text
Registro = Conexion.Create("user")
Registro["id"] = a
Registro["nombre"] = TextBox2.Text
Registro["apellido"] = TextBox3.Text
Registro["edad"] = TextBox4.Text
Registro.Update
Registro = Conexion.Exec("select * from user")
Message.Info("Guardado:)", "aceptar")
TextBox1.Clear
TextBox3.Clear
TextBox2.Clear
TextBox4.Clear

END

Perfil MP  
Objetivo: Re: Base De Datos Sqlite
Hola

Gustavo, evidentemente un código de otro compañero puede no funcionar en tu caso. No podemos pensar que un corta-pega va a ser la solución a todo, también debemos leer y pensar por nosotros mismos.

De hecho, en el código que te pasó el amigo Dani26 está la solución que buscas, aunque no la hayas visto. Si te fijas en el valor de la propiedad .Host de la clase Connection (eso sí, vamos a llamar a cada cosa por su nombre) verás que Dani ha usado la clase User y su propiedad Home, que devuelve la ruta al directorio de usuario en cualquier PC y para el usuario actual (es decir, con la sesión iniciada). Sólo has de concatenar el nombre del fichero de la base de datos sqlite. Lo vemos mejor con un ejemplo:

' Esta es la linea que pusiste en tu código, pero la ruta es estática, no cambia nunca
' y no funcionaría en un ordenador diferente al tuyo.
Conexion.host = "/home/gubuntu/Documentos/altgr/base1/database"


' Si sustituimos "/home/gubuntu por la clase User.Home ésta devolverá siempre
' la ruta de la carperta de usuario en cualquier ordenador

Conexion.host = User.Home &/ "Documentos/altgr/base1/database"


Como ves, User.Home en tu pc devolvería la ruta /home/gubuntu pero en mi pc devolvería /home/miusuario. Después, mediante el operador de concatenación &/ añadimos el resto de la ruta que será fija para cualquier pc.

Hay que tener en cuenta que si los subdirectorios no existen se producirá un error. Es del todo probable que lo que está debajo de Documentos, en el caso que muestras "/altgr/base1/" no exista en otras máquinas, así que deberías chequear si existen y en caso contrario, crearlas. Si no lo haces, de nuevo obtendrás errores.

Espero haberte ayudado, pero por favor, tratar de entender el código antes de decir que no funciona.

Saludos

Perfil MP  
Objetivo: Re: Base De Datos Sqlite
Claro tampoco hice copiar y pegar directo, intente de adaptarlo a mi código e incluso probé que al dar click en un botón me copie la base pero aun así no me funciono y lo de Conexion.host = User.Home &/ ya me funciona, poco despues que volví preguntar pude corregir el error ya va de maravilla pero al final me quede con la curiosidad de como funciona el siguiente codigo

[code linenumbers=false syntax=gambas]
If Not Exist(User.Home &/ ".visor/mibase1")
Try Mkdir User.Home &/ ".visor"
Copy "mibase1" To User.Home &/ ".visor/mibase1"
Endif

Muchas gracias por toda la ayuda ya aprendi bastante en gambas-es.org

Perfil MP  
Objetivo: Re: Base De Datos Sqlite
If Not Exist(User.Home &/ ".visor/mibase1") 'comprueba que la base exista o no, si no existe
Try Mkdir User.Home &/ ".visor" 'crea el directorio oculto .visor
Copy "mibase1" To User.Home &/ ".visor/mibase1" 'y esta línea copia la base al directorio recién creado
Endif

Si la base ya existe, bien por una ejecución previa o por que ya la creaste o copiaste manualmente, no hace nada y se sale del procedimiento. En el código te puse los comentarios al lado de cada línea para que veas lo que hace.
Saludos

Objetivo: Re: Base De Datos Sqlite
Esa es una de las formas de crear bases de datos sqlite en el pc de la persona que instala el programa, que consiste en copiar el fichero sqlite desde dentro del programa al disco duro de destino.

Pero lo ideal es crear la base de datos por código y evitar meter ficheros binarios dentro del ejecutable. Creo que el gestor de base de datos o cualquier aplicación que las maneje, es capaz de hacer un "dump" de la estructura en código sql que luego podemos ejecutar desde gambas. gambas también dispone de las órdenes precisas para hacerlo en código gambas puro.

Busca por los foros, seguro que encontrarás algún ejemplo que te sirva.

Saludos

Perfil MP  
Objetivo: Re: Base De Datos Sqlite
jguardon:

Citar:
evitar meter ficheros binarios dentro del ejecutable

¿Por que evitarlo? Yo lo suelo usar mucho, y nunca he tenido problemas...

Objetivo: Re: Base De Datos Sqlite
Porque es evidente que crece desmesuradamente el tamaño del ejecutable y puede ser que el intérprete se vea afectado en alguna medida, en velocidad por ejemplo. Aunque nunca he hecho esas pruebas, no puedo confirmarlo.

Perfil MP  
Objetivo: Re: Base De Datos Sqlite
jguardon:
Citar:
Porque es evidente que crece desmesuradamente el tamaño del ejecutable y puede ser que el intérprete se vea afectado en alguna medida, en velocidad por ejemplo. Aunque nunca he hecho esas pruebas, no puedo confirmarlo.

Te cuento mi experiencia, en el programa de las orlas ( Enlace ), el archivo .deb pesa unos 30 mb, (el tag.gz sobre 60 mb). Aproximadamente 90% del peso se debe a un archivo a vez comprimido con muchas plantillas de orlas, el resto 10 % el programa (codigo fuente + iconos). Y no he tenido ningún problema, ni de rendimiento ni de uso.... o por lo menos nadie me lo ha comentado...


Página 1 de 1


  
No puede crear mensajes
No puede responder temas
No puede editar sus mensajes
No puede borrar sus mensajes
No puede votar en encuestas
No puede adjuntar archivos
Puede descargar archivos
No puede publicar eventos en el calendario

   

Está utilizando la versión (Lo-Fi). Para ver la versión completa del foro, haga clic aquí.

Powered by Icy Phoenix based on phpBB
Design by DiDiDaDo

Página generada en:: 0.4737s (PHP: -79% SQL: 179%)
Consultas SQL: 45 - Debug off - GZIP Activado