https://foro.gambas-es.org/viewtopic.php?f=3&t=1919
-----------------------------------
Shell
Viernes, 23 Septiembre 2011, 09:14

Ejemplo De Base De Datos En Libro No Funciona Del Todo Correctamente
-----------------------------------
Hola Comunidad!.

Ya que nadie nunca ha dicho nada, (creo que yo si), el ejemplo no funciona del todo correctamente:
No me creo que con todos los que somos, nadie haya dicho que el ejemplo no funciona. :???

- Puedes modificar registro.
- No puedes crear un registro nuevo.

Llevaba varios días intentando de encontrar una respuesta al problema, pero no la vi en ninguna
base de datos de los ejemplos que conocemos.

Después de leer un poco sobre SQLite, estaba creando un ejemplo de Bdd desde linea de comandos.
Y comprobé que no era necesario especificar todos los campos para entrar un registro.

Con SQlite3 instalado.Fui a linea de comandos y entre: 

[code linenumbers=false syntax=gambas]
>sqlite3 Prueba.db

sqlite> create table Prueba (id integer primary key, nombre text);
sqlite>insert into Prueba (id,nombre) values(1,'Juan');
sqlite>insert into Prueba (id,nombre) values(2,'José');
sqlite>insert into Prueba (nombre) values('Antonio');
sqlite>insert into Prueba (nombre) values('Pedro');

sqlite> .mode column
sqlite> .headers on
sqlite> select * from Prueba;
[/code]

El final fue dos columnas con cada campo y sus valores debajo.(Lo pegue aquí, pero no me salio muy bien :oops: )

A lo que voy: 
Donde inserte Antonio y Pedro no hay valor especificado para el campo id
No pude hacerlo de la misma manera en Gambas.

Aprendí hacerlo en gambas.Me encontré el problema del campo clave.En el ejemplo de la base de datos del
libro de Gambas.Pone como campo clave en la base de datos el id, aunque lo ponga numérico, lo puse autonumérico.
Vale.Ademas y digo yo.Si en la base de datos pone id como campo clave,¿ por que luego en el código utiliza titulo ?... :neutral: 

No tenia ni la mas remota idea de que hacer con ese campo.Por que en la base de datos no hace referencia a un incremento
ni a ponerlo directamente en una caja de texto.

En la creación de un registro nuevo en el libro pone:

[code linenumbers=false syntax=gambas]
TRY hConn.Exec("insert into datos values (&1,&2,&3,&4,&5)", TxtTitulo.Text, TxtAutor.Text, CDate(TxtFecha.Text), CFloat(TxtPrecio.Text), TxtDecripcion.Text)
[/code]

Cuando en realidad debería ser:
[code linenumbers=false syntax=gambas]
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)
[/code]

Esa constante NULL me logro que el campo autonumérico incrementase su valor automáticamente.
¿ Que significa NULL realmente en la entrada del registro ?. No hay una caja de texto especifica para este campo, ya que no
hace falta.

¿ Como que parece tan diferente escribir en shell la creación de la base de datos con respecto a gambas ?.
(Me refiero a las sentencias entre comillas).


-----------------------------------
shordi
Viernes, 23 Septiembre 2011, 11:37

Re: Ejemplo De Base De Datos En Libro No Funciona Del Todo Correctamente
-----------------------------------
SQLite es algo peculiar con su manera de tratar los indices y de relacionarse con Gambas.
Cosas a tener en cuenta: 

- Todas las tablas, lo definas o no, tienen un campo indice numérico y autoincremental que es la clave primaria.
- Cualquier campo que se llame ID o ROWID (y algún nombre más que no recuerdo de memoria) definido como primary key autoincremental, se consideran como sinónimos de dicho campo índice ya existente.
- Si defines tu campo ID como PK Autoincrement not null, gambas no lo reconocerá como índice. Creo que el driver de gambas busca la palabra "PRIMARY KEY" (no "PK") en la definición de la tabla, aunque la base de datos sí funcionará bien.
- Un campo Primary Key Autoincremental, es un campo del que te olvidas a la hora de actualizar funciona solito.
- Para añadir sí debes mencionarlo, pero no asignale valor (o sea, darle valor NULL o vacío "")

Con eso las cosas deberían funcionarte sin problemas.


-----------------------------------
Shell
Viernes, 23 Septiembre 2011, 13:25

Re: Ejemplo De Base De Datos En Libro No Funciona Del Todo Correctamente
-----------------------------------
Gracias Shordi.

Debió ser que se lo olvido a los autores del libro.Para ser el único ejemplo sobre la base de datos, con su formulario para entrar los datos, otro para mostrar los registros,
es una pena que no este al 100% operativa.Sobre todo para nosotros que estamos aprendiendo.Tu ya tienes mucho camino recorrido.

Siempre me quejo de que para los que aprendemos,encontrar tropiezos en el camino del aprendizaje es un poco desesperante por que a
veces no tienes ni para donde tirar. Y es lo que me suele ocurrir.Insisto y me llevo días dándole al tema.Con lo fácil que resulta poner la
pregunta.

No es cuestión solo de preguntar y preguntar, es también de aprender por uno mismo.El dilema es que si no se conoce, ¿ como se desarrolla una idea ?,
si te falta lo principal.Es como clavar con un alicate por que no se conoce el martillo.En este caso, hace el apaño. :lol:


