: 302

Da DBF a SQLite - da Delphi4 a Lazarus 1.0.6

Utilizzando ormai per il 90% del mio lavoro Linux Mint ho voluto convertire un vecchio progetto, con molti archivi, da non perdere, ancora attuale, scritto in Delphi4, con l'utilizzo di tabelle DBF in Lazarus con l'utilizzo tabelle SQLite.

Inizialmente ho pensato di trasformare le tabelle DBF in CVS utilizzando programmi trovati sul web come DBF Viewer Plus

oppure con LibreOffice ma non tutte le tabelle veniva lette correttamente, quelle lette correttamente e salvate in CVS avevano il nome dei campi modificati, per esempio il campo codice veniva rinominato in codice_C_60 il che mi costringeva a riscrivere tutte le procedure che utilizzavano le tabelle.

Importando la tabella in un database SQLite bisogna aggiungere il campo INTEGER PRIMARY KEY e cambiare il TIPO dei campi per poterli utilizzare correttamente sotto Lazarus, quindi ho abbandonato l'idea e ho deciso di ricreare le tabelle direttamente sotto SQLite.

Perchè SQLite e non ProsgreSQL o FlameRobin o MySQL?

Perchè SQLite non è complicato e non richiede null'altro che:
- sotto Linux Mint l'installazione tramite la gestione pacchetti ,
- sotto Window lo scaricamento e la copia di sqlite.Dll (sqlite3.dll) nella directory di lavoro.

Per creare i nuovi database ho provato molti programmi ed alla fine ho deciso che i migliori sono:

- SQLite Database Browser,

- Sqlite-Manager che si installa sotto Mozilla Firefox e scaricabile quì :


Il secondo è più flessibile e completo ma non consente, salvo smentite, di aggiungere l' INTEGER PRIMARY KEY ad una tabella esistente mentre SQLite Database Browser lo consente.

Il concetto di database è diverso se si utilizzano tabelle DBF o SQL, con i DBF il database è la directory dove si trovano le tabelle, con SQL il database è un file che contiene le tabelle.

Per realizzare il programma, sotto un progetto Lazarus, o creato due datamoduli con name DataSQL e DataDBF ogni datamodulo contiene le stesse tabelle con lo stesso nome dei campi.
Ho dovuto convertire il TIPO dei campi come segue:

TIPO
DBF
SQLite
carattere
C
VARCHAR
numerico
N
REAL o INTEGER
logico
L
BOOL
data
D
DATE
memo
M
TEXT



per un corretto funzionamento nelle tabelle SQL è necessario mettere al primo posto un campo (es.: IDX) come INTEGER PRIMARY KEY

NON serve ricreare l'indice originario come nelle tabelle DBF in quanto è prossibile riordinare a runtime semplicemente cambiando la proprietà delle tabelle: SortedFileds:=Nomecampo;

Potete scaricare il programma sorgente di esempio

Il programma importa i dati di tabelle DBF in tabelle SQLite, funzionante sotto Linux Mint-Ubuntu e sotto Windows xp e Windows 7 e 10 serve solo ricompilarlo sulla propria piattaforma.