|
Página 1 de 2
|
Solicitud De Tutorial Para Ver Diferencias Lenguaje SQL / Clases Gambas Ded...
Autor |
Mensaje |
Shell
Analista Programador
Registrado: Marzo 2010
Mensajes: 5278
Edad: 53 Ubicación: Al otro lado de la pantalla
|
Solicitud De Tutorial Para Ver Diferencias Lenguaje SQL / Clases Gambas Dedicadas
Buenas!.
Más que un tutorial, se podía crear una especie de videoconferencia, tutorial, como se pueda discutir mejor y tratar el tema.
Mi idea es -aunque no suelo tocar mucho el tema de bases de datos- cuando las trato en Python, hago uso
directamente con Sqlite, de las instrucciones del lenguaje SQL. En gambas también puedo hacer uso del
lenguaje SQL.
Pero, la cuestión es que gambas tiene sus propias clases para tratar las bases de datos. Y seguramente habrá
usuarios de gambas que prefieran usar directamente SQL o usar las clases que tiene Gambas.
Uso SQL por que me vale para cualquier lenguaje que lo soporte.
No es algo "exclusivo" del lenguaje gambas. Eso es anclarse a un lenguaje y depender de funciones que solo ofrece
el lenguaje. Luego estas no valen para otros lenguajes.
¿ Ventajas / Desventajas / Diferencias ?. Eso es lo que me gustaría que viéramos. Como más os guste.
Saludos
=================== Gambas Básico
"No es un bug, es una característica no documentada"
|
#1 Jueves, 09 Junio 2016, 20:28 |
|
|
shordi
Analista Programador
Registrado: Septiembre 2009
Mensajes: 4982
Edad: 64 Ubicación: Albacete
|
Re: Solicitud De Tutorial Para Ver Diferencias Lenguaje SQL / Clases Gambas Dedicadas
El tema es tan extenso que no sé yo si sería productivo un tutorial o una videoconferencia... no se puede abarcar todas las implicaciones así de pronto. Mejor plantear temas concretos, digo. Repondiendo por partes:
1.- HAY que conocer SQL. Sí o sí. Es la herramienta universal para el acceso a las bases de datos. Este es un punto "sine qua non".
2.- Citar: Pero, la cuestión es que gambas tiene sus propias clases para tratar las bases de datos. Y seguramente habrá
usuarios de gambas que prefieran usar directamente SQL o usar las clases que tiene Gambas.
No es cuestión de preferir o no preferir. Es cuestión de usar bien la herramienta o no usarla bien, en la circunstancia dada. Un buen carpintero no dice "Yo utilizo siempre mi martillo gordo de tres kilos, lo prefiero". Un buen carpintero te dice eso de "Pásame el martillo pequeñito para éste clavo tan finito".
3.- Citar: Uso SQL por que me vale para cualquier lenguaje que lo soporte.
Eso no es correcto. SQL ES un lenguaje. De hecho es el lenguaje para hablar con la base de datos. Tu lenguaje de programación te dará, o no, la posibilidad de "mezclar" código SQL con su código, pero SQL se aprende y se maneja por sí mismo y no depende del lenguaje de programación: depende de la base de datos.
Cada base de datos (y aquí hablamos de tres SQLite, MySQL y PostGre), tiene su propia versión del SQL. O sea que si "aprendes" un SQL para una no te vale para los demás necesariamente. Tendrás que estar al tanto de la sintaxis de cada base de datos para usar SQL en según qué entorno estés trabajando. Y no me refiero sólo a la diferencia de sintaxis, que si "Insert into select" o "Select to Select" o cosas así, hablo de la manera en la que tienes que manejar la propia base de datos. Ahí tienes los "Pragmas" de SQLite o los comandos "Show" de Mysql, etc. Son cosas de planetas distintos.
4.- Citar: No es algo "exclusivo" del lenguaje gambas. Eso es anclarse a un lenguaje y depender de funciones que solo ofrece
el lenguaje.
Eso sería cierto si incumplieses el punto 1 (pero es sine qua non, recuerda).
¿Qué prefieres teclear unas instruciones SQL que luego sólo sirven para una base de datos o usar la capa de acceso a datos de gambas y que te sirva para cualquiera de los entornos conocidos?
Personalmente me quedo con la segunda opción por una inmensa ventaja "Reusabilidad de código". Utiliza las clases de gambas, asegúrate que tu módulo/función/control/componente/lo-que-sea está bien escrito y no tiene bugs... y olvídate de la base de datos. Al inicio de la aplicación le dices eso de Miconnection.type = "laquehagafalta" y tu código funcionará en cualquier programa y cualquier entorno que uses.
(Como dice el Mota: "No te pido que lo superes, iguálamelo" )
5.- Citar: Luego estas no valen para otros lenguajes.
Por supuesto que no. Para otros lenguajes utiliza las herramientas de los otros lenguajes. Bastante cuesta ya que el código sea reusable de un programa a otro dentro del mismo lenguaje como para meterse en honduras de hacerlo entre varios distintos.
¿Si en Python existe una clase de abstración de la base de datos no la usarías porque "lo que haga no me vale para gambas"? Eso es ponerte palos en tus propias ruedas (El refrán que siempre les remarcaba a mis hijos de pequeños era "Gato con guantes no caza ratones". En éste contexto significa: "Utiliza todas las ventajas que te ofrezca el entorno en que te mueves".
Otro tema es la situación de quien está aprendiendo moviéndose entre dos o más mundos paralelos. SQL parece una herramienta común a ambos: Maravilloso. Pero fíjate que he situado el punto 1 en primer lugar y separado de todo lo demás. No puedes usar un entorno de programación para aprender SQL. Eso es hacerlo al revés: SQL es prioritario. Cuando te metes a programar en cualquier lenguaje y necesitas lidiar con bases de datos debes llevar el SQL aprendido de casa.
6.- Por último ¿Debemos utilizar siempre los métodos de gambas y nunca las sentencias SQL imbricadas en el código gambas? Pues... no.
Utilizar los métodos de gambas nos aporta reusabilidad de código, y por tanto velocidad y coherencia de desarrollo pero, por otro lado, son ligeramente más lentas de uso que el SQL "a pelo" y, en según qué situaciones, mucho más que ligeramente. Sobre todo en transferencias masivas de unas tablas a otras, copias de seguridad, etc. Adaptar tus rutinas y métodos de acceso a la herramienta adecuada es cuestión del buen programador.
Como indicación (que no como ley absoluta) yo uso los métodos de gambas para todo lo que sea manejo de registros individuales (inser, update, create) y el SQL directamente para los manejos masivos... pero no siempre en el primer caso y no siempre en el segundo tampoco, depende de cada caso concreto.
=================== No podemos regresar
última edición por shordi el Viernes, 10 Junio 2016, 09:21; editado 1 vez
|
#2 Viernes, 10 Junio 2016, 09:21 |
|
|
Shell
Analista Programador
Registrado: Marzo 2010
Mensajes: 5278
Edad: 53 Ubicación: Al otro lado de la pantalla
|
Re: Solicitud De Tutorial Para Ver Diferencias Lenguaje SQL / Clases Gambas Dedicadas
Gracias Shordi por comentar y aunque he leído tu respuesta la tengo que leer con más tranquilidad.
A ratos estoy estudiando a ritmo de tortuga un poco de base de datos. ( Una vez más ).
Os voy a mostrar un ejemplo base que está hecho en Python y luego os mostraré el símil que estoy haciendo en Gambas.
La idea de la bases de datos es muy sencilla, conocer el crecimiento de la población de cada País.
Como veo tan sencillo el código en Python busco un código similar en Gambas.
El código en Python lo subiré más tarde.
' gambas class file
Private conexion As Connection
Private basenombre As String = "poblacion.db"
Public Sub Form_Open()
AbrirBase()
End
Public Sub AbrirBase()
conexion = New Connection
With conexion
.Type = "sqlite3"
.Host = User.Home &/ "Recursos/Bases"
.Name = ""
End With
conexion.Open
If Not conexion.Databases.Exist(basenombre) Then
conexion.Databases.Add(basenombre)
Wait 0.3
conexion.Close
conexion.Name = basenombre
conexion.Open
Endif
NuevoPais()
End
Public Sub NuevoPais()
Dim Tabla As Table
If Not conexion.Tables.Exist("PoblacionPorRegion") Then
Tabla = conexion.Tables.Add("PoblacionPorRegion")
With Tabla.Fields
.Add("idRegion", db.Serial)
.Add("Region", db.String, 50)
.Add("Poblacion", db.Integer,, 1)
End With
Tabla.PrimaryKey = ["idRegion"]
Tabla.Update
Endif
conexion.Exec("insert into PoblacionPorRegion values (&1, &2, &3)", Null, "Africa Central", 330993)
CerrarConexion()
End
Public Sub CerrarConexion()
If conexion = Null Then Return
conexion.Close()
conexion = Null
End
A pesar de que el código es pequeño, en Python lo es mucho más. No sé si es la forma de como se hace en gambas,
o que añado código que no es necesario. Cada lenguaje tendrá su forma de hacerlo. Seguramente en gambas este
mismo código es posible hacerlo de otra forma.
Aparenta ser muy simple, se crea una tabla, se ingresa un registro y se cierra la conexión.
Seguramente en C sera distinto, en Java sera distinto...
Lo que realmente intento es mientras aprendo el uso de bases de datos con sqlite3 en Python, poder hacer lo mismo en Gambas.
Es probable que en el propio lenguaje SQL haya cosas que se hacen automáticamente y pueda que en gambas haya que especificarlo mas.
Saludos
=================== Gambas Básico
"No es un bug, es una característica no documentada"
|
#3 Viernes, 10 Junio 2016, 21:35 |
|
|
shordi
Analista Programador
Registrado: Septiembre 2009
Mensajes: 4982
Edad: 64 Ubicación: Albacete
|
Re: Solicitud De Tutorial Para Ver Diferencias Lenguaje SQL / Clases Gambas Dedicadas
¿Por qué esto?
conexion.Exec("insert into PoblacionPorRegion values (&1, &2, &3)", Null, "Africa Central", 330993)
Si vas a usar directamente SQL usalo para todo (Create table PoblaciónPorRegion etc. etc.) Si vas a usar los objetos de gambas úsalos.
Algo así:
dim r as result
r=conexión.create("PoblacionPorRegion")
r!idregion=null (si es que es autoincrement)
r!region ="Africa Central"
r!codigo=330993
r.update
=================== No podemos regresar
|
#4 Viernes, 10 Junio 2016, 21:55 |
|
|
Shell
Analista Programador
Registrado: Marzo 2010
Mensajes: 5278
Edad: 53 Ubicación: Al otro lado de la pantalla
|
Re: Solicitud De Tutorial Para Ver Diferencias Lenguaje SQL / Clases Gambas Dedicadas
Citar:
Si vas a usar directamente SQL usalo para todo (Create table PoblaciónPorRegion etc. etc.) Si vas a usar los objetos de gambas úsalos.
Pues por que parecía más breve en la forma de hacerlo.
Iba a subir un código parecido al que has puesto.
¿ No te parece algo más complicada la forma con objetos de gambas ?. En parte ahora estoy mezclando una cosa con otra sin darme cuenta.
Muy de acuerdo que gambas actúa para el usuario de forma transparente para la gestión de las bases de datos. Eso si esta bien.
Tampoco tengo ni idea si Python tiene una forma al igual que gambas de usar objetos.
En este caso importa un modulo para tratar la gestión de una base de sqlite3.
# Uso de bases de datos en Python3
import sqlite3
con = sqlite3.connect('population.db')
cur = con.cursor()
cur.execute('CREATE TABLE PobPorRegion(Region TEXT, Poblacion INTEGER)')
cur.execute('INSERT INTO PobPorRegion VALUES("Centro Africa", 330993)')
cur.execute('INSERT INTO PobPorRegion VALUES("Sureste Africa", 743112)')
cur.execute('INSERT INTO PobPorRegion VALUES("Japon", 100562)')
con.commit()
Pero en ese código no usa un campo como clave primaria. Normalmente en la mayoría de las bases de
datos se debería usar. ( Puedo estar anticipándome a partes del ejercicio ).
Supongo que se podría haber creado en gambas la tabla de esta forma:
..
conexion.Exec("CREATE TABLE PopPorRegion(idRegion int, Region text, Poblacion int)")
..
Si vemos la clase conexión, el método exec está compuesto por:
En cambio yo no he usado argumentos para crear la tabla .
Saludos
=================== Gambas Básico
"No es un bug, es una característica no documentada"
|
#5 Sabado, 11 Junio 2016, 00:23 |
|
|
shordi
Analista Programador
Registrado: Septiembre 2009
Mensajes: 4982
Edad: 64 Ubicación: Albacete
|
Re: Solicitud De Tutorial Para Ver Diferencias Lenguaje SQL / Clases Gambas Dedicadas
Esto es gambas:
conexion = New Connection
conexion.Type = "sqlite3"
conexion.Host = User.Home &/ "Recursos/Bases"
conexion.Open
conexion.exec("REATE TABLE PobPorRegion(Region TEXT, Poblacion INTEGER)")
conexion.exec("INSERT INTO PobPorRegion VALUES('Centro Africa', 330993)")
conexion.exec("INSERT INTO PobPorRegion VALUES('Sureste Africa', 743112)")
conexion.exec("INSERT INTO PobPorRegion VALUES('Japon', 100562)")
No veo la diferencia con python. Más aún, no veo ni gambas ni pithon: sólo veo SQL.
Creo que te equivocas al hacer esas comparativas. En el cole ya nos decían eso de no mezcles manzanas y peras.
gambas te ofrece lo mismo que python y además sus propias clases con sus propias ventajas. Si el tema lo vas a basar en lo que hay que escribir o no... bueno pues eso.
=================== No podemos regresar
última edición por shordi el Sabado, 11 Junio 2016, 00:37; editado 1 vez
|
#6 Sabado, 11 Junio 2016, 00:36 |
|
|
Shell
Analista Programador
Registrado: Marzo 2010
Mensajes: 5278
Edad: 53 Ubicación: Al otro lado de la pantalla
|
Re: Solicitud De Tutorial Para Ver Diferencias Lenguaje SQL / Clases Gambas Dedicadas
Shordi:
Hace tiempo ya no sé, si en la nueva versión Gambas3 se solucionó un problema que tenía gambas al crear la base de datos.
Por ejemplo:
Si no añado este código no se crea el archivo de la base de datos.
El código que me has comentado, me da problemas diciendo que la tabla no existe.
Ocurre en la segunda consulta de inserción.
En cambio la primera línea si funciona. Y es que el nombre de la tabla es el mismo.
No tiene nada que ver que este en minúscula "exec" , se produce el mismo error.
Saludos
=================== Gambas Básico
"No es un bug, es una característica no documentada"
última edición por Shell el Sabado, 11 Junio 2016, 08:40; editado 1 vez
|
#7 Sabado, 11 Junio 2016, 08:38 |
|
|
Shell
Analista Programador
Registrado: Marzo 2010
Mensajes: 5278
Edad: 53 Ubicación: Al otro lado de la pantalla
|
Re: Solicitud De Tutorial Para Ver Diferencias Lenguaje SQL / Clases Gambas Dedicadas
Ya he visto el error, en la primera usa pop...y en la siguiente que has escrito en español, es pob.
Population, Población.
Y es que a veces no se ve tan fácilmente.
Eso está correcto. Lo que si recordarte el código de antes, que si el, no se crea el archivo.
Observo que tambien en SQL existe:
¿ Solo el nombre de la base de datos ?. ¿ Sin ruta y nada más ?.
Saludos
=================== Gambas Básico
"No es un bug, es una característica no documentada"
última edición por Shell el Sabado, 11 Junio 2016, 10:19; editado 1 vez
|
#8 Sabado, 11 Junio 2016, 10:15 |
|
|
shordi
Analista Programador
Registrado: Septiembre 2009
Mensajes: 4982
Edad: 64 Ubicación: Albacete
|
Re: Solicitud De Tutorial Para Ver Diferencias Lenguaje SQL / Clases Gambas Dedicadas
Citar: Ya he visto el error, en la primera usa pop...y en la siguiente que has escrito en español, es pob.
Population, Población.
No veo el error en mi post, de hecho es un copia-pega del que subiste tú en python. Se habrá producido cuando lo transcribiste...
Citar: ¿ Solo el nombre de la base de datos ?. ¿ Sin ruta y nada más ?.
No confundas la base de datos con el servidor de base de datos. Este viene definido por la clase connection (type, host, user, etc.) de la cual el nombre de la base de datos es sólo un parámetro más.
Esto es evidente en MySql, donde el servidor es otro ordenador o donde hemos tenido que instalar el mysqlserver, configurarlo y demás.
Con SQLite, la cosa queda más disimulada. El servidor es el proceso de Sqlite rulando en tu máquina. El host es tu propia máquina, mejor dicho una carpeta de tu propia máquina. El user es tu usuario del sistema y, normalmente, no hay password. El nombre de la base de datos es el nombre del fichero de sqlite.
Si te das cuenta el sistema ya sabe (aunque no recuerdo si por defecto el host es el user.home o hay que facilitarselo) todo lo que necesita excepto el nombre del fichero.
Un secreto te cuento: No se puede crear una base de datos sqlite vacía. Internamente gambas usa el truco de crear la base con una tabla temporal y después borrar la tabla. Entonces tienes una base vacía...
=================== No podemos regresar
|
#9 Sabado, 11 Junio 2016, 10:31 |
|
|
Shell
Analista Programador
Registrado: Marzo 2010
Mensajes: 5278
Edad: 53 Ubicación: Al otro lado de la pantalla
|
Re: Solicitud De Tutorial Para Ver Diferencias Lenguaje SQL / Clases Gambas Dedicadas
Citar:
No veo el error en mi post, de hecho es un copia-pega del que subiste tú en python. Se habrá producido cuando lo transcribiste...
Cierto.
Citar:
Un secreto te cuento: No se puede crear una base de datos sqlite vacía. Internamente gambas usa el truco de crear la base con una tabla temporal y después borrar la tabla. Entonces tienes una base vacía...
Entonces por eso, necesitare siempre el código que te comentaba, ya que si no lo usaba, no creaba el archivo de la base de datos, supongo.
He estado por empaparme un libro de SQL de aprendizaje rápido.
Head First SQL
Pero parece orientado a MySQL. Me gustaría algo mas que se adapte a mis necesidades y es que Sqlite3 es suficiente para mi.
A menos que me vea necesitado de aprenderlo.
Saludos
=================== Gambas Básico
"No es un bug, es una característica no documentada"
|
#10 Sabado, 11 Junio 2016, 13:13 |
|
|
|
Temas parecidos
Temas parecidos
|
Página 1 de 2
|
Usuarios navegando en este tema: 0 registrados, 0 ocultos y 1 invitado Usuarios registrados conectados: Ninguno
|
No puede crear mensajes No puede responder temas No puede editar sus mensajes No puede borrar sus mensajes No puede votar en encuestas No puede adjuntar archivos Puede descargar archivos No puede publicar eventos en el calendario
|
|
|
|
|