Página 1 de 1

Migrando a MariaDB

Publicado: Lun Dic 28, 2020 12:25 pm
por ramonzea
Estoy empezando a pasar mi aplicación a BBDD MariaDB, y tengo un detalle:
estoy usando campos BIT, para usarlos como campos lógicos, pero al momento de usarlo en un IF no ejecuta la comparación correctamente, si lo verifico en el depurador me devuelve .T., pero en la ejecución lo toma como .F..

Qué estoy haciendo mal?

Otra duda es como manejar la conexión a la BBDD, debo hacerlo al inicio de la aplicación y mantenerla viva? o debo hacer la conexión solo cada vez que debo leer o grabar información?

Gracias.

Re: Migrando a MariaDB

Publicado: Lun Dic 28, 2020 5:05 pm
por gabo1
Ramon

Código: Seleccionar todo

Nombre      Tipo        Longitud Valor Predeterminado
tiene_iva    TinyInt     1               '0' (False)  '1' (True)

Código: Seleccionar todo

// Al inicio de tu aplicacion 
        WITH OBJECT AppData:oMySQLDS:= TMariaDBDataSource():New()  // DataSource Principal
             :cHost:= AllTrim(::oSQLEmpresas:servidor_ip)
             :cPassword:= AllTrim(::oSQLEmpresas:servidor_password)
             :cUser:= AllTrim(::oSQLEmpresas:servidor_user)
             :cDataBase:= AllTrim(::oSQLEmpresas:servidor_db)
             :nPort:= ::oSQLEmpresas:servidor_port
             :lConnected:= .F.
             :lDisplayErrors:= .T.
             :Create()
        END WITH     
// En el primer codigo que te envie tiene un comentario // SPLASH es el primer form tipo splash y es donde ejecuto la conexion posteriormente en el Initialize de tus forms // o ABC usas el datasource principal con los dataset que vas utilizar

  WITH OBJECT ::oSQLEmpresas
      :oDataSource:= AppData:oMySQLDS   // Aqui esta el datasource 
      :cSelect:= "SELECT * FROM empresas WHERE id_empresa='"+ AppData:cIDCompany + "'"
      :lDisplayErrors := .T.
      :Open()
      IF !:lOpen
         WaitOff()
         MsgStop( "ERROR!: No es posible abrir la tabla de Empresas", "Error de Conexión.." )
         RETURN NIL
      ENDIF
  END
Saludos!

Re: Migrando a MariaDB

Publicado: Mar Dic 29, 2020 5:10 am
por ramonzea
Gracias nuevamente, pero en el inicio queda
AppData:oMySQLDS:lConnected:= .F.

Y en los Forms a los TSQLQUERY se asigna el DataSource principal, pero sigue con el el mismo valor, yo hacía en los primeros procesos que que he desarrollado es:

if ( AppData:oMySQLDS:Connect() )
::::
Abro los TSQLQUERY y hago las lecturas y grabaciones
::::
AppData:oMySQLDS:Disconnect()
End

o si debo hacer
AppData:oMySQLDS:Connect()
y mantener la conexión viva con el MY_SQLPING(), según he leído.

Saludos.

Re: Migrando a MariaDB

Publicado: Mié Dic 30, 2020 11:10 am
por Ariel
Ramon,

AppData:oMySQLDS:lConnected:= .t.

debe quedar abierto para usarlo en la app

Saludos.

Re: Migrando a MariaDB

Publicado: Mié Feb 03, 2021 10:42 pm
por ramonzea
Por qué al leer:

aPrecios := :QueryArray("Select descripcion, utilidad, id_precio from articuloprecios " + ;
" Where id_almacen = " + NToC(aAlmacen[1]) + " and " + ;
" id_articulo = " + NToC(::nIdProducto) + " ")

donde id_precio es 0,1,2,3,4,5, me regresa id_precio como boleano?
idprecio TinyInt

Gracias.

Re: Migrando a MariaDB

Publicado: Mié Feb 03, 2021 11:09 pm
por hgarciaj
Ramón,
Xailer le da tratamiento a los campos tynit como lógicos, lo mejor es usar smallint para numéricos enteros no muy grandes,
por otro lado te sugiero usar el método BuildSQLST para que los parámetros que vaya a usar tu query no tengas que convertirlos, así la instrucción:
QueryArray("Select descripcion, utilidad, id_precio from articuloprecios " + ;
" Where id_almacen = " + NToC(aAlmacen[1]) + " and " + ;
" id_articulo = " + NToC(::nIdProducto) + " ")
la podrias hacer en dos pasos
cComand:="Select descripcion, utilidad, id_precio from articuloprecios Where id_almacen = ? and id_articulo = ? "
cCommand:=:buildSQLST(cCommand,aAlmacen[1],::nIdProducto)
aPrecios:=:QueryArray(cCommand)
el método hace las conversiones necesarias de acuerdo al tipo de dato que sea el parámetro que se envíe

Re: Migrando a MariaDB

Publicado: Mié Feb 03, 2021 11:31 pm
por ramonzea
Gracias, ahora si va perfecto.