Soved with one my unit
unit ExportSqLite;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils, HTTPSend, sqldb, sqlite3conn,db;
function EsportaDBSqLiteSuFile(ConnLite: TSQLite3Connection; FlagDati: boolean; NomeFile: string; var Error: string): boolean;
implementation
function EsportaDBSqLiteSuFile(ConnLite: TSQLite3Connection; FlagDati: boolean; NomeFile: string; var Error: string): boolean;
var
ListaTabelle: TStringList;
ListaRisultato: TStringList;
MiaQuery: TSqlQuery;
ret: boolean;
i,j: integer;
Riga, Dati: string;
begin
ret:=TRUE;
try
try
ListaTabelle:=TStringList.Create;
ListaRisultato:=TStringList.Create;
MiaQuery:=TSQLQuery.Create(nil);
MiaQuery.DataBase:=ConnLite.Transaction.DataBase;
ConnLite.GetTableNames(ListaTabelle,FALSE);
{ STAMPO SU FILE LA STRUTTURA DELLE TABELLE }
for i:=0 to ListaTabelle.Count-1 do
begin
MiaQuery.SQL.Text:='SELECT * FROM sqlite_master WHERE tbl_name=''' + ListaTabelle.ValueFromIndex + ''';';
MiaQuery.Open;
if not MiaQuery.EOF then
begin
MiaQuery.First;
While Not MiaQuery.EOF do
begin
ListaRisultato.Add(StringReplace(MiaQuery.Fields.FieldByName('sql').AsString,'"','', [rfReplaceAll]) + ';');
MiaQuery.Next;
end;
end;
MiaQuery.Close;
end;
{ STAMPO SU FILE I DATI DELLE TABELLE }
if FlagDati=TRUE then
begin
for i:=0 to ListaTabelle.Count-1 do
begin
MiaQuery.SQL.Text:='SELECT * FROM ' + ListaTabelle.ValueFromIndex + ';';
MiaQuery.Open;
if not MiaQuery.EOF then
begin
MiaQuery.First;
While Not MiaQuery.EOF do
begin
Riga:='INSERT INTO ' + ListaTabelle.ValueFromIndex + '(';
Dati:='';
for j:=0 to MiaQuery.Fields.Count-1 do
begin
//stampo il nome del campo
Riga:=Riga + MiaQuery.Fields.Fields[j].DisplayName;
if (j<(MiaQuery.Fields.Count-1)) then
Riga:=Riga + ', '
else
Riga:=Riga + ')VALUES(';
if MiaQuery.Fields.Fields[j].DataType=ftInteger then
begin
//è numerico intero
Dati:=Dati + MiaQuery.Fields.Fields[j].AsString;
if (j<(MiaQuery.Fields.Count-1)) then
Dati:=Dati + ', '
else
Dati:=Dati + ');';
end
else
begin
if MiaQuery.Fields.Fields[j].DataType=ftString then
Dati:=Dati + '''' + StringReplace(MiaQuery.Fields.Fields[j].AsString,'''','''''', [rfReplaceAll]) + ''''
else
Dati:=Dati + '''' + MiaQuery.Fields.Fields[j].AsString + '''';
if (j<(MiaQuery.Fields.Count-1)) then
Dati:=Dati + ', '
else
Dati:=Dati + ');';
end;
end;
ListaRisultato.Add(Riga+Dati);
MiaQuery.Next;
end;
end;
MiaQuery.Close;
end;
end;
{ METTO I DATI SU FILE }
ListaRisultato.SaveToFile(NomeFile);
finally
MiaQuery.Free;
ListaTabelle.Free;
ListaRisultato.Free;
end;
except
on E: Exception do
begin
Error:=E.Message;
ret:=FALSE;
end;
end;
EsportaDBSqLiteSuFile:=ret;
end;
end.