Portal    Foro    Buscar    FAQ    Registrarse    Conectarse


Publicar nuevo tema  Responder al tema 
Página 1 de 2
Ir a la página 1, 2  Siguiente
 
Solicitud De Tutorial Para Ver Diferencias Lenguaje SQL / Clases Gambas Ded...
Autor Mensaje
Responder citando   Descargar mensaje  
Mensaje 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"
 
Shell - Ver perfil del usuarioEnviar mensaje privadoVisitar sitio web del usuario 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje 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 
shordi - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje 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"
 
Shell - Ver perfil del usuarioEnviar mensaje privadoVisitar sitio web del usuario 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje 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
 
shordi - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje 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:

Function Exec ( Request As String, Arguments As , ... ) As Result
 


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"
 
Shell - Ver perfil del usuarioEnviar mensaje privadoVisitar sitio web del usuario 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje 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 
shordi - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje 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.
  If Not conexion.Databases.Exist(basenombre) Then
    conexion.Databases.Add(basenombre)
    Wait 0.3
    conexion.Close
    conexion.Name = basenombre
    conexion.Open
  Endif
 


El código que me has comentado, me da problemas diciendo que la tabla no existe.  
Ocurre en la segunda consulta de inserción.

 errornoexistelatabla

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 
Shell - Ver perfil del usuarioEnviar mensaje privadoVisitar sitio web del usuario 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje 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:

CREATE DATABASE dbname;
 


¿ 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 
Shell - Ver perfil del usuarioEnviar mensaje privadoVisitar sitio web del usuario 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje 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
 
shordi - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje 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"
 
Shell - Ver perfil del usuarioEnviar mensaje privadoVisitar sitio web del usuario 
Volver arribaPágina inferior
Mostrar mensajes anteriores:    
 
OcultarTemas parecidos
Tema Autor Foro Respuestas último mensaje
No hay nuevos mensajes Que Clases Hacen Falta En Gambas Para Que ... v3ctor General 3 Domingo, 26 Julio 2015, 19:08 Ver último mensaje
v3ctor
No hay nuevos mensajes Tutorial De Clases Contenedoras Auto-ajust... shordi General 29 Domingo, 05 Junio 2016, 11:58 Ver último mensaje
shordi
No hay nuevos mensajes [C] Diferencias Entre El Lenguaje C Y El L... Shell C/C++ 2 Jueves, 29 Diciembre 2016, 11:28 Ver último mensaje
Shell
No hay nuevos mensajes Solicitud De Ejemplo Y Tutorial Para Leer ... tincho Aplicaciones/Fragmentos de Código 21 Miercoles, 14 Noviembre 2018, 23:20 Ver último mensaje
tincho
 

Publicar nuevo tema  Responder al tema  Página 1 de 2
Ir a la página 1, 2  Siguiente

Usuarios navegando en este tema: 0 registrados, 0 ocultos y 1 invitado
Usuarios registrados conectados: Ninguno


 
Lista de permisos
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



  

 

cron