También tiene una opción para leer de un archivo un script SQL y luego ejecutarlo.
Creo que puede ser útil para quienes comiencen con SQLite, Lazarus y ZeosLib.
El código: descargar
unit principal;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils, db, FileUtil, Forms, Controls, Graphics, Dialogs,
StdCtrls, Buttons, DBGrids, DbCtrls, ZConnection, ZDataset;
type
      TConexion=(Conectado, NoConectado);
type
{ TForm1 }
TForm1 = class(TForm)
        BBorrarMemo: TBitBtn;
        BCerrarConsulta: TBitBtn;
        btnSelBD: TBitBtn;
  btnConectar: TBitBtn;
  BCerrar: TBitBtn;
  btnDesconectar: TBitBtn;
        BExecute: TBitBtn;
        BConsulta: TBitBtn;
        btnLeerArchivo: TBitBtn;
        cbAutoCommit: TCheckBox;
        cbAutoSizeCol: TCheckBox;
        DataSource1: TDataSource;
        DBGrid1: TDBGrid;
        DBNavigator1: TDBNavigator;
        edBaseDeDatos: TEdit;
        edConexion: TEdit;
        Label1: TLabel;
  lbTablas: TListBox;
  Memo1: TMemo;
  OpenDialog1: TOpenDialog;
  ZConnection1: TZConnection;
  ZQuery1: TZQuery;
        procedure BBorrarMemoClick(Sender: TObject);
  procedure BCerrarConsultaClick(Sender: TObject);
  procedure BConsultaClick(Sender: TObject);
        procedure BExecuteClick(Sender: TObject);
  procedure btnLeerArchivoClick(Sender: TObject);
  procedure btnSelBDClick(Sender: TObject);
  procedure btnConectarClick(Sender: TObject);
  procedure BCerrarClick(Sender: TObject);
        procedure btnDesconectarClick(Sender: TObject);
        procedure cbAutoSizeColChange(Sender: TObject);
        procedure FormClose(Sender: TObject; var CloseAction: TCloseAction);
        procedure FormCreate(Sender: TObject);
        procedure lbTablasDblClick(Sender: TObject);
private
  Conexion:TConexion;
  procedure MuestroTablas;
  function HayConexion:Boolean;
{ private declarations }
public
{ public declarations }
end;
var
      Form1: TForm1;
implementation
{$R *.lfm}
{ TForm1 }
procedure TForm1.FormCreate(Sender: TObject);
begin
    Conexion:=NoConectado;
end;
procedure TForm1.btnSelBDClick(Sender: TObject);
begin
    if OpenDialog1.Execute then edBaseDeDatos.Text:= OpenDialog1.FileName;
end;
procedure TForm1.btnLeerArchivoClick(Sender: TObject);
begin
 if OpenDialog1.Execute then Memo1.Lines.LoadFromFile(OpenDialog1.FileName);
end;
procedure TForm1.BBorrarMemoClick(Sender: TObject);
begin
    Memo1.Clear;
end;
procedure TForm1.BCerrarConsultaClick(Sender: TObject);
begin
    ZQuery1.Close;
end;
procedure TForm1.BConsultaClick(Sender: TObject);
begin
    if not(HayConexion) then Exit;
    ZQuery1.Close;
    ZQuery1.SQL.Text:=Memo1.Text;
  ZQuery1.Open;
end;
procedure TForm1.BExecuteClick(Sender: TObject);
var
    n:Integer;
begin
    if not(HayConexion) then Exit;
    if ZConnection1.ExecuteDirect(Memo1.Text, n) then Memo1.Lines.Add('OK! '+IntToStr(n)+'      filas.');
end;
procedure TForm1.btnConectarClick(Sender: TObject);
begin
    if Conexion=Conectado then
  begin
    ShowMessage('Hay una conexión establecida, primero desconecte dicha conexión.');
    Exit;
  end;
  if not (FileExists(edBaseDeDatos.Text)) then exit;
    ZConnection1.Database:=edBaseDeDatos.Text;
    if not(cbAutoCommit.Checked) then ZConnection1.AutoCommit:=False;
    ZConnection1.Connect;
    if ZConnection1.Connected then
    begin
        edConexion.Text:='Conectado';
    edConexion.Font.Color:=clGreen;
        Conexion:=Conectado;
        MuestroTablas;
    end;
end;
procedure TForm1.BCerrarClick(Sender: TObject);
begin
    Close;
end;
procedure TForm1.btnDesconectarClick(Sender: TObject);
begin
    ZConnection1.Disconnect;
    edConexion.Text:='Desconectado';
    edConexion.Font.Color:=clRed;
    Conexion:=NoConectado;
    lbTablas.Clear;
end;
procedure TForm1.cbAutoSizeColChange(Sender: TObject);
begin
    if cbAutoSizeCol.Checked then DBGrid1.AutoFillColumns:=False else DBGrid1.AutoFillColumns:=True;
end;
procedure TForm1.FormClose(Sender: TObject; var CloseAction: TCloseAction);
begin
    ZConnection1.Disconnect;
    CloseAction:=caFree;
end;
procedure TForm1.lbTablasDblClick(Sender: TObject);
begin
    if not(HayConexion) then Exit;
    Memo1.Clear;
    Memo1.Lines.Add('SELECT * FROM '+lbTablas.Items[lbTablas.ItemIndex]+';');
    ZQuery1.Close;
    ZQuery1.SQL.Text:=Memo1.Text;
    ZQuery1.Open;
end;
procedure TForm1.MuestroTablas;
var
    ZQTablas:TZQuery;
begin
    lbTablas.Clear;
    ZQTablas:=TZQuery.Create(nil);
    ZQTablas.Connection:=ZConnection1;
    ZQTablas.SQL.Text:='SELECT name FROM sqlite_master WHERE type='+
    QuotedStr('table')+' and name <>'+QuotedStr('sqlite_sequence');
    ZQTablas.Open;
    if ZQTablas.RecordCount <1 then Exit;
  ZQTablas.First;
  while not(ZQTablas.EOF) do
  begin
    lbTablas.AddItem(ZQTablas.FieldByName('name').AsString,lbTablas);
    ZQTablas.Next;
  end;
  ZQTablas.Close;
  FreeAndNil(ZQTablas);
end;
function TForm1.HayConexion: Boolean;
begin
  if not(ZConnection1.Connected) then
  begin
    Memo1.Lines.Add('No hay establecida ninguna conexión.');
    Exit(False);
  end;
  Result:=True;
end;
end.
