Comunidad Gambas-es
Ruta local en conexión y error al cambiar la ruta - Versión para impresión

+- Comunidad Gambas-es (https://gambas-es.org)
+-- Foro: Gambas (https://gambas-es.org/forum-3.html)
+--- Foro: Bases de Datos (https://gambas-es.org/forum-6.html)
+--- Tema: Ruta local en conexión y error al cambiar la ruta (/thread-206.html)



Ruta local en conexión y error al cambiar la ruta - Grandamakulo - 01-12-2020

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:


RE: Ruta local en conexión y error al cambiar la ruta - jsbsan - 01-12-2020

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.


RE: Ruta local en conexión y error al cambiar la ruta - Grandamakulo - 01-12-2020

(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:


RE: Ruta local en conexión y error al cambiar la ruta - jsbsan - 01-12-2020

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


RE: Ruta local en conexión y error al cambiar la ruta - Grandamakulo - 02-12-2020

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.


RE: Ruta local en conexión y error al cambiar la ruta - tincho - 03-12-2020

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:

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



RE: Ruta local en conexión y error al cambiar la ruta - Grandamakulo - 03-12-2020

É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.


RE: Ruta local en conexión y error al cambiar la ruta - tincho - 03-12-2020

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.