Hola, compañeros.
Tengo un programa que utilizo exclusivamente yo y a día de hoy no había tenido que cambiar la ubicación y no me había fijado quela ruta de la conexión a la base de datos SQLite era absoluta—sí, ya lo sé, mala praxis—. Me dio el error correspondiente y ya la he cambiado, pero:
- No sé cómo ponerla relativa a la de la aplicación.
- Me sale un error diciendo que no encuentra la base de datos cuando puedo ver la tabla y hacer consultas perfectamente.
Adjunto imagen del error y de la consulta que funciona:
Hola,
Grandamakulo
Podias usar la variable user.home
que te da la ruta de tu usuario (/home/usuario) y luego le añades el directorio de tu aplicación.
(01-12-2020, 20:08)jsbsan escribió: [ -> ]user.home
¿Cómo? Es que la conexión la preparo en el modo diseño, no durante la ejecución:
Cita:¿Cómo? Es que la conexión la preparo en el modo diseño, no durante la ejecución:
La conexión tendrá algun nombre, entonces a la conexion.host le asigna la ruta...
Mirate esta ayuda, a lo mejor te orienta mejor:
https://gambaswiki.org/wiki/howto/databasesqlite
Fijate que en vez de usar user.home, usan application.path:
$con
.Host
= Application
.path ' Host sera la ruta en donde esta el archivo de la db sqlite
Nada @jsbsan, te agradezco el esfuerzo, pero lo he intentado y no hay manera. A ver si saco un rato mañana y cuelgo el proyecto completo.
Hola,
Las imágenes que intentaron adjuntar no se ven, para subirlas correctamente hay que usar el botón
Igmur
![[Imagen: BuGHL7r.png]](https://i.imgur.com/BuGHL7r.png)
Luego para el asunto de la conexión, lo mas práctico es que uses un método al inicio de tu programa que defina los parámetros de conexión y listo.
Por ejemplo en mis programas que usan bases de datos uso varios métodos que se encargan de crear los directorios y la base de datos en el primer inicio y de establecer la conexión y dejarla lista para su utilización.
Suelo usar algo por el estilo de: [User.Home]/.programa/labase.sqlite.
Como explicaba Julio, [User.Home] es una forma muy flexible de guardar los datos de forma relativa que vale para todos los usuarios, la de application.path no me convence porque depende de si el programa se ejecuta desde el IDE o desde un .gambas instalado cambia.
Dejo un ejemplo:
Código:
'' Verify that the program directory exists in Home
adi = User.Home &/ "." & String.LCase(vag.NoSymbols(Application.Name))
If Exist(adi) = False Then
Shell "mkdir -p " & adi Wait
Endif
'' Verify that the database exists
con.Host = adi
dbn = "app.sqlite"
sql = File.Load("./sqlite.sql")
'2 Now we ask the connection if the database exists, for this we must open it
con.Open
If con.Opened Then
If con.Databases.Exist(dbn) Then
' Print ("The database exists") & " " & dbn
con.Close
con.Name = dbn
con.Open
If con.Tables.Count = 2 Then
' Print ("Database is inconsistent") & " " & dbn
'Creating the tables
Try con.Exec("BEGIN TRANSACTION;\n" & sql & "\nROLLBACK;")
If Not Error Then
con.Exec(sql)
' Print Replace(Error.Text, "\n", " ")
Endif
con.Close
con.Open
Endif
Else
' Print ("The database not exists") & " " & dbn
con.Databases.Add(dbn)
con.Close
con.Name = dbn
con.Open
'' Creating the database and tables
Try con.Exec("BEGIN TRANSACTION;\n" & sql & "\nROLLBACK;")
If Not Error Then
con.Exec(sql)
' Print Replace(Error.Text, "\n", " ")
Endif
con.Close
con.Open
Endif
Endif
Ésta es la imagen del error:
![[Imagen: B8gq8Lp.jpg]](https://i.imgur.com/B8gq8Lp.jpg)
A pesar de que he seguido vuestros consejos y creo la conexión durante la ejecución y no durante el diseño, sigue sin funcionar. El proyecto de marras no lo puedo subir porque la base de datos ocupa bastante. A ver cómo puedo hacer.
El cartel dice que no se encuentra a la database llamada combinado pero en la consulta SQL combinado es una tabla, así que o la base de datos se llama igual que la tabla o hay algo mal especificado.
No hace falta que subas el proyecto con la base de datos real solo con el proyecto y la estructura de la base de datos bastaría para echar un vistazo y ver que es lo que sucede.
Me gustaría ayudarte, me quedo a la espera de que subas el proyecto.
Saludos.