Ozymandias   04-09-2022, 22:10
#1
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]
Última modificación: 05-09-2022, 00:04 por Ozymandias.
tincho   04-09-2022, 23:42
#2
(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.
Código:
Public sAppDir As String = User.Home &/ ".config/mynotes"

Public dbCon As New Connection
Public sQuery As String

Public Sub Form_Open()

  ' 1 - Creando el directorio de trabajo
  If Not Exist(sAppDir) Then
    Mkdir sAppDir
  Endif
  '2a - Copiar la base de datos. Esta es la mas usada
  Copy "./ejemplo.sqlite" To sAppDir &/ "mynotes.sqlite"

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

  '3 - Conectar con la base de datos
  dbCon.Type = "sqlite3"
  dbCon.Host = sAppDir
  dbCon.Name = "mynotes.sqlite"
  
  Try dbCon.Open()
End

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.

1 Saludo.
Ozymandias   05-09-2022, 00:01
#3
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!
Última modificación: 05-09-2022, 00:06 por Ozymandias.
tincho   05-09-2022, 00:09
#4
(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:
[code]

1 Saludo.
Ozymandias   05-09-2022, 00:14
#5
Gracias!
Shell   05-09-2022, 20:25
#6
¿ 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
Última modificación: 05-09-2022, 20:28 por Shell.

"El conocimiento es la mejor inversión que se puede hacer" - Abraham Lincoln
  
Usuarios navegando en este tema: 1 invitado(s)
Powered By MyBB, © 2002-2024 MyBB Group.
Made with by Curves UI.