Marcos   13-02-2026, 00:43
#1
Hola, buen día chicos:

Hace un par de meses venia trabajando en un proyecto personal para catalogar imágenes y dejar de tener todo perdido en el PC. ademas de tener la opción de crear un catalogo compartido con otros usuarios de la misma maquina. Bajo ese marco de trabajo tengo una rutina que hasta la versión 3.19 en kdeNeon me funcionaba perfecto.

Por cosas de la vida actualice mi maquina a Manjaro con plasma y aquí esta la versión 3.21 de Gambas3. Me toco cambiar los componentes gb.db a gb.db2.

La aplicación con la BD creada sigue funcionando, agrego, elimino, etc., pero al iniciar desde cero la aplicación donde debe crear la BD no hace nada por que la sección de creación de BD no funciona y no envía mensaje de error, salvo cuando reintenta abrir la BD y no la encuentra. 

$DB.Databases.Add(Constants.DATABASE_NAME)  <== esta linea no esta haciendo nada ni enviando mensaje alguno hacia afuera


Sera error de la nueva versión?, error de los nuevos componentes?
este código lo rescate desde el tutorial de http://jsbsan.blogspot.com.es/ 

Código:
Private Sub CreateDatabase()
  'Crear conexión temporal para crear la BD
  $DB = New Connection
  $DB.Type = Constants.DATABASE_SQLITE3
  $DB.Host = $DbLibraryDirectory
  $DB.Name = "" 'Liberamos el nombre para poder crear la BD física
  $DB.Open()
  If Error Then
    $Log4Gambas.Fatal(("No se puede abrir conexión para crear BD:") & " " & Error.Text)
    ERROR.Propagate
  Endif
  'Ya sabemos que el archivo de base de datos no existe, aqui preguntamos via connect
  If Not $DB.Databases.Exist(Constants.DATABASE_NAME) Then
    '' NOTE: Aqui ocurre la magia, se crea la base de datos
    $DB.Databases.Add(Constants.DATABASE_NAME)
    Wait 0.05 ' Pequeña pausa para asegurar creación fisica del archivo
    If Error Then
      $Log4Gambas.Fatal(("No se puede crear base de datos:") & " " & Error.Text)
      $DB.Close()
      ERROR.Propagate
    Endif
  Endif
  ' cerramos la conexion para asegurar soltarla y ahora usar el nombre
  $DB.Close()
  ' Reconectar con el nombre de la BD y crear esquema
  $DB.Name = Constants.DATABASE_NAME
  ' Volvemos a conectarnos
  $DB.Open()
  If Error Then
    $Log4Gambas.Fatal(("No se puede reabrir BD recién creada:") & " " & Error.Text)
    ERROR.Propagate
  Endif
  $DB.Close()
  $Log4Gambas.Info(("Base de datos creada exitosamente"))
End
Shordi   13-02-2026, 12:32
#2
El código es bueno, al menos lo he probado así:
Código:
Private $DB As Connection

Private Sub CreateDatabase()
  'Crear conexión temporal para crear la BD

  $DB = New Connection
  $DB.Type = "sqlite"
  $DB.Host = User.Home &/ "Escritorio"
  $DB.Name = "" 'Liberamos el nombre para poder crear la BD física
  $DB.Open()
  If Error Then
    Print "No se puede abrir conexión para crear BD:" & " " & Error.Text
    ERROR.Propagate
  Endif
  'Ya sabemos que el archivo de base de datos no existe, aqui preguntamos via connect
  If Not $DB.Databases.Exist("nuevaBase") Then
    '' NOTE: Aqui ocurre la magia, se crea la base de datos
    $DB.Databases.Add("nuevaBase")
    Wait 0.05 ' Pequeña pausa para asegurar creación fisica del archivo
    If Error Then
      Print "No se puede crear base de datos:" & " " & Error.Text
      $DB.Close()
      ERROR.Propagate
    Endif
  Endif
  ' cerramos la conexion para asegurar soltarla y ahora usar el nombre
  $DB.Close()
  ' Reconectar con el nombre de la BD y crear esquema
  $DB.Name = "nuevaBase"
  ' Volvemos a conectarnos
  $DB.Open()
  If Error Then
    Print "No se puede reabrir BD recién creada:" & " " & Error.Text
    ERROR.Propagate
  Endif
  $DB.Close()
  Print "Base de datos creada exitosamente"

End
 y me funciona perfectamente tanto GTK como QT. Si no te funciona el problema debe estar en la definición de esas constantes que manejas... o en la versión de gambas que utilices. Yo uso la última Oficial sobre Linux Mint 22.3

Algo del entorno, pero no de la función de creación. Ya nos cuentas.

Saludos

No podemos regresar
guizans   13-02-2026, 22:43
#3
Por lo que veo, tal como dice Shordi, el código parece bueno. Revisa esas variables del módulo "Constants" a lo mejor el error está ahí.

Un saludo.
Marcos   17-02-2026, 02:28
#4
Gracias chicos por los consejos.
Había hecho una refactorización de directorios y en la parte de User.Home borre el "&/" entonces estaba apuntando a un directorio que no existía, y al hacer debug no era capas de darme cuenta, ..
Cosas de la vida.. casi como que me falto un ;(punto y coma) al final de la linea.
da paso, quiero decir que este foro ayuda muchísimo a sacar ideas y aclarar dudas.
guizans   17-02-2026, 21:42
#5
Gracias. Somos pocos pero hacemos lo que podemos y ayudamos cuando sabemos.

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