Grandamakulo   01-12-2020, 18:53
#1
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:
Última modificación: 09-12-2020, 22:19 por jguardon.
jsbsan   01-12-2020, 20:08
#2
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.
Grandamakulo   01-12-2020, 20:27
#3
(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:
Última modificación: 09-12-2020, 22:19 por jguardon.
jsbsan   01-12-2020, 22:17
#4
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
Grandamakulo   02-12-2020, 21:39
#5
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.
tincho   03-12-2020, 11:14
#6
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

1 Saludo.
Grandamakulo   03-12-2020, 18:30
#7
É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.
tincho   03-12-2020, 20:40
#8
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.

1 Saludo.
  
Usuarios navegando en este tema: 6 invitado(s)
Powered By MyBB, © 2002-2024 MyBB Group.
Made with by Curves UI.