Shell   10-05-2023, 22:26
#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.

Código:
Public Sub CrearTabla(hConn As Connection, sDatabase As String)

  Dim htabla As Table

  htabla = hConn.Tables.Add("animales")

  With htabla
    .Fields.Add("id_mascota", db.Serial)
    .Fields.Add("nombre", gb.String, 40)
    .Fields.Add("especie", gb.String, 40)
    .Fields.Add("sexo", gb.String, 2)
    .Fields.Add("ubicacion", gb.String, 10)
    .Fields.Add("estado", gb.String, 2)
    .PrimaryKey = ["id_mascota"]
    .Update
  End With

End

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 conocimiento es la mejor inversión que se puede hacer" - Abraham Lincoln
Shordi   11-05-2023, 10:21
#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
tincho   11-05-2023, 10:25
#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.
Código:
BEGIN TRANSACTION;
CREATE TABLE IF NOT EXISTS "artists" (
    "idx"    INTEGER,
    "name"    TEXT NOT NULL UNIQUE,
    "countries"    INTEGER NOT NULL DEFAULT 1,
    FOREIGN KEY    ("countries")    REFERENCES "countries"    ("idx"),
    PRIMARY KEY("idx" AUTOINCREMENT)
);
CREATE TABLE IF NOT EXISTS "albums" (
    "idx"    INTEGER,
    "name"    TEXT NOT NULL UNIQUE,
    "year"    INTEGER NOT NULL DEFAULT 0,
    "artist"    INTEGER NOT NULL DEFAULT 1,
    FOREIGN KEY    ("artist")    REFERENCES "artists"    ("idx"),
    PRIMARY KEY("idx" AUTOINCREMENT)
);
COMMIT;

Ejemplo para MySQL

Código:
CREATE TABLE `files`
(
   `idx` INT AUTO_INCREMENT,
   `ino` VARCHAR(255),
   `ftime` INT,
   `fsize` INT,
   `fpath` VARCHAR(255),
   PRIMARY KEY(idx)
);
CREATE TABLE `artists`
(
   `idx` INT AUTO_INCREMENT,
   `name` VARCHAR(255),
   `countries` INT,
   PRIMARY KEY(idx),
   FOREIGN KEY (`countries`) REFERENCES countries(`idx`)
);
CREATE TABLE `albums`
(
   `idx` INT AUTO_INCREMENT,
   `name` VARCHAR(255),
   `year` INT,
   `artist` INT,
   PRIMARY KEY(idx),
   FOREIGN KEY (`artist`) REFERENCES artists(`idx`)
);

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.
Shell   11-05-2023, 20:29
#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 conocimiento es la mejor inversión que se puede hacer" - Abraham Lincoln
Shordi   12-05-2023, 09:45
#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
Shell   12-05-2023, 15:01
#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 conocimiento es la mejor inversión que se puede hacer" - Abraham Lincoln
Shordi   13-05-2023, 10:15
#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
Shell   13-05-2023, 11:53
#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 conocimiento es la mejor inversión que se puede hacer" - Abraham Lincoln
Shordi   13-05-2023, 12:25
#9
Nop. Nunca he vuelto a querer saber de bases de escritorio... salvo sqlite, que es otro tema.

No podemos regresar
  
Usuarios navegando en este tema: 5 invitado(s)
Powered By MyBB, © 2002-2024 MyBB Group.
Made with by Curves UI.