Comunidad Gambas-es

Versión completa: Ruta local en conexión y error al cambiar la ruta
Actualmente estas viendo una versión simplificada de nuestro contenido. Ver la versión completa con el formato correcto.
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:
  1. No sé cómo ponerla relativa a la de la aplicación.
  2. 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]
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:

GAMBAS
  1.   '' Verify that the program directory exists in Home
  2.   adi = User.Home &/ "." & String.LCase(vag.NoSymbols(Application.Name))
  3.  
  4.     Shell "mkdir -p " & adi Wait
  5.  
  6. '' Verify that the database exists
  7. con.Host = adi
  8.       dbn = "app.sqlite"
  9.       sql = File.Load("./sqlite.sql")
  10.  
  11.   '2 Now we ask the connection if the database exists, for this we must open it
  12.   con.Open
  13.   If con.Opened Then
  14.     If con.Databases.Exist(dbn) Then
  15.       ' Print ("The database exists") & " " & dbn
  16.       con.Close
  17.       con.Name = dbn
  18.       con.Open
  19.       If con.Tables.Count = 2 Then
  20.         ' Print ("Database is inconsistent") & " " & dbn
  21.         'Creating the tables
  22.         Try con.Exec("BEGIN TRANSACTION;\n" & sql & "\nROLLBACK;")
  23.         If Not Error Then
  24.           con.Exec(sql)
  25.           ' Print Replace(Error.Text, "\n", " ")
  26.         Endif
  27.         con.Close
  28.         con.Open
  29.       Endif
  30.     Else
  31.       ' Print ("The database not exists") & " " & dbn
  32.       con.Databases.Add(dbn)
  33.       con.Close
  34.       con.Name = dbn
  35.       con.Open
  36.       '' Creating the database and tables
  37.       Try con.Exec("BEGIN TRANSACTION;\n" & sql & "\nROLLBACK;")
  38.       If Not Error Then
  39.         con.Exec(sql)
  40.         ' Print Replace(Error.Text, "\n", " ")
  41.       Endif
  42.       con.Close
  43.       con.Open
  44.     Endif
  45.  


Ésta es la imagen del error:
[Imagen: 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.