Ir al contenido



Foto

Conexion con BB.DD sqlite


  • Por favor identifícate para responder
90 respuestas en este tema

#1 dooper

dooper

    Advanced Member

  • Miembros
  • PipPipPip
  • 250 mensajes

Escrito 13 marzo 2016 - 07:03

Buenas tardes chicos me alegra volver después de un parón obligado ya que  la placa de mi pc salió ardiendo literalmente por algún problema de tensión que aun desconozco y después de comprar y montar un equipo completo desde cero porque nada me servía del antiguo, he vuelto con software renovado (w7 64 bits etc ,CT....) no hay mal que por bien no venga.
 
La cuestión es que estoy en el punto de partida que lo dejé: conectar con la BB.DD sqlite. He tenido el error que provoca
la conexion en windows 7 64 bits al poner en diseño Zconnection.connected:=TRUE, ya que no deja, pero el foro comentan que funciona en ejecucion aun dando error! veremos al ejecutarlo todo!
 
Mi pregunta es saber si dispongo de 2 formularios, Form1 y Form2 y en el segundo es donde tengo ZConnection, ZQuery, ZTable y DataSource. Si en el Form1 hago referencia a estos componentes, Form1 se daría cuenta?.
 
En Form1 dispongo de un botón que al pulsar sobre él, carga el Form2 y un DbGrid con datos que quiero aparezcan de la tabla personas.
 
el código que incluye el botón del Form1 además de cargar el Form2 es el siguiente, pero ahí viene el problema no reconoce Zconnection1, ni los componentes siguientes:


delphi
  1. Zconnection1.Connect;
  2. Cadena_SQL:= 'CREATE TABLE IF NOT EXISTS "main"."personas" ("nombre" VARCHAR(10), "edad" integer)';
  3.  
  4. ZQuery.SQL.Clear;
  5. ZQuery.SQL.Text:=Cadena_SQL;
  6. Query.ExecSQL;
  7.  
  8. ZTable.Open;
  9. ZTable.Insert;
  10. ZTable.FieldByName('nombre').text:=Juan';
  11. ZTable.FieldByName('edad').text:=12;
  12. Ztable.Post;

   Como puedo trabajar con la BB.DD Zconnection1, Zquery..... y que los formularios que dispongo puedan verlo? Un unidad aparte?
 
Un saludo a todos!
  • 0

#2 enecumene

enecumene

    Webmaster

  • Administrador
  • 7.040 mensajes
  • LocationRepública Dominicana

Escrito 13 marzo 2016 - 08:15

Hola Dooper,

1) Para que Form1 reconozca los componentes del Form2 debes crear ambos al mismo tiempo, y no es aconsejable.
2) Descarta el Form2 y utiliza DataModules y crealo como el primero en tu aplicación antes de cualquier Forms, así lo agregas en el Uses de cualquier Form y será reconocido.

Saludos.
  • 0

#3 dooper

dooper

    Advanced Member

  • Miembros
  • PipPipPip
  • 250 mensajes

Escrito 13 marzo 2016 - 12:04

Ahora si me detecta los componentes enecumene, lo cual hay que referenciar segun he leido por el foro al nombre del modulo en mi caso

datamodule1.Zconnection1.connect; y eso con todos los componentes. Gracias como siempre.

 

El datamodules tiene los componentes insertados, y nada más, luego hago referencia al nombre del modulo en las unidades e indicar tambien en el propio uses de los formularios al datamodules.

 

Pero al ejecutar el codigo 'explota' y me salta una excepción:

 

ha lanzado un 'Excepcion' con el mensaje

Client-libray sqlite3.dll, sqlite.dll found but could not be loader. Check compile-target  and

library compatibility.

 

En archivo 'source\plain\ZPlainloader.pas' en linea 237.

 

He puesto la dos .dll en la carpeta de windows7 -> system32 y en la WOW64,....

 

Seguire intentándolo a ver que puede ser... pero esto en windowsXP me funcionaba perfectamente.

 

Un saludo


  • 1

#4 Agustin Ortu

Agustin Ortu

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 623 mensajes
  • LocationArgentina

Escrito 13 marzo 2016 - 02:32

Prueba a poner las bibliotecas de sqlite en el mismo directorio que el ejecutable generado

 

Aunque realmente, sqlite viene incluido ya de fabrica en todo los sistemas operativos


  • 0

#5 dooper

dooper

    Advanced Member

  • Miembros
  • PipPipPip
  • 250 mensajes

Escrito 13 marzo 2016 - 03:43

Tambien las tengo en el directorio del ejecutable Agustin Ortu, y aún así, salta!

 

Todo lo tenía igualmente en XP, de ahí que ya supiera que hacer, pero ahora me descuadra la posible solución.

 

Un saludo.


  • 0

#6 enecumene

enecumene

    Webmaster

  • Administrador
  • 7.040 mensajes
  • LocationRepública Dominicana

Escrito 13 marzo 2016 - 05:15

Veamos, leyendo más detenidamente veo que mencionas 64 bits, ¿seguro tienes el dll para esa versión?, si no, prueba con la versión correspondiente:

SQLite 64bits

Saludos.
  • 0

#7 Delphius

Delphius

    Advanced Member

  • Administrador
  • 5.825 mensajes
  • LocationArgentina

Escrito 13 marzo 2016 - 05:39

Además de los consejos que te están dando, y aún desconociendo como es el funcionamiento de SQLite con Zeos, quizá esto y esto pueda ayudarte a clarificar algunas cosas.

 

Saludos,


  • 0

#8 enecumene

enecumene

    Webmaster

  • Administrador
  • 7.040 mensajes
  • LocationRepública Dominicana

Escrito 13 marzo 2016 - 05:41

Ah! también hay una comilla de más en la línea 10 que te debería de saltar un error de sintaxis.
  • 0

#9 dooper

dooper

    Advanced Member

  • Miembros
  • PipPipPip
  • 250 mensajes

Escrito 14 marzo 2016 - 10:41

Eso era enecumene. Pensé que las librerias que tenía de entonces en XP, valdrían para w7, error por mi parte. Aunque no me carga nada el Grid, ya es un paso no "saltar" por los aires.
 
Que diferencia hay entre ambas, no sea que por ello no me cargue nada al efectuar mal la inserción.
 


delphi
  1. ZTable.Isert;
  2. ZTable.FieldByName('nombre').Text:='Juan';
  3. ZTable.FieldByName('edad').Text:=12;
  4. ZTable.Post;


delphi
  1. Zquery1.FieldByName('nombre').AsString:='Juan';
  2. Zquery1.FieldByName('edad').AsInteger:=12;
  3. Zquery1.Post;


  • 0

#10 Delphius

Delphius

    Advanced Member

  • Administrador
  • 5.825 mensajes
  • LocationArgentina

Escrito 14 marzo 2016 - 01:07

Pues lo que yo veo es que tienes un ZQuery y un ZTable.

¿Porqué usas ambas cosas? O mejor dicho: ¿Porqué mezclas ambas cosas?

 

De tu código original lo que entiendo es que con el ZQuery ejecutas un script CREATE TABLE para crear una tabla "Personas".

Pero luego, empleas un ZTable para ponerlo en modo de inserción, le pasas los datos y confirmas con Post(). La pregunta aquí es ¿Y a que tabla apunta el ZTable? ¿La misma a la que pretendes crear previamente con el ZQuery? ¿Otra, existe?

 

Desconozco como es que funciona SQLite con Zeos. Pero me resulta curioso esa mezcla.

 

A mi ver, se podría hacer todo con ZQuery. Para insertar registros con un ZQuery (o mejor dicho con cualquier Query) debes definirle una instrucción sql de tipo INSERT. Y para mandarla a ejecutar se procede con ExecSQL(). Lo más sano y aconsejable es aprovechar el poder de SQL:


sql
  1. INSERT INTO <NombreTabla>(<ListadoDeCampos>) VALUES (<ListadoDeParametros>)

Pasar los datos a los parámetros:


php
  1. MiQuery.ParamByName('NombreParametro').AsTipo := valor;

Y luego a ejecutar con .ExecSQL.

 

Cuando uno hace esto:


php
  1. FieldByName().AsTipo() := mivariable; //o constante

Lo que le está haciendo es asignarle el valor pasado en la variable al campo e indirectamente le está informando el tipo de dato a esperar.

Al menos en Delphi, no he investigado los detalles del field en Lazarus, todas las implementaciones de los métodos .AsTipo() lo que hacen es guardar la representación variant del valor y establecer el DataType correspondiente. Por ejemplo un .AsString() tomará un dato de tipo string y lo convertirá al variant y pondrá en DataType en ftString.

De forma análoga, cuando uno hace esto:


php
  1. mivariable := FieldByName().AsTipo();

Le está pidiendo que regrese el valor que contiene el variant convertido al tipo indicado. Por ejemplo, un AsInteger() convertirá (o mejor dicho, lo intentará) el contenido variant del field al tipo integer.

 

.Text lo que contiene es la representación textual del dato. No es usual (es más, estoy dudando si es es que esta propiedad es de escritura, y por tanto imposible de asignarle un valor) emplearla de forma directa para pasarle valores. Generalmente se emplea esta propiedad de forma indirecta por los controles data-ware para leer y mostrar el dato. Por ejemplo, cuando uno pone un DBEdit y lo vincula con cualquier DataSet, y lo abre, este DBEdit lo que hace es leer el Text del campo asignado. Lo mismo hacen los DBGrid, o cualquier otro DB-ware.

 

Desaconsejo esta vía de pasar valores. Emplea en su caso .AsTipo() tanto para leer como para asignar, ya sea que emplees campos persistentes o no.

 

Saludos,


  • 1

#11 dooper

dooper

    Advanced Member

  • Miembros
  • PipPipPip
  • 250 mensajes

Escrito 14 marzo 2016 - 02:23

Delphius, yo solo uso la opción Ztable en mi código. La otra opción es la que he visto que se usa en otros casos, y pensé que al no cargar nada en el DBGrid podría ser del mal uso de la sentencia insert.
 
con este codigo que tengo aplicado, no carga nada! Aunque me da la sensación que algo mal estoy liando. Este codigo está en la unit del Form1, pero el DbGrid esta ubicado en el Form2.


delphi
  1. Zconnection1.Connect;
  2. Cadena_SQL:= 'CREATE TABLE IF NOT EXISTS "main"."personas" ("nombre" VARCHAR(10), "edad" integer)';
  3.  
  4. ZQuery.SQL.Clear;
  5. ZQuery.SQL.Text:=Cadena_SQL;
  6. Query.ExecSQL;
  7.  
  8. ZTable.Open;
  9. ZTable.Insert;
  10. ZTable.FieldByName('nombre').text:=Juan';
  11. ZTable.FieldByName('edad').text:=12;
  12. Ztable.Post;


  • 0

#12 enecumene

enecumene

    Webmaster

  • Administrador
  • 7.040 mensajes
  • LocationRepública Dominicana

Escrito 14 marzo 2016 - 02:46

A ver, ZTable está ligado hacia la nueva tabla creada?, ¿por qué no mejor usar Querys?:
 

delphi
  1. ZQuery.Close;
  2. ZQuery.SQL.Text := 'INSERT INTO personas(nombre,edad) VALUES("Juan","45")';
  3. ZQuery.ExecSQL;


Saludos.
  • 0

#13 dooper

dooper

    Advanced Member

  • Miembros
  • PipPipPip
  • 250 mensajes

Escrito 14 marzo 2016 - 03:08

Creo que si Ztable está ligada a la nueva tabla creada Ztable.Tablename=personas.

 

No uso Querys enecumene, porque  he visto inserciones en tabla, de la forma

 

Ztable.Insert

Ztable.FieldByName('nombre').Text:='Juan';

Ztable.Post;

 

y en la ultima prueba con XP sí me funcionaba perfectamente, pero claro hice una prueba sobre un form1 solamente, sin datamodules, y varios form interactuando con es ahora.

 

saludos


  • 0

#14 Delphius

Delphius

    Advanced Member

  • Administrador
  • 5.825 mensajes
  • LocationArgentina

Escrito 14 marzo 2016 - 03:09

dooper, ese código que tienes, así como está es bastante probable que no haga nada. ¿Pará que el ZTable? ¿Le asignaste alguna tabla? Porque sin eso obviamente no va a funcionar, y por consiguiente el DBGrid que esté vinculado al ZTable o incluso al ZQuery no mostrará nada.

Como he dicho: mezclas query con table.

 

Si la idea es crear la tabla si no existe, e inmediatamente llenarla se puede aprovechar el mismo query. Solamente tienes que cerrar el query después de ejecutar el script de CREATE TABLE. Luego procedes a ejecutar un SQL del tipo INSERT como el del ejemplo que puse antes y ejecutas.

 

Para confirmar todos los cambios, aplicas el Commit del ZConnection. Ahora bien, desconozco si Zeos + SQLite permitirá crear la tabla y llenarla en la misma transacción. Quizá sea más viable (y seguro) separar los tantos en dos transacciones aisladas. Es decir:

 

1. Crear tabla sino existe:

1.1. Iniciar transacción

1.2. Ejecutar script CREATE TABLE

1.3. Confirmar transacción

1.4. Cerrar ZQuery

 

2. Insertar en tabla: // En teoría, por paso 1, sino existió la tabla ya la ha creado

2.1. Iniciar transacción

2.2. Ejecutar instrucción INSERT

2.3. Confirmar transacción

2.4. Cerrar ZQuery

 

Saludos,


  • 0

#15 dooper

dooper

    Advanced Member

  • Miembros
  • PipPipPip
  • 250 mensajes

Escrito 15 marzo 2016 - 11:59

No entiendo como el codigo no funciona. Lo probé en su día y funcionaba correctamente, sacado de alguna pagina sobre iniciacion zeoz+sqlite, de aquí precisamente: http://lazaruszeos.blogspot.com.es/

 

Verdad, que lo use con un DBNavigator, pero igualmente debería funcionar con un boton insertar, etc...

 

Lo cierto es que el registro se crea, porque cada vez que pulso, aparece una nueva fila en el DBGrid pero sin datos!.

 

He visto tantas formas de hacer un ABM que me estoy liando bastante.


  • 0

#16 dooper

dooper

    Advanced Member

  • Miembros
  • PipPipPip
  • 250 mensajes

Escrito 15 marzo 2016 - 02:15

Pues dando vueltas imposible, he probado igualmente como indicais y parece que tampoco.

Con mi codigo que indico abajo, funciona, carga los registros aunmentando filas, pero no vuelca los dos datos del nombre y edad a las columnas del DBGrid.


php
  1. Datamodule1.Zconnection1.Connect;
  2. //Datamodule1.Zconnection1.Connected:=TRUE;
  3.  
  4.  
  5. Cadena_SQL:= 'CREATE TABLE IF NOT EXISTS "main"."personas" ("nombre" VARCHAR(10), "edad" integer))';
  6. Datamodule1.ZQuery1.SQL.Clear;
  7. Datamodule1.ZQuery1.SQL.Text:=Cadena_SQL;
  8. Datamodule1.ZQuery1.ExecSQL;
  9.  
  10. Datamodule1.ZTable1.Open;
  11.  
  12. Datamodule1.ZTable1.Insert;
  13. Datamodule1.ZTable1.FieldByName('nombre').AsString:='Juan';
  14. Datamodule1.ZTable1.FieldByName('edad').AsInteger:=12;
  15.  
  16. Datamodule1.ZTable1.Post;

saludos


  • 0

#17 Delphius

Delphius

    Advanced Member

  • Administrador
  • 5.825 mensajes
  • LocationArgentina

Escrito 15 marzo 2016 - 03:46

Deberías mostrarnos todo el código dooper. Así podremos ver donde está el problema. Si puedes hacernos llegar una demo con el código sería mejor (sin añadir el ejecutable... que sino será más pesado ya que el exe por defecto almacena info de debug y esta es demasiada incrementando el tamaño) Yo podría ver la posibilidad de descargar SQLite y hacer unas pruebas entre mañana y pasado mañana.

¿Ese código en que evento lo tienes? ¿En el OnCreate? ¿En un OnClic de un botón? ¿En ambos? ¿Estás siguiendo al pie de la letra ese tutorial que nos pasaste?

Como dices que en el DBGrid visualmente aparece una nueva fila pero que en efecto en la base de datos no ves nada... no se que pensar. ¿Utilizas alguna herramienta para administrar la base de datos SQLite? Algo como el IBExpert para Firebird, pero para SQLite. Si es así, ¿Cuál?

 

Recuerda que SQLite es una base de datos mono-usuario por lo que sólo admite una conexión exclusiva por vez. Por tanto mientras estés utilizando Lazarus y mantengas abierta la conexión cualquier otro intento de conectarse o de hacer cualquier operación dará una violación de acceso o un error. Por tanto si usas algún utilitario para administrar la base de datos debes cerrarlo, luego ir por Lazarus. Y a la inversa lo mismo.

Desconozco como se lleva Zeos con SQLite, al menos con Firebird Embebida (la versión mono-usuario de Firebird) efectivamente informa del error si ya hay una conexión.

 

Pensé que podría ser un problema de dll pero de ser así Zeos te arrojaría un error diciendo que le falta el archivo en cuestión. Pero ahora pienso que quizá el problema esté en que no aplicas una confirmación de la transacción. Aún así ese "extraño" comportamiento del DBGrid me deja intranquilo.

 

Zeos, de forma un tanto implícita trabaja con transacciones. Para que todos los cambios se reflejen no sólo debe hacerse Post desde el dataset en cuestión (query, table son en esencia datasets) sino que además debe confirmarse la transacción invocando al método Commit del ZConnection.

 

¿Que es una transacción? Es un conjunto de operaciones que deben hacerse atómicamente, o todo o nada. Es decir: que se "agrupa" una serie de instrucciones a realizar sobre una base de datos. Una característica de la transacción es que deben hacerse todas las operaciones, de lo contrario se dejaría a los datos de la base en un estado inconsistente. Por ello, una transacción se puede confirmar (Commit) o descartar/cancelar (RoollBack). De esta forma siempre la base de datos alcanza un estado consistente, si se descartan las operaciones vuelve a como estaba antes, y de confirmarse alcanza un nuevo estado seguro.

Indirectamente cada vez que le pides a un ZTable que esté en estado de inserción, o modificación, o cualquiera que sea, los componentes Zeos inician una nueva transacción. Y por defecto la propiedad AutoCommit está en true. En lo personal yo prefiero hacer las cosas explícitamente.

 

Sugiero que pruebes algo como esto en un proyecto nuevo:


delphi
  1. procedure TForm1.Button1Click(Sender: TObject);
  2. begin
  3. // vamos a descartar una posible transacción "olvidada" de confirmar (o de deshacer)
  4. // e iniciar una en "limpio"
  5. if zconnection1.InTransaction
  6. then Zconnection1.Rollback;
  7.  
  8. zconnection1.StartTransaction;
  9. zquery1.Close; // por seguridad lo mantenemos cerrado y trabajaremos desde cero...
  10. zquery1.SQL := 'INSERT INTO PERSONAS(NOMBRE, EDAD) VALUES (:ELNOMBRE, :LAEDAD)';
  11.  
  12. zquery1.ParamByName('ELNOMBRE').AsString:= 'Juancito';
  13. zquery1.ParamByName('LAEDAD').AsInteger:= 25;
  14.  
  15. zquery1.ExecSQL;
  16. zconnection1.Commit;
  17. // como los dataset zeos quedan activos aún despues de confirmar la transacción lo cerramos
  18. zquery1.Close;
  19. ShowMessage('Operación terminada');
  20. end;

Si en el ZConnection está todo bien configurado, se ha iniciado conexión previamente y existe la tabla PERSONAS el código anterior debería funcionar perfectamente. Luego comprueba, ya sea con el utilitario que uses, o por código (como tu quieras) si efectivamente se ha procedido a efectuar la inserción.

 

Yo se que otros compañeros usan SQLite quizá ellos puedan darnos más luz al problema.

 

Saludos,


  • 0

#18 dooper

dooper

    Advanced Member

  • Miembros
  • PipPipPip
  • 250 mensajes

Escrito 15 marzo 2016 - 04:23

Ese codigo que adjuntan, no me funciona, salta.
Veamos, el codigo está en un 'pulsado de botón'. El tutorial que uso es el que indico, en mi anterior equipo con XP no hubo problemas a la hora
de funcionar, tambien es cierto que no mezclaba tanto código como ahora (datamodule1, forms etc....) y trabajaba sobre un mismo formulario unico y con un DBNavigator como aparece en ese tutorial, tambien en ese tutorial aparece la opcion del pulsar botón para insertar, borrar etc...
 
No uso nada para administrar la BB.DD Delphius.


delphi
  1. procedure TForm1.ToolButton1Click(Sender: TObject);
  2. var
  3. Cadena_SQL:string;
  4. begin
  5. Form2:= TForm2.create(self);
  6. Form2.parent := Panel1;
  7. Form2.show;
  8.  
  9. Datamodule1.Zconnection1.Connect;
  10.  
  11. //Datamodule1.Zconnection1.Connected:=TRUE;
  12.  
  13. Cadena_SQL:= 'CREATE TABLE IF NOT EXISTS "main"."personas" ("nombre" VARCHAR(10), "edad" integer))';
  14.  
  15. Datamodule1.ZQuery1.SQL.Clear;
  16.  
  17. Datamodule1.ZQuery1.SQL.Text:=Cadena_SQL;
  18.  
  19. Datamodule1.ZQuery1.ExecSQL;
  20.  
  21. Datamodule1.ZTable1.Open;
  22.  
  23. Datamodule1.ZTable1.Insert;
  24.  
  25. Datamodule1.ZTable1.FieldByName('nombre').AsString:='Juan';
  26.  
  27. Datamodule1.ZTable1.FieldByName('edad').AsInteger:=12;
  28.  
  29. Datamodule1.ZTable1.Post;
  30. end;

Tomo nota de todos los conceptos que indicas, pero mi objetivo es seguir unas lineas de codigo que entienda, y en ese tutorial como principiante
me iban bien, pero con tantos cambios de codigos y alternativas totalmente válidas, se pierde un poco la metodologia, ya que van apareciendo
sintáxis y sentencias nuevas.
 
Como digo carga registros, pero vacios, tambien es verdad que en la carpeta raiz del programa, crea el nombre de la bb.dd indicada en 
Zconexion.Database=F:\\gente.sqlite; pero la tabla personas no aparece, ni la crea fisicamente.
 
Como dice un refrán: "Que los árboles, no me impidan ver el bosque...."
 
Continuo luchando con el código!
 
saludos


  • 0

#19 Agustin Ortu

Agustin Ortu

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 623 mensajes
  • LocationArgentina

Escrito 15 marzo 2016 - 06:05

Por que "main"."personas"?

 

Estas indicando el schema "main" , pero cuando intentas abrir tu tabla con el ZTable, tambien lo estas indicando?

 

Revisa la documentacion: http://www.sqlite.or...reatetable.html

 

No estoy muy empapado en Zeos, ni lo tengo instalado; revisa si hay alguna forma de indicar este esquema "main"

 

A mi me da la sensacion de que estas creando la tabla en otro lado

 

Intenta sin el "main"."personas"


  • 0

#20 Delphius

Delphius

    Advanced Member

  • Administrador
  • 5.825 mensajes
  • LocationArgentina

Escrito 15 marzo 2016 - 06:15

Ese codigo que adjuntan, no me funciona, salta.
Veamos, el codigo está en un 'pulsado de botón'. El tutorial que uso es el que indico, en mi anterior equipo con XP no hubo problemas a la hora
de funcionar, tambien es cierto que no mezclaba tanto código como ahora (datamodule1, forms etc....) y trabajaba sobre un mismo formulario unico y con un DBNavigator como aparece en ese tutorial, tambien en ese tutorial aparece la opcion del pulsar botón para insertar, borrar etc...
 
No uso nada para administrar la BB.DD Delphius.


delphi
  1. procedure TForm1.ToolButton1Click(Sender: TObject);
  2. var
  3. Cadena_SQL:string;
  4. begin
  5. Form2:= TForm2.create(self);
  6. Form2.parent := Panel1;
  7. Form2.show;
  8.  
  9. Datamodule1.Zconnection1.Connect;
  10.  
  11. //Datamodule1.Zconnection1.Connected:=TRUE;
  12.  
  13. Cadena_SQL:= 'CREATE TABLE IF NOT EXISTS "main"."personas" ("nombre" VARCHAR(10), "edad" integer))';
  14.  
  15. Datamodule1.ZQuery1.SQL.Clear;
  16.  
  17. Datamodule1.ZQuery1.SQL.Text:=Cadena_SQL;
  18.  
  19. Datamodule1.ZQuery1.ExecSQL;
  20.  
  21. Datamodule1.ZTable1.Open;
  22.  
  23. Datamodule1.ZTable1.Insert;
  24.  
  25. Datamodule1.ZTable1.FieldByName('nombre').AsString:='Juan';
  26.  
  27. Datamodule1.ZTable1.FieldByName('edad').AsInteger:=12;
  28.  
  29. Datamodule1.ZTable1.Post;
  30. end;

Tomo nota de todos los conceptos que indicas, pero mi objetivo es seguir unas lineas de codigo que entienda, y en ese tutorial como principiante
me iban bien, pero con tantos cambios de codigos y alternativas totalmente válidas, se pierde un poco la metodologia, ya que van apareciendo
sintáxis y sentencias nuevas.
 
Como digo carga registros, pero vacios, tambien es verdad que en la carpeta raiz del programa, crea el nombre de la bb.dd indicada en 
Zconexion.Database=F:\\gente.sqlite; pero la tabla personas no aparece, ni la crea fisicamente.
 
Como dice un refrán: "Que los árboles, no me impidan ver el bosque...."
 
Continuo luchando con el código!
 
saludos

 

¿En que parte salta? ¿Que error te arroja? He visto el tutorial que comentas. Lo hace ver todo muy simple. Más adelante puedo intentar recrearlo.

Desconozco como es que funciona SQLite, si es que por cada tabla tiene que generar un archivo, o si es que en el propio archivo internamente guarda todo. Me inclino a por lo 2do ;) (asi funcionan practicamente todos los motores de base de datos) y por eso quizá no veas un archivo "personas".

 

Con los componentes que tienen por defecto Lazarus (los de la paleta SQLdb) para conexión a SQLite las cosas son un poco diferentes pero tienen el concepto de transacción explícita. Por ello me inclino a que SQLite brinda dicho soporte y sea motivo de transacciones no confirmadas el fallo que tienes. Pero hasta que no haga pruebas no puedo saber mucho.

 

Saludos,


  • 0