Annunci

Linkedin


Sqlite su IOS tramite Delphi XE2 e Firemonkey

mercoledì, settembre 28, 2011 @ 11:09 AM admin

Questo week-end ho scaricato dal sito della Embarcadero il nuovo Rad Studio XE2 in versione di prova. Devo ammettere che ci sono molte novità interessanti e tra queste l’introduzione di Firemonkey e quindi la possibilità di creare con il nostro Delphi applicazioni per Mac OSX e IOS. A parte testare gli esempi inclusi, la prima cosa che ho fatto è provare la connessione ad un database locale, condizione minima e necessaria per sviluppare una qualsiasi app che non sia una calcolatrice. Il risultato è stato alquanto deludente, i componenti e le classi dei db non funzionano su IOS. Questo pone una grossa limitazione, così ho provato a creare una piccola app di test e a modificare il codice da XCode (che in questo caso utilizza FPC) e da lì sono riuscito a connettermi ad un database di SQLite. uses

… SQLite3db,SQLite;

….

function TBBSqlite.GetTable(sql:string): TBBTable;
var
table1: TBBTable;
i1,i2:integer;
{$IFDEF MSWINDOWS}
sltb: TSQLIteTable;
{$ELSE}
QryResult,RecResult  : Classes.TStringList;
{$ENDIF }
begin
{$IFDEF MSWINDOWS}
sltb := fdb.GetTable(sql);
try
if not (sltb.EOF)then
table1:=TBBtable.Create(sltb.RowCount,sltb.ColCount)
else
table1:=TBBtable.Create(0,0);
for i1:=0 to sltb.RowCount-1 do
begin
for i2:=0 to sltb.ColCount-1 do
begin
table1.setvalue(i1,i2,sltb.Fields[i2]);
end;
sltb.Next;
end;
finally
Result:=table1;
end;
{$ELSE}
QryResult := Classes.TStringList.Create;
RecResult := Classes.TStringList.Create;
RecResult.Delimiter := ‘,’;
RecResult.QuoteChar := ‘”‘;
RecResult.StrictDelimiter := True;
if fdb.Query(sql,QryResult) then
begin
for i1 := 0 to QryResult.Count-1 do
begin
RecResult.DelimitedText:=QryResult[i1];
if i1=0 then
table1:=TBBTable.Create(QryResult.Count,RecResult.Count);
for i2 := 0 to RecResult.Count-1 do
begin
table1.setvalue(i1,i2,RecResult[i2]);
end;
end;
Result:=table1;
end;
{$ENDIF }
end;

var

QryResult,RecResult  : Classes.TStringList;

fdb:TSQLiteDatabase;

begin

QryResult := Classes.TStringList.Create

fdb:=TSQLite.Create(Filename);

if fdb.Query(sql,QryResult) then

begin

for i1 := 0 to QryResult.Count-1 do

begin

….

end;

end;

end; La programmazione diventa però così molto scomoda in quanto in questa modalità da delphi potrei programmare solo l’interfaccia grafica e poco di più, tanto vale lavorare direttamente da XCODE.

Ho così scaricato da internet una classe contenente funzioni di base per l’utilizzo di SQLite sotto windows. A questo punto mi sono trovato con delle funzioni e metodi per quando compilo con XCODE e altri per quando compilo sotto windows. Ho quindi creato una mia classe contenente delle Compiler Directive che seleziona funzioni/metodi a seconda dell’ambiente.

uses

{$IFDEF MSWINDOWS}

SQLiteTable3

{$ELSE}

SQLite3db,SQLite

{$ENDIF }

;

constructor TBBSqlite.Create(Filename : String);

begin

{$IFDEF MSWINDOWS}

fdb:=TSQLiteDatabase.Create(Filename);

{$ELSE}

fdb:=TSQLite.Create(Filename);

{$ENDIF }

end;

Il risultato che ottengo è poter programmare direttamente su Delphi senza dover preoccuparmi di inserire ogni qualvolta codice da XCode.

Scarica l’esempio da qui: Sqlite Delphi Xe2 IOS Sample

iphone delphi xe2 firemonkeywindows delphi xe2 firemonkey

Leave a Reply