Este foro usa cookies
Este foro utiliza cookies para almacenar su información de inicio de sesión si está registrado y su última visita si no lo está. Las cookies son pequeños documentos de texto almacenados en su computadora; las cookies establecidas por este foro solo se pueden usar en este sitio web y no representan ningún riesgo de seguridad. Las cookies en este foro también rastrean los temas específicos que ha leído y la última vez que los leyó. Si Ud. continúa navegando, entenderemos que acepta todas las cookies.

Se almacenará una cookie en su navegador, independientemente de la elección, para evitar que se le vuelva a hacer esta pregunta. Podrá cambiar la configuración de sus cookies en cualquier momento utilizando el enlace en el pie de página.

El foro antiguo se encuentra accesible desde https://foro.gambas-es.org en modo de solo lectura.

Calificación:
  • 0 voto(s) - 0 Media
  • 1
  • 2
  • 3
  • 4
  • 5

Crear más de una tabla
#1

Buenas!.

Como siempre he trabajado con una tabla para las prácticas de sqlite, solo tengo un procedimiento para la creación de la misma.
Ejemplo de la tabla animales.

GAMBAS
  1. Public Sub CrearTabla(hConn As Connection, sDatabase As String)
  2.  
  3.   Dim htabla As Table
  4.  
  5.   htabla = hConn.Tables.Add("animales")
  6.  
  7.   With htabla
  8.     .Fields.Add("id_mascota", db.Serial)
  9.     .Fields.Add("nombre", gb.String, 40)
  10.     .Fields.Add("especie", gb.String, 40)
  11.     .Fields.Add("sexo", gb.String, 2)
  12.     .Fields.Add("ubicacion", gb.String, 10)
  13.     .Fields.Add("estado", gb.String, 2)
  14.     .PrimaryKey = ["id_mascota"]
  15.     .Update
  16.  



Si tengo que crear varias tablas, veo complicado que se haga desde un mismo procedimiento, pasándole parámetros. Se podrían almacenar en una colección.
La forma más sencilla o básica sería:

Proceso CrearTablas(Conexión, nombreDeBaseDeDatos)
CrearTabla1
CrearTabla2
"
Fin del proceso

Supongo que es la que se suele usar.

Saludos

"El buen perfume en frasco pequeño se vende"
    ¡Gracias!
#2

Yo prácticamente nunca creé tablas por código. Para eso tienes el IDE o programas como el SqliteBrowser. Lo que yo hacía era crear toda la estructura de la BD vacía dentro del proyecto. Luego en la primera ejecución se copia esa estructura a la carpeta donde vaya a ser manejada por el programa y listo.

Otra opción es crearlas con el IDE o con el mentado browser y copiar en tu programa la sentencia SQL de creación de la tabla que almacenan las bases Sqlite. Si necesitas crear la tabla sólo tienes que recurrir a dicha sentencia.

No podemos regresar
[-] Los siguientes 1 usuarios dice gracias a Shordi por este post:
  • Shell
    ¡Gracias!
#3

(10-05-2023, 22:26)Shell escribió:  Supongo que es la que se suele usar.

Desde mi punto de vista los programas con bases de datos existes 3 situaciones bien definidas:
  • Creación de tablas ( Exec +SQL ) 
  • Alteración de tablas (gb.db)
  • Destrucción de tablas (gb.db)
Por lo general en mis programas uso una sentencia SQL de creación de la base de datos que sucede una única vez, en la primera ejecución del programa. esta sentencia cambia a veces de acuerdo al motor de bases de datos que se usara pero para ello uso un método que convierte el SQL de SQLite en SQL PostgeSQL o MySQL, así solo hay que mantener un solo código SQL.

Luego el programa se limita a alterar las tablas existentes con los recursos de gambas así no hay que hacer código especial para cada motor de bases de datos.

Eejemplo de creación con SQLite.
SQL
  1. BEGIN TRANSACTION;
  2. CREATE TABLE IF NOT EXISTS "artists" (
  3.     "idx"    INTEGER,
  4.     "name"    TEXT NOT NULL UNIQUE,
  5.     "countries"    INTEGER NOT NULL DEFAULT 1,
  6.     FOREIGN KEY    ("countries")    REFERENCES "countries"    ("idx"),
  7.     PRIMARY KEY("idx" AUTOINCREMENT)
  8. );
  9. CREATE TABLE IF NOT EXISTS "albums" (
  10.     "idx"    INTEGER,
  11.     "name"    TEXT NOT NULL UNIQUE,
  12.     "year"    INTEGER NOT NULL DEFAULT 0,
  13.     "artist"    INTEGER NOT NULL DEFAULT 1,
  14.     FOREIGN KEY    ("artist")    REFERENCES "artists"    ("idx"),
  15.     PRIMARY KEY("idx" AUTOINCREMENT)
  16. );
  17. COMMIT;



Ejemplo para MySQL

SQL
  1. CREATE TABLE `files`
  2. (
  3.    `idx` INT AUTO_INCREMENT,
  4.    `ino` VARCHAR(255),
  5.    `ftime` INT,
  6.    `fsize` INT,
  7.    `fpath` VARCHAR(255),
  8.    PRIMARY KEY(idx)
  9. );
  10. CREATE TABLE `artists`
  11. (
  12.    `idx` INT AUTO_INCREMENT,
  13.    `name` VARCHAR(255),
  14.    `countries` INT,
  15.    PRIMARY KEY(idx),
  16.    FOREIGN KEY (`countries`) REFERENCES countries(`idx`)
  17. );
  18. CREATE TABLE `albums`
  19. (
  20.    `idx` INT AUTO_INCREMENT,
  21.    `name` VARCHAR(255),
  22.    `year` INT,
  23.    `artist` INT,
  24.    PRIMARY KEY(idx),
  25.    FOREIGN KEY (`artist`) REFERENCES artists(`idx`)
  26. );



Nota: Este ultimo código no esta testeado en MySQL pero si a alguien le interesa el tema y dispone de un servidor MySQL para hacer pruebas podríamos exoperimentar y afinar el código.

1 Saludo.
[-] Los siguientes 1 usuarios dice gracias a tincho por este post:
  • Shell
    ¡Gracias!
#4

(11-05-2023, 10:21)Shordi escribió:  Yo prácticamente nunca creé tablas por código. Para eso tienes el IDE o programas como el SqliteBrowser. Lo que yo hacía era crear toda la estructura de la BD vacía dentro del proyecto. Luego en la primera ejecución se copia esa estructura a la carpeta donde vaya a ser manejada por el programa y listo.

Es más cómodo, si.
Realmente creo la tabla si no existe, este proceso se hace solo una vez. Es más didáctico para aprendizaje.
 
(11-05-2023, 10:25)tincho escribió:  Ejemplo de creación con SQLite.

Eso seria directamente con SQLite (es lo más estandar), en su día me comentaba Shordi que para compatibilidad con los distintos gestores,
podía ser mejor hacerlo con instrucciones de Gambas.

Luego las instrucciones de consulta, eliminación, otras. Para mí de principio, esas instrucciones en concreto se me hace más fácil con "Exec +SQL".
 
(11-05-2023, 10:25)tincho escribió:  Ejemplo para MySQL

Ya veo que requiere algo más de instrucciones usando MySQL.

Son dos buenas posibilidades. Para aprendizaje creación de las tablas desde código y que puede ser más rápido hacerlo
desde una aplicación como sqliteBrower. Con el gestor de Gambas es que hace años que no lo toco.

Saludos

"El buen perfume en frasco pequeño se vende"
    ¡Gracias!
#5

Cita:Eso seria directamente con SQLite (es lo más estandar), en su día me comentaba Shordi que para compatibilidad con los distintos gestores,
podía ser mejor hacerlo con instrucciones de Gambas.
En efecto, un programa que sólo utilice instrucciones de gambas puede ser migrado de una base de datos a otra en cinco minutos... pero ¿Quién migra bases de datos en cinco minutos? No concibo una situación de la vida real que requiera eso...

Saludos

No podemos regresar
    ¡Gracias!
#6

(12-05-2023, 09:45)Shordi escribió:  En efecto, un programa que sólo utilice instrucciones de gambas puede ser migrado de una base de datos a otra en cinco minutos... pero ¿Quién migra bases de datos en cinco minutos? No concibo una situación de la vida real que requiera eso...

Tu sabes que estaba y estaré estudiando sqlite3, pero de cara al mundo profesional supongo que se usará más MySql. ( Ya sé que hay otros, MariaDB, etc )
No seria de extrañar que gustándote sqlite te hubieses visto por algún motivo de empresa migrar la base. O directamente ya lo hacías en uno.

Para mi uso personal uso sqlite, no requiero más. Pero seguramente te has visto en muchos "combates" y la variedad tuvo que ser grande.

Saludos

"El buen perfume en frasco pequeño se vende"
    ¡Gracias!
#7

Cita:Para mi uso personal uso sqlite, no requiero más. Pero seguramente te has visto en muchos "combates" y la variedad tuvo que ser grande.
En lo que a cambio de BD se refiere, el drama más gordo lo viví con MsAccess. En aquella época pre-linux, yo programaba en VBA contra las bases de Access (dado que no había nada hecho por parte de la empresa y que todo era virgen, los programas los hacía y se los instalaba -BDD inlcuída- en las máquinas locales de los usuarios. Uno de mis programas gustó y me pidieron que todo el mundo tuviese acceso. Todo chulo dije "no problem" y copie el archivo .mdb a la red.
El batacazo que me dí se oyó en todo el mundo mundial. El algoritmo era: MDB = Mierda de Base de Datos. Imposible funcionar en red con aquello. Estábamos en la época de los inicios iniciales de internet (año 96 o 97). Me puse a investigar presa de pánico con todo el mundo enfadado y descubrí MySQL. Mi experiencia con bases de datos "reales" se limitaba a administrar una BD Oracle 6 y estaba familiarizado con SQL. MySQL era una maravilla.
Reconvertí mi programa de VBA para funcionar contra MySQL (cosa no tan simple como parecía porque los objetos que traía VBA, combobox y demás, no eran apropiados y tuve que hacer maravillas para que funcionasen decentemente) y en cuestión de una semana o así, todo arreglado.

Pero eso fue una situación causada por A) Mi Ignorancia del tema y B) Mi ignorancia del tema. Además era un tema del que no sabía nada.

Los cambios de BD siempre son algo muy pensado y cuidadosamente planificados, no se hacen de un día para otro.

Saludos

No podemos regresar
[-] Los siguientes 1 usuarios dice gracias a Shordi por este post:
  • Shell
    ¡Gracias!
#8

(13-05-2023, 10:15)Shordi escribió:  El batacazo que me dí se oyó en todo el mundo mundial. El algoritmo era: MDB = Mierda de Base de Datos

Big Grin

Que apropósito, no sé como lo haces.  Debe ser cosa de los escritores.
Era lo que usábamos y lo que aprendíamos. Hasta el 2000 no llegué a ver DBase y MS Access. ( Con más dedicación )

¿ Has llegado a ver LibreOffice Base ?. Esta es la opción de conectarse con una base de datos existente.

[Imagen: xITCgkA.png]

Saludos

"El buen perfume en frasco pequeño se vende"
    ¡Gracias!
#9

Nop. Nunca he vuelto a querer saber de bases de escritorio... salvo sqlite, que es otro tema.

No podemos regresar
    ¡Gracias!


Posibles temas similares…
Tema / Autor Respuestas Vistas Último mensaje

Salto de foro:


Usuarios navegando en este tema: 1 invitado(s)