Pues me han confirmado que no tengo que hacer un viajecito mañana temprano asi que puse manos a la obra y hice unas pruebas sencillas para un "demo".
He descargado SQLite-3 en 64bits (es el bitness de mi equipo y SO) e hice unas pruebas.
Entorno de trabajo:
Windows 8.1 64bits
CodeTyphon 5.6
* Fecha: 2016-01-18
* FPC: 3.1.1
* Revision SVN: 50892
SQLite 3 64bits
Zeos versión 7.2.0-beta (el que viene por defecto instalado en CT)
Mecánica de trabajo, inspirada en el tutorial que nos pasaste:
1. Descargar el .zip de la dll 64bits de SQLite3. Descomprimir y copiar los dos archivos (la .dll y el archivo .def) tanto en C:\Windows\ (Lo necesita Lazarus para trabajar desde el IDE) y en el directorio del proyecto y el exe
2. Crear un nuevo proyecto en Lazarus, disponer de un nuevo TDataModule.
3. En el DataModule puse lo necesario: un TZConnection, un TZQuery, y un TZTable.
4. Configurar la conexión:
4.1. Indicamos la ruta de la base de datos. Es decir el directorio del proyecto
4.2. Establecemos en la propiedad LibraryLocation la ruta hacia la dll (la del proyecto)
4.3. En Protocol le establecemos que sea sqlite-3
5. Enlazamos el query y el table hacia la conexión. Por ahora nada más.
Ahora en el form dispuse de botones para conectarse, crear la tabla, insertar, etc. Y para comprobar de que las operaciones de inserción se realizan perfectamente dispuse de un TDBGrid y un TDataSource. Vinculamos el Grid al DataSource.
Dejamos por el momento al TDataSource sin conectar a ningún DataSet. Ya verás por qué.
Y luego empecé a dar forma al código.
Advierto que siguiendo mis sospechas, he basado mi código fuertemente bajo el concepto de las transacciones. Es una forma muy segura de proceder y te recomiendo que la vayas aplicando.
La creación de la tabla la efectué con el TZQuery, con la instrucción exactamente igual a la que nos describes.
Leyendo el comentario de Agustín por el "main"."personas" pensé ¿Y no será que por haber indicado "main" debemos anteponer esto al momento de insertar? Asi que aprovechando el mismo Query lo cierro y en otro botón procedo a efectuar una inserción por la vía SQL. La consulta adquiere entonces esta forma:
INSERT INTO "main"."personas"("nombre","edad") VALUES (:elnombre, :laedad)
Le mando un .ExecSQL, confirmo la transacción todo dentro de un try-except para que en caso de que exista un error poder capturar el mensaje y ver si hay algún problema. No hay aviso de error. Asi que supuse que todo estaba en orden.
Para sacar la duda procedo a enlazar el DataSource al Query, e implemento en otro botón una consulta como esta:
SELECT * FROM "main"."personas"
Y el Grid muestra, confirmando, que todo funcionó.
Confirmo la operación, cierro el Grid, vuelvo a insertar otro más, vuelvo a mostrar y ahora tengo 2 registros.
Por esta exitosa prueba, tengo mi sospecha y todo se debe a que tu indicaste como eschema el "main". Si no te muestra nada es porque no en realidad no hay nada en tabla. Mi teoría es que para el TZTable en el nombre de la tabla deberás asignarle justamente main.personas. Ya es tarde para mi, pero luego puedo continuar haciendo pruebas. Por el momento puedes probar mi teoria, prueba anteponiendo main al nombre de la tabla en tu TZTable.
Para comprobar si la tabla tiene elementos, haz una consulta SELECT * con el mismo query u otro y enlaza el Grid a ésta. Si te muestra algo, tiene sino no hay nada. Por código también es posible... que yo recuerde tanto TZQuery como TZTable tienen la función .IsEmpty que regresa true si efectivamente están vacios. Prueba y dinos.
Ni bien tenga más tiempo y termine la "demo" la subo al foro con el código. Creería que con los comentarios que puse se entenderá el código, y aprenderás nuevas cosas: el uso de transacciones y te invitaré un desconocido: las excepciones. Ambas cosas te ayudarán a subir unos peldaños en tu formación
Saludos,