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.