Shell   29-12-2022, 15:10
#1
Buenas!.

Revisando una antigua base de datos que me sirvió para las que estoy liado ahora, encontré que podía hacer la consulta de inserción tanto con la sentencia
SQL como un método de la clase Result.

Código:
 'Si lo hacemos con SQL podemos hacer:
    'Try hConn.Exec("insert into datos values (&1,&2,&3,&4,&5,&6)", Null, TxtTitulo.Text, TxtAutor.Text, CDate(TxtFecha.Text), CFloat(TxtPrecio.Text), TxtDecripcion.Text)

    'Si lo hacemos usando los métodos de la clase result.
    HResul = hConn.Create("datos")
    HResul["id"] = Null
    HResul["titulo"] = TxtTitulo.Text
    HResul["autor"] = TxtAutor.Text
    HResul["fecha"] = TxtFecha.Value
    HResul["precio"] = TxtPrecio.Text
    HResul["descripcion"] = TxtDecripcion.Text
    HResul.Update()
    hConn.Commit()

Uso más SQL ya que es propio del lenguaje y no de un lenguaje de programación concreto.
Imaginar que creo la base de datos para Gambas y ahora hago lo mismo para Python y luego para Java, etc, etc.
Entonces cada lenguaje puede tener una clase que ( como veis parece que se acorta más con la sentencia SQL). ¿ No es mejor algo más universal ?.

En el caso de usar Result en Gambas, lo más probable es que esto lo haga independiente del gestor de base de datos. Puede ser el motivo de su uso.

Saludos
Última modificación: 29-12-2022, 15:11 por Shell.

"El conocimiento es la mejor inversión que se puede hacer" - Abraham Lincoln
Shordi   30-12-2022, 19:31
#2
Cita:En el caso de usar Result en Gambas, lo más probable es que esto lo haga independiente del gestor de base de datos. Puede ser el motivo de su uso.
Exacto. Ese es el único motivo. Usar sentencias SQL directamente es, incluso, más rápido pero atas el programa a ese tipo de base de datos y su modificación, bien porque ampliamos a una BDD más potente o porque haya actualizaciones en el dialecto SQL de la versión de la BDD, serían causa de muchos problemas en todos los programas que la usen. Utilizando las clases de gambas sólo requerirían cambiar la propiedad de la clase connection en el primer caso y la actualización del módulo de gambas en el segundo. Después de eso, recompilar y listo.


Saludos.
Última modificación: 30-12-2022, 19:38 por Shordi.

No podemos regresar
Shell   05-01-2023, 16:44
#3
Aunque no lo he estudiado bien, ayer intenté hacer una consulta con la clase Result y el método find pero no obtuve lo que quería,
si lo logré con el método exec. Pero entonces no valdría para otro motor.

De la ayuda de Gambas sobre gb.db dice:
 
Cita: 
This component creates an intermediate layer between the specific server and your program, so that you can use exactly the same code whatever database backend you decide to use.

This goal is reached only if:
You create your database by using the database manager or by using this component.
You use the Find, Create and Edit methods.
You don't put SQL values directly in the request, but use the substitution feature of the previous methods.
You don't use the Exec method, that lets you send SQL request directly to the backend, so that you can access its specific features.

If you don't need database independence, do as you like! :-)

Aunque luego diga al final que lo hagamos como queramos si no necesitamos independencia del tipo de base de datos.

Estoy intentando de seguir la filosofía de la ayuda, aunque por ahora solo uso sqlite3.

El ejemplo. Tengo cuatro registros que se rellenan con datos de empleados. Hay dos hombres y dos mujeres.
Entonces quiero contar cuantos pertenecen a mujeres. Lo hago así:

[code]

Pero luego a la hora de hacerlo con el método find de la clase result, no acabo de lograrlo,por falta de uso de este método.
¿ Cómo lo llevo a hacerlo con la clase result y el método find ?.

Estuve leyendo el antiguo foro de Gambas y las explicaciones de Soplo.

La clase conection

¿ En realidad vosotros seguís esa filosofía (usar solo la clase Result) ?. O usáis el método exec por que no tenéis más remedio. ( En casa del herrero..  Shy )
Con esto quiero decir, ¿ Puedo usando solo la clase result y sus métodos parar lograr la mayoría de las consultas SQL ?.

Saludos

"El conocimiento es la mejor inversión que se puede hacer" - Abraham Lincoln
Shordi   06-01-2023, 11:09
#4
Cita:¿ En realidad vosotros seguís esa filosofía (usar solo la clase Result) ?. O usáis el método exec por que no tenéis más remedio. ( En casa del herrero..  Shy )
Con esto quiero decir, ¿ Puedo usando solo la clase result y sus métodos parar lograr la mayoría de las consultas SQL ?.
 
Primero una puntualización: Los métodos exec, find, create y delete no son de la clase result, son de la clase Connection. Una instancia de la clase result es lo que devuelven esos métodos (menos delete por razones obvias).

Lo que aquí se dirime es la manera de hacer llegar nuestra consulta al motor de la base de datos. El asunto de si nuestro programa va a ser escalado o no a otro tipo de base de datos, creo que queda para aplicaciones comerciales de amplia distribución. Es decir, si no usas el método exec, puedes distribuir tu programa entre clientes que dispongan de sqlite o Oracle o MariaDB o MySql indistintamente. En tal caso debes proveer a tu programa un mecanismo de configuración de los parámetros de la clase Connection y ya tienes un programa de amplia distribución.
Si tus programas no aspiran a eso o, como me ocurría a mí en mi vida laboral, las bases de datos también están a tu cargo, puedes olvidarte de eso y utilizar sólo la clase exec, que para eso está. Sin embargo la clase exec puede ser muy pejiguera en ciertas cuestiones, como las comillas, para soslayar eso debes usar los parámetros reemplazables, que te libra de todo ese pantanoso asunto.
Con ello, tu sentencia quedaría asi:
Código:
[code]
En este caso donde seleccionas sólo por una letra puede parecer excesivo, pero imagina que buscas por apellidos y que estás a expensas de lo que teclee el usuario en un formulario de búsquedas. O que tienes que hacer selecciones por un montón de campos, o que tienes un campo numérico (en el que no escribes las comillas, claro) y el usuario te teclea letras, etc. etc. Con los parámetros reemplazables te ahorras esos errores... o consigues un error generado por la B.DD más específico que "Error de sintaxis".

Saludos

No podemos regresar
Shell   07-01-2023, 20:29
#5
(06-01-2023, 11:09)Shordi escribió: Primero una puntualización: Los métodos exec, find, create y delete no son de la clase result, son de la clase Connection. Una instancia de la clase result es lo que devuelven esos métodos (menos delete por razones obvias).

Cierto. De ahí comentaba el post de Soplo sobre la clase Connection.
 
(06-01-2023, 11:09)Shordi escribió: Si tus programas no aspiran a eso o, como me ocurría a mí en mi vida laboral, las bases de datos también están a tu cargo, puedes olvidarte de eso y utilizar sólo la clase exec, que para eso está

Supongo que te viste en la necesidad de cambiar o usar distintos gestores de bases de datos. ( Según necesidad, claro ).
Eso probablemente afectaría al método exec que habías diseñado.

El tema de usar parámetros reemplazables es algo que tendré que ir viendo según voy aprendiendo a usar sqlite con Gambas.

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