Comunidad Gambas-es

Versión completa: Problema con ubicación de archivo (base de datos)
Actualmente estas viendo una versión simplificada de nuestro contenido. Ver la versión completa con el formato correcto.
Hola a todos!

Estoy escribiendo una aplicación que guarda apuntes sobre de clases.
[Imagen: YDSGaaF1_o.png]
Utiliza una base de datos sqlite3 para guardar la información. Actualmente el archivo de la base de datos se encuentra en la carpeta del programa.

Tengo dos problemas:
1. Cuando creo el ejecutable (por ejemplo en el escritorio). No se encuentra el archivo
Código:
 Conn = New Connection
 Conn.Type = "sqlite"
 Conn.Host = Application.Path
 Conn.Name = "db_clases_prueba"

Application.path dirige al Escritorio. Si el programa está instalado a /bin...

Lo que lleva al problema #2. ¿Cómo empaquetar y ubicar el archivo en el instalador?. Con los íconos no tengo problema. Leí una entrada que hablaba de esto y sé que Gambas lo hace solo y funciona perfecto.

Mi idea era hacer un
Código:
Mkdir ("$home/MyNotesDb")

Primero (error: acceso prohibido) y luego ver de que manera copiar la base de datos a esa ubicación.

La idea es ya tener una base de datos creada con algunos ejemplos. Cosa que al abrir el programa ya se abra la base de datos.

Espero haber sido claro en mi pregunta Smile

Desde ya agradezco cualquier información que puedan dame.

Agrego.
Intenté esto al crear el instalador, pero tampoco.

[Imagen: O8Qyj6.Screenshot-20220904-165546.png]
(04-09-2022, 22:10)Ozymandias escribió: [ -> ]Cuando creo el ejecutable (por ejemplo en el escritorio). No se encuentra el archivo

Hola, si eso que te pasa es un error bastante usual.
Hay varias formas de abordar el problema pero todas tienen un punto en comun y es la creacion de un directorio donde poner la base de datos.
GAMBAS
  1. Public sAppDir As String = User.Home &/ ".config/mynotes"
  2.  
  3.  
  4. Public Sub Form_Open()
  5.  
  6.   ' 1 - Creando el directorio de trabajo
  7.   If Not Exist(sAppDir) Then
  8.     Mkdir sAppDir
  9.   '2a - Copiar la base de datos. Esta es la mas usada
  10.   Copy "./ejemplo.sqlite" To sAppDir &/ "mynotes.sqlite"
  11.  
  12.   '2b - Crear una base de datos usando un archivo SQL, esta es la que prefiero pero es mas complicada y extensa de desarrollar y solo se justifica si preferis trabajar con lenguaje SQL sobre un archivo de texto, pero si aun asi te interesa este método puedo ampliar el tema.
  13.  
  14.   '3 - Conectar con la base de datos
  15.   dbCon.Type = "sqlite3"
  16.   dbCon.Host = sAppDir
  17.   dbCon.Name = "mynotes.sqlite"
  18.   
  19.   Try dbCon.Open()



Listo, con esto deberia funcionar todo.
Luego para cerar el ejecutable o empaquetar sigues los pasos habituales y cuando el usuario abra por primera vez el programa se crera el andamiaje necesario.
Gracias!
Funcionó perfecto.

Tengo una última duda.
Por qué funciona así?
Código:
 If Not Exist(sAppDir) Then
    Mkdir sAppDir
 Endif
Pero no así?
Código:
Mkdir ("$home/MyNotesDb")
(acceso denegado)

Saludos!
(05-09-2022, 00:01)Ozymandias escribió: [ -> ]"$home/MyNotesDb"

Esto es lo que colocas en la terminal de Linux pero estas dentro del codigo gambas asi que si queres enviar ordenes a la terminal tenes que usar Shell o Exec po ejemplo:
GAMBAS
  1. Shell "$home/MyNotesDb"


Gracias!
¿ Sería más recomendable usar settings ?. ( Para el directorio donde se va a ubicar la base de datos )
Aunque puede que en este caso no sea necesario.
 
Cita:2b - Crear una base de datos usando un archivo SQL, esta es la que prefiero pero es mas complicada y extensa de desarrollar y solo se justifica si preferís trabajar con lenguaje SQL sobre un archivo de texto, pero si aun así te interesa este método puedo ampliar el tema.

Pero entonces no estarías usando código de programación de Gambas. Smile
O casi..ya que ese código lo ejecuta Gambas de alguna forma.
Alguna ventaja le veras.

Saludos