* * * *

Privacy Policy

Blog italiano

Clicca qui se vuoi andare al blog italiano su Lazarus e il pascal.

Forum ufficiale

Se non siete riusciti a reperire l'informazione che cercavate nei nostri articoli o sul nostro forum vi consiglio di visitare il
Forum ufficiale di Lazarus in lingua inglese.

Lazarus 1.0

Trascinare un file nel programma
DB concetti fondamentali e ZeosLib
Recuperare codice HTML da pagina web
Mandare mail con Lazarus
Stabilire il sistema operativo
Esempio lista in pascal
File INI
Codice di attivazione
Realizzare programmi multilingua
Lavorare con le directory
Utilizzare Unità esterne
TTreeView
TTreeview e Menu
Generare controlli RUN-TIME
LazReport, PDF ed immagini
Intercettare tasti premuti
Ampliare Lazarus
Lazarus e la crittografia
System Tray con Lazarus
UIB: Unified Interbase
Il file: questo sconosciuto
Conferma di chiusura di un applicazione
Liste e puntatori
Overload di funzioni
Funzioni a parametri variabili
Proprietà
Conversione numerica
TImage su Form e Panel
Indy gestiore server FTP lato Client
PopUpMenu sotto Pulsante (TSpeedButton)
Direttiva $macro
Toolbar
Evidenziare voci TreeView
Visualizzare un file Html esterno
StatusBar - aggirare l'errore variabile duplicata
Da DataSource a Excel
Le permutazioni
Brute force
Indy 10 - Invio email con allegati
La gestione degli errori in Lazarus
Pascal Script
Linux + Zeos + Firebird
Dataset virtuale
Overload di operatori
Lavorare con file in formato JSON con Lazarus
Zeos ... dietro le quinte (prima parte)
Disporre le finestre in un blocco unico (come Delphi)
Aspetto retrò (Cmd Line)
Lazarus 1.0
Come interfacciare periferica twain
Ubuntu - aggiornare free pascal e lazarus
fpcup: installazioni parallele di lazarus e fpc
Free Pascal e Lazarus sul Raspberry Pi
Cifratura: breve guida all'uso dell'algoritmo BlowFish con lazarus e free pascal.
Creare un server multithread
guida all'installazione di fpc trunk da subversion in linux gentoo
Indice
DB concetti fondamentali e connessioni standard
Advanced Record Syntax
DB concetti fondamentali e DBGrid
DB concetti fondamentali e TDBEdit, TDBMemo e TDBText
Advanced Record Syntax: un esempio pratico
Superclasse form base per programmi gestionali (e non)
Superclasse form base per programmi gestionali (e non) #2 - log, exception call stack, application toolbox
Superclasse form base per programmi gestionali (e non) #3 - traduzione delle form
Superclasse form base per programmi gestionali (e non) #4 - wait animation
Un dialog per la connessione al database:TfmSimpleDbConnectionDialog
Installare lazarus su mac osx sierra
immagine docker per lavorare con lazarus e free pascal
TDD o Test-Driven Development
Benvenuto! Effettua l'accesso oppure registrati.
Aprile 27, 2024, 10:17:00 am

Inserisci il nome utente, la password e la durata della sessione.

328 Visitatori, 0 Utenti

Autore Topic: conversione archivio dbf (dbase III plus) a sqlite  (Letto 3619 volte)

casey

  • Newbie
  • *
  • Post: 43
  • Karma: +0/-0
conversione archivio dbf (dbase III plus) a sqlite
« il: Marzo 04, 2022, 04:09:07 pm »
Ciao a tutti,
dovrei convertire un archivio clienti di un vecchio programma fatto in dbase III plus sotto dos,
si tratta di un DBF,
mi interesserebbe convertirlo sia in sqlite, che in csv,

ho visto che ci sono dei siti che fanno ciò,
ma siccome si tratta di dati sensibili non mi fido a caricarli su quei siti,
c'e altro modo pee farlo in locale e in modo che i dati restino integri così come sono?

su Lazarus per sqlite sto usando Zeodb,
quindi creo il form e ci metto gli oggetti sul form,
se volessi utilizzare free pascal, quindi con schermate non grafichecome potrei fare?

grazie
« Ultima modifica: Marzo 04, 2022, 04:30:35 pm da casey »

nomorelogic

  • Global Moderator
  • Hero Member
  • *****
  • Post: 2870
  • Karma: +20/-4
Re:conversione archivio dbf (dbase III plus) a sqlite
« Risposta #1 il: Marzo 04, 2022, 05:25:17 pm »
se si tratta di una operazione una-tantum potresti aprire file file DBF con Libre Office e poi te lo salvi direttamente in CSV

o si tratta di una operazione che deve essere fatta continuamente?

nomorelogic
Imagination is more important than knowledge (A.Einstein)

bonmario

  • Hero Member
  • *****
  • Post: 1302
  • Karma: +10/-1
Re:conversione archivio dbf (dbase III plus) a sqlite
« Risposta #2 il: Marzo 04, 2022, 06:23:59 pm »
Oltre a quanto scritto da @nomorelogic, in Lazarus c'è questo:
https://wiki.lazarus.freepascal.org/Lazarus_Tdbf_Tutorial

ma non so se si tratta dello stesso tipo di files.
Io lo uso da anni, per un unico semplice progetto.

Ciao, Mario

casey

  • Newbie
  • *
  • Post: 43
  • Karma: +0/-0
Re:conversione archivio dbf (dbase III plus) a sqlite
« Risposta #3 il: Marzo 04, 2022, 08:11:18 pm »
se si tratta di una operazione una-tantum potresti aprire file file DBF con Libre Office e poi te lo salvi direttamente in CSV

o si tratta di una operazione che deve essere fatta continuamente?

nomorelogic

Ho letto su internet che la conversione in csv da libreoffice non è perfetta,

in ogni caso più che csv, a me interesserebbe convertirlo in sqlite

casey

  • Newbie
  • *
  • Post: 43
  • Karma: +0/-0
Re:conversione archivio dbf (dbase III plus) a sqlite
« Risposta #4 il: Marzo 04, 2022, 08:13:04 pm »
Oltre a quanto scritto da @nomorelogic, in Lazarus c'è questo:
https://wiki.lazarus.freepascal.org/Lazarus_Tdbf_Tutorial

ma non so se si tratta dello stesso tipo di files.
Io lo uso da anni, per un unico semplice progetto.

Ciao, Mario

non voglio usare il dbf, che è meno efficiente,
cerco un modo per convertire il database vecchio direttamente in sqlite

altra cosa,
come posso usare zeos in free pascal non essendoci i form?
« Ultima modifica: Marzo 04, 2022, 09:14:29 pm da casey »

DragoRosso

  • Scrittore
  • Hero Member
  • *****
  • Post: 1266
  • Karma: +43/-0
  • Prima ascoltare, poi decidere
Re:conversione archivio dbf (dbase III plus) a sqlite
« Risposta #5 il: Marzo 04, 2022, 09:24:07 pm »
altra cosa,
come posso usare zeos in free pascal non essendoci i form?
Crea una app console e copiaci dentro questo codice. Nella stessa directory copiaci i due file allegati.

Ciao

Codice: [Seleziona]
program Console_DemoDB;

{$mode objfpc}{$H+}

uses
  {$IFDEF UNIX}
  cthreads,
  {$ENDIF}
  Classes, SysUtils, CustApp, odbcconn, SQLDB,  DB,
  ZCompatibility, ZConnection, ZDataset, SQLite3Conn
  { you can add units after this };

type

  { TMyApplication }

  TMyApplication = class(TCustomApplication)
  protected
    procedure DoRun; override;
  public
    constructor Create(TheOwner: TComponent); override;
    destructor Destroy; override;
  end;

{ TMyApplication }

var
  ZConnection1: TZConnection;
  ZTable1: TZTable;
procedure TMyApplication.DoRun;
var
  ErrorMsg: String;
begin
  { add your program here }
  //Inizializzazione componenti
  ZConnection1 := TZConnection.Create(nil);
  with ZConnection1 do
    begin
      ControlsCodePage := cCP_UTF8;
      AutoEncodeStrings := True;
      ClientCodepage := 'UTF-8';
      Properties.Add('AutoEncodeStrings=True');
      Properties.Add('controls_cp=CP_UTF8');
      Properties.Add('codepage=UTF-8');
      Port := 0;
      Database := '.\db.s3db';
      Protocol := 'sqlite-3';
    end;
  ZConnection1.Connected:= True;
  ZTable1 := tZTable.Create(nil);
  with ZTable1 do
    begin
      Connection := ZConnection1;
      SortedFields := 'ID';
      TableName := 'utenti';
      IndexFieldNames := 'ID Asc';
    end;
  ZTable1.Active:= True;
  //Fine Inizializzazione

  ZTable1.First;
  writeln(ZTable1.FieldByName('Cognome').AsAnsiString,' - ', ZTable1.FieldByName('Nome').AsAnsiString);
  readln();

  //Finalizzazione
  ZTable1.Active:= False;
  ZTable1.Free;
  ZConnection1.Connected := False;
  ZConnection1.Free;
  // stop program loop
  Terminate;
end;

constructor TMyApplication.Create(TheOwner: TComponent);
begin
  inherited Create(TheOwner);
  StopOnException:=True;
end;

destructor TMyApplication.Destroy;
begin
  inherited Destroy;
end;

var
  Application: TMyApplication;
begin
  Application:=TMyApplication.Create(nil);
  Application.Title:='My Application';
  Application.Run;
  Application.Free;
end.
               
« Ultima modifica: Marzo 04, 2022, 09:34:03 pm da DragoRosso »
:) Ogni alba è un regalo, ogni tramonto è una conquista :)

casey

  • Newbie
  • *
  • Post: 43
  • Karma: +0/-0
Re:conversione archivio dbf (dbase III plus) a sqlite
« Risposta #6 il: Marzo 04, 2022, 09:33:42 pm »
Crea una app console e copiaci dentro questo codice. Nella stessa directory copiaci i due file allegati.

Ciao

Codice: [Seleziona]
program Console_DemoDB;

{$mode objfpc}{$H+}

uses
  {$IFDEF UNIX}
  cthreads,
  {$ENDIF}
  Classes, SysUtils, CustApp, odbcconn, SQLDB,  DB,
  ZCompatibility, ZConnection, ZDataset, SQLite3Conn
  { you can add units after this };

type

  { TMyApplication }

  TMyApplication = class(TCustomApplication)
  protected
    procedure DoRun; override;
  public
    constructor Create(TheOwner: TComponent); override;
    destructor Destroy; override;
  end;

{ TMyApplication }

var
  ZConnection1: TZConnection;
  ZTable1: TZTable;
procedure TMyApplication.DoRun;
var
  ErrorMsg: String;
begin
  { add your program here }
  //Inizializzazione componenti
  ZConnection1 := TZConnection.Create(nil);
  with ZConnection1 do
    begin
      ControlsCodePage := cCP_UTF8;
      AutoEncodeStrings := True;
      ClientCodepage := 'UTF-8';
      Properties.Add('AutoEncodeStrings=True');
      Properties.Add('controls_cp=CP_UTF8');
      Properties.Add('codepage=UTF-8');
      Port := 0;
      Database := '.\db.s3db';
      Protocol := 'sqlite-3';
    end;
  ZConnection1.Connected:= True;
  ZTable1 := tZTable.Create(nil);
  with ZTable1 do
    begin
      Connection := ZConnection1;
      SortedFields := 'ID';
      TableName := 'utenti';
      IndexFieldNames := 'ID Asc';
    end;
  ZTable1.Active:= True;
  //Fine Inizializzazione

  ZTable1.First;
  writeln(ZTable1.FieldByName('Cognome').AsAnsiString,' - ', ZTable1.FieldByName('Nome').AsAnsiString);
  readln();

  //Finalizzazione
  ZTable1.Active:= False;
  ZTable1.Free;
  ZConnection1.Connected := False;
  ZConnection1.Free;
  // stop program loop
  Terminate;
end;

constructor TMyApplication.Create(TheOwner: TComponent);
begin
  inherited Create(TheOwner);
  StopOnException:=True;
end;

destructor TMyApplication.Destroy;
begin
  inherited Destroy;
end;

var
  Application: TMyApplication;
begin
  Application:=TMyApplication.Create(nil);
  Application.Title:='My Application';
  Application.Run;
  Application.Free;
end.
             

Ti ringrazio,

praticamente così invece di usare FPC,
uso direttamente Lazarua con Zeos installato, giusto?

hai suggerimenti da darmi anche per la conversione del vecchio dbf dbase III Plus a sqlite?

DragoRosso

  • Scrittore
  • Hero Member
  • *****
  • Post: 1266
  • Karma: +43/-0
  • Prima ascoltare, poi decidere
Re:conversione archivio dbf (dbase III plus) a sqlite
« Risposta #7 il: Marzo 04, 2022, 09:43:08 pm »
Ti ringrazio,
praticamente così invece di usare FPC,
uso direttamente Lazarua con Zeos installato, giusto?
hai suggerimenti da darmi anche per la conversione del vecchio dbf dbase III Plus a sqlite?

Si, usi Lazarus comunque ma semplicemente creando i "controlli" a runtime. Questo è il modo più semplice.
Una alternativa più prestante (ma un pò più complessa), è quella di usare direttamente le interfaccie.
I componenti non sono altre che incapsulazioni di interfaccie, con le interfaccie sei più diretto.

Per la conversione invece, puoi fare un piccolo programma di conversione con Lazarus, usando il componente indicato da @bonmario per leggere il dbf e ZEOS per scrivere un db SQLite, poi se non sbaglio SQLite ha un metodo diretto per scrivere un csv dei dati del suo db.

Ci sono anche dei tools a pagamento che fanno ciò, ma ultimanete sono un pò fuori dal giro e quindi non saprei darti altre indicazioni.

Ciao
:) Ogni alba è un regalo, ogni tramonto è una conquista :)

sergio

  • Full Member
  • ***
  • Post: 146
  • Karma: +1/-0
Re:conversione archivio dbf (dbase III plus) a sqlite
« Risposta #8 il: Marzo 12, 2022, 07:38:09 pm »
Ciao , se vuoi puoi usare DB browser for Sqlite che titrasforma unfile csv  in un archivio sqlite. Il programma è Free !
Programmo per passione !

casey

  • Newbie
  • *
  • Post: 43
  • Karma: +0/-0
Re:conversione archivio dbf (dbase III plus) a sqlite
« Risposta #9 il: Marzo 18, 2022, 02:07:31 pm »
altra cosa,
come posso usare zeos in free pascal non essendoci i form?
Crea una app console e copiaci dentro questo codice. Nella stessa directory copiaci i due file allegati.

Ciao

Codice: [Seleziona]
program Console_DemoDB;

{$mode objfpc}{$H+}

uses
  {$IFDEF UNIX}
  cthreads,
  {$ENDIF}
  Classes, SysUtils, CustApp, odbcconn, SQLDB,  DB,
  ZCompatibility, ZConnection, ZDataset, SQLite3Conn
  { you can add units after this };

type

  { TMyApplication }

  TMyApplication = class(TCustomApplication)
  protected
    procedure DoRun; override;
  public
    constructor Create(TheOwner: TComponent); override;
    destructor Destroy; override;
  end;

{ TMyApplication }

var
  ZConnection1: TZConnection;
  ZTable1: TZTable;
procedure TMyApplication.DoRun;
var
  ErrorMsg: String;
begin
  { add your program here }
  //Inizializzazione componenti
  ZConnection1 := TZConnection.Create(nil);
  with ZConnection1 do
    begin
      ControlsCodePage := cCP_UTF8;
      AutoEncodeStrings := True;
      ClientCodepage := 'UTF-8';
      Properties.Add('AutoEncodeStrings=True');
      Properties.Add('controls_cp=CP_UTF8');
      Properties.Add('codepage=UTF-8');
      Port := 0;
      Database := '.\db.s3db';
      Protocol := 'sqlite-3';
    end;
  ZConnection1.Connected:= True;
  ZTable1 := tZTable.Create(nil);
  with ZTable1 do
    begin
      Connection := ZConnection1;
      SortedFields := 'ID';
      TableName := 'utenti';
      IndexFieldNames := 'ID Asc';
    end;
  ZTable1.Active:= True;
  //Fine Inizializzazione

  ZTable1.First;
  writeln(ZTable1.FieldByName('Cognome').AsAnsiString,' - ', ZTable1.FieldByName('Nome').AsAnsiString);
  readln();

  //Finalizzazione
  ZTable1.Active:= False;
  ZTable1.Free;
  ZConnection1.Connected := False;
  ZConnection1.Free;
  // stop program loop
  Terminate;
end;

constructor TMyApplication.Create(TheOwner: TComponent);
begin
  inherited Create(TheOwner);
  StopOnException:=True;
end;

destructor TMyApplication.Destroy;
begin
  inherited Destroy;
end;

var
  Application: TMyApplication;
begin
  Application:=TMyApplication.Create(nil);
  Application.Title:='My Application';
  Application.Run;
  Application.Free;
end.
             

Niente da fare,ho copiato il codice, ma via console mi da sempre errore nella USES,
non capisco perchè,
ho provato anche con free pascal direttamente,

cmq c'è un modo per ingrandire quella maledetta finestra di free pascal prima che diventi cieco?

DragoRosso

  • Scrittore
  • Hero Member
  • *****
  • Post: 1266
  • Karma: +43/-0
  • Prima ascoltare, poi decidere
Re:conversione archivio dbf (dbase III plus) a sqlite
« Risposta #10 il: Marzo 18, 2022, 03:09:22 pm »
Niente da fare,ho copiato il codice, ma via console mi da sempre errore nella USES,
non capisco perchè,
ho provato anche con free pascal direttamente,

cmq c'è un modo per ingrandire quella maledetta finestra di free pascal prima che diventi cieco?

Che errore nelle USES ?

Ingrandire che cosa ?

Non ho visto dei rifierimenti nei post precedenti a queste tue ultime questioni.

Ciao
:) Ogni alba è un regalo, ogni tramonto è una conquista :)

casey

  • Newbie
  • *
  • Post: 43
  • Karma: +0/-0
Re:conversione archivio dbf (dbase III plus) a sqlite
« Risposta #11 il: Marzo 18, 2022, 10:52:20 pm »
Niente da fare,ho copiato il codice, ma via console mi da sempre errore nella USES,
non capisco perchè,
ho provato anche con free pascal direttamente,

cmq c'è un modo per ingrandire quella maledetta finestra di free pascal prima che diventi cieco?

Che errore nelle USES ?

Ingrandire che cosa ?

Non ho visto dei rifierimenti nei post precedenti a queste tue ultime questioni.

Ciao

Scusami amico,
l'errore uses ora non lo ricordo,
quando sono al pc ti faccio sapere.
Cmq il coeice che mi hai allegato, copiato in un file di testo, in modo da utilizzare sqlite via console, mi da quell'errore USES, che poi ti dirò.

Ciò che non riesco ad ingrandire,
è la finestra di FPC,
praticamente per programmare via console.
Per utilizzarla ieri pomeriggio sono quasi diventato cieco.

casey

  • Newbie
  • *
  • Post: 43
  • Karma: +0/-0
Re:conversione archivio dbf (dbase III plus) a sqlite
« Risposta #12 il: Marzo 25, 2022, 05:02:30 pm »
Niente da fare,ho copiato il codice, ma via console mi da sempre errore nella USES,
non capisco perchè,
ho provato anche con free pascal direttamente,

cmq c'è un modo per ingrandire quella maledetta finestra di free pascal prima che diventi cieco?

Che errore nelle USES ?

Ingrandire che cosa ?

Non ho visto dei rifierimenti nei post precedenti a queste tue ultime questioni.

Ciao

allora,
creando un programma cnosole e incolllando il codice che mi hai detto tu,
mi viene fuori l'errore : Fatal: can't find unit Zcompatibility used by console_demo

se cancello zcompatibility,
mi danno errore gli altri ZConnection, ZDataset, SQLite3Conn
« Ultima modifica: Marzo 25, 2022, 06:25:11 pm da casey »

DragoRosso

  • Scrittore
  • Hero Member
  • *****
  • Post: 1266
  • Karma: +43/-0
  • Prima ascoltare, poi decidere
Re:conversione archivio dbf (dbase III plus) a sqlite
« Risposta #13 il: Marzo 28, 2022, 11:11:02 pm »
allora,
creando un programma cnosole e incolllando il codice che mi hai detto tu,
mi viene fuori l'errore : Fatal: can't find unit Zcompatibility used by console_demo

se cancello zcompatibility,
mi danno errore gli altri ZConnection, ZDataset, SQLite3Conn

Apri "Analizzatore Progetti" e dove c'è la scritta "Pacchetto Richiesto" con il tasto destro del mouse scegli "AGGIUNGI" e poi nell'elenco che appare seleziona "zcomponent".

Ora vedrai che funziona.

Ciao
:) Ogni alba è un regalo, ogni tramonto è una conquista :)

casey

  • Newbie
  • *
  • Post: 43
  • Karma: +0/-0
Re:conversione archivio dbf (dbase III plus) a sqlite
« Risposta #14 il: Marzo 29, 2022, 07:05:08 pm »
allora,
creando un programma cnosole e incolllando il codice che mi hai detto tu,
mi viene fuori l'errore : Fatal: can't find unit Zcompatibility used by console_demo

se cancello zcompatibility,
mi danno errore gli altri ZConnection, ZDataset, SQLite3Conn

Apri "Analizzatore Progetti" e dove c'è la scritta "Pacchetto Richiesto" con il tasto destro del mouse scegli "AGGIUNGI" e poi nell'elenco che appare seleziona "zcomponent".

Ora vedrai che funziona.

Ciao

scusami, ma questi pacchetti non dovevano essere già aggiunti installando zeos,
e quindi solo richiamati con uses?

Ho un cacchio di problema anche sotto windows quando programmo applicazioni console,
c'è modo di vedere l'applicazione in full screen?

su windows XP funziona premendo ALT INVIO,
su Linux funziona,
sul vecchio DOS pure tutto ok,
ma sotto Windows 7/8/10/11 mi si apre quella schermata piccola, e non si può lavorare così.
Questo problema ce l'ho anche con FreeBasic,
mentre con QB64 nessun problema, funziona magnificamente.
Con C++ mi basta scrivere System('mode 650');
compilare , e va in full screen.

Con free pascal proprio non riesco.


in qualche post fa chiedevo come convertire dei vecchi archivi dbf in sqlite,
alla fine ci sono riuscito con il programma FULL CONVERT, che però è a pagamento.
Converte qualsiasi archivio in qualsiasi altro formato,
ve lo consiglio, funziona benissimo.

Ho ripreso a programmare da poco, e devo dire che mi è tornata un pò questa passione che avevo perso tempo fa,
anche se sono rimasto parecchio indietro rispetto agli anni 90 quando ero al TOP, considerato un grande esperto,
devo dire che amo il PASCAL,
però mi sono trovato in queste settimane così per riprendere la mano, a convertire vecchi gestionali DOS che avevo programmato io stesso all'epoca con dbase III plus,
e li ho rifatti sia in QB64 che in FREE PASCAL,
funzionano benissimo entrambi, molto meglio di come funzionavano all'epoca con il dbase che era interpretato e lento,
e così mi sono messo a fare un paragone,
e vi posso dire che i programmi in QB64 li ho realizzati molto più velocemente, e con la metà delle righe rispetto a free pascal.
Come detto, amo il free pascal, ma mi sono reso conto che amo molto di più QB64,
tutto è molto più rapido e semplificato con esso,
è chiaro che non ha tutte le funzioni che ha il free pascal, che è immenso, ma alla fine ha tutto ciò che serve.
Peccato che non ci sia un RAD simile a LAZARUS che invece di Free Pascal usi QB64,
una specie di visual basic 6 sotto licenza GPL, multipiattaforma.
So che esiste Visual Basic .net express, che è gratuito,
ma ormai il visual basic non ha più nulla a che vedere con la versione 6 e QB64,
ha perso la sua immediatezza e facilità,
è più simile a C# che al Visual Basic 6,
e poi non ho mai amato i software che pesano diversi giga.

« Ultima modifica: Marzo 29, 2022, 07:22:14 pm da casey »

 

Recenti

How To

Utenti
Stats
  • Post in totale: 18776
  • Topic in totale: 2234
  • Online Today: 327
  • Online Ever: 900
  • (Gennaio 21, 2020, 08:17:49 pm)
Utenti Online
Users: 0
Guests: 328
Total: 328

Disclaimer:

Questo blog non rappresenta una testata giornalistica poiché viene aggiornato senza alcuna periodicità. Non può pertanto considerarsi un prodotto editoriale ai sensi della legge n. 62/2001.