¿Donde ubicar la propiedad DB, dependiendo de la plataforma?

Hola a todos,
Soy novato en el uso de Xojo, pero no así en el tema de desarrollo, donde ya peinamos canas.
Probando con los ejemplos de conexión a base de datos para una aplicación de escritorio noto que en el correspondiente a SQLite, se instancia una propiedad DB directamente desde APP.
Luego en el código del botón de la ventana principal se conecta a la base, crea las tablas y hace las consultas. Todo perfecto.

Cuando intenté adaptar el ejemplo para una conexión Postgresql no funciona. En el momento de hacer la consulta dentro de la ventana principal me dice que APP.db es Nil
Cuando reviso el mismo ejemplo que provee Xojo, pero para Postgresql noto que la propiedad DB se indica dentro de la ventana principal (no desde APP).
Adapto mi código a este modo y santo remedio: me conecto a la base sin problemas.

¿Porqué esta diferencia y porqué en el caso de Postgres no puedo tener la conexión a la base definida a nivel de Aplicación?
Son dudas de novato simplemente.
Muchas gracias.

El ejemplo SQLite ‘SQLite (Desktop)’ usa App.db porque hay 2 ventanas en el programa.
El ejemplo de Postgres ‘PostgreSQL Basics’ tiene 1 ventana y para simplificar se usa la propiedad ahí mismo.

Debes tener algún error al adaptar la conexión Postgresql. Si compartes el ejemplo que tienes o el código que usas, alguien te podrá dar alguna idea de lo que hay que ajustar.

Saludos

Muchas gracias Alberto por tu respuesta.
Comparto el proyecto de testing.
Se probó en Mac y en Linux. En ambos casos la base de datos Postgresql es local y perfectamente accesible.
Es simplemente una tabla llamada labo que tiene tres columnas: intlabo integer, nombre: string y gc: string

Si modifico mi ejemplo, cambiando la propiedad db desde APP a mi ventana funciona perfecto.
Pero en el método GetProductos APP.db está en Nil,

Muchas gracias nuevamente!!

Un problema que tienes es:

Var db As New PostgreSQLDatabase

esto significa que estás creando una propiedad db en el método y no estás asignando la base de datos a la propiedad db de la aplicación. Si te fijas en el ejemplo de SQLite, aquí le asigna la base de datos a la propiedad en App

App.DB = New SQLiteDatabase

en el ejemplo de PostgreSQL así se asigna:

mDb = New PostgreSQLDatabase

en ninguno de los 2 usan Var para definirlo ya que eso indica que están creando una propiedad diferente.

Prueba cambiando a

db = New PostgreSQLDatabase

Entendido perfectamente. Lo modifiqué según lo que me comentas y funcionó perfecto.
Muchísimas gracias! Voy a aprendiendo y apreciando la herramienta.

1 Like