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
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
altra cosa,Crea una app console e copiaci dentro questo codice. Nella stessa directory copiaci i due file allegati.
come posso usare zeos in free pascal non essendoci i form?
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.
Crea una app console e copiaci dentro questo codice. Nella stessa directory copiaci i due file allegati.
CiaoCodice: [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?
altra cosa,Crea una app console e copiaci dentro questo codice. Nella stessa directory copiaci i due file allegati.
come posso usare zeos in free pascal non essendoci i form?
CiaoCodice: [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?
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
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
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
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?
.......................................
e poi non ho mai amato i software che pesano diversi giga.
scusami, ma questi pacchetti non dovevano essere già aggiunti installando zeos,
e quindi solo richiamati con uses?
.......................................
e poi non ho mai amato i software che pesano diversi giga.
Per quello che riguarda l'uso di "pacchetti", non è dissimile da gli altri linguaggi: le uses servono al compilatore per la definizione degli "oggetti", delle variabili, delle dichiarazioni, etc ....
L'inserimento nel "pacchetto richiesto" invece è necessario normalmente per componenti già compilate, altrimenti TUTTO dovrebbe essere ricompilato ogni volta: non è equivalente la compilazione di un pacchetto a se stante rispetto alla compilazione o al semplice riferimento (USES) di una unità anche se precompilata.
Chi programma in Lazarus, Delphi o altri linguaggi come anche Visual Studio è abituato a ciò.
Per quello che riguarda invece il pieno schermo del terminale o meno, è una problematica relativa al sistema operativo e a come il software compilato (in questo caso da Lazarus) usa il terminale.
Per quello che riguarda Lazarus sotto Windows 11, con una applicazione console, premendo ALT INVIO a me il terminale si pone a pieno schermo.
Discorso invece QB64 (che non conosco, però immagino sia un discendente di QBasic o di GWBasic): il fatto che uno si trovi bene in un ambiente o l'altro, o che piaccia un linguaggio o l'altro coinvolge diversi aspetti, primo dei quali è la sua conoscenza dell'ambiente e del linguaggio.
Ci sono decine, anzi centinaia di linguaggi (ovviamente stiamo parlando di programmazione) e sono nati proprio dall'insoddisfazione di quelli che già c'erano oppure dalla volontà di creare un proprio paradigma di programmazione (magari legato a scopi specifici come hardware, SO, etc...).
A differenza di tutti gli altri linguaggi di programmazione, che penso tutti noi abbiamo usato più di qualche volta (e che mi tocca usare ancora ogni tanto), il Pascal è un linguaggio strutturato e fortemente tipizzato (non è così invece il QB64, almeno se mantiene i canoni del Basic).
"Fortemente tipizzato" significa (in breve) che qualunque dato tu maneggi, il compilatore deve conoscerne le caratteristiche, in poche parole deve essere dichiarato "prima" e le sue caratteristiche non devono cambiare nel corso del programma. Una variabile dichiarata DOUBLE sarà DOUBLE per tutta la sua esistenza, e per essere usata dovrà essere compatibile con gli argomenti in cui verrà usata. Un array di interi rimarrà un array di interi, magari il un numero di elementi che varia nel corso del programma ma sempre di interi rimarrà.
Tralasciando lo "furbate" e le tecniche avanzate, ciò significa che devi avere chiaro quello che c'è da fare in quanto devi definire TUTTO ed è molto più "certo" ciò che ottieni. In fase di "debug", aggiornamento del codice, ampliamento, etc ...., sarà tutto molto più semplice.
Faccio un esempio su tutti: in Basic (A = B) può voler dire più di una "cosa" ....., assegnazioni e confronti (alla base del linguaggio) che si mischiano ....
Và bhe, sono state scritte pagine di trattati su questi argomenti, e tediare la ns. platea non mi sembra il caso.
Io ho usato prevalentemente il Pascal, anche se sono nato con il C (come la stragrande maggioranza di quelli della mia generazione), e devo dire che la programmazione in Pascal non ha trovare un paragone decente in altri linguaggi. Ma questo forse è dovuto dalla mia "forma mentis" ormai plasmata su ciò.
Poi devo dire sinceramente che avendo sviluppato prevelentamente sotto Windows, Delphi mi è stato da maestro e non c'era storia tra il VB6 ed il Delphi .... la velocità con cui creavi programmi e la facilità soprattutto con Delphi e la sua barra dei componenti già piena zeppa di oggetti di uso comune.
Comunque non posso giudicare QB64 perchè non lo conosco, ma ho come l'impressione che sia una specie di "ambiente" tipo "DEV C++" .... che è fatto in Delphi .... (QB64 sarà fatto in C++ immagino).
Lazarus incarna il concetto di Pascal: ogni versione nuova viene compilata con quella precedente ed è praticamente in puro Pascal.
Lazarus ha dei meriti, e anche delle sue criticità e, su questo sono d'accordo con te, conoscere linguaggio ed ambiente di programmazione pone delle difficoltà che si riescono a superare solo se si è fortemente motivati.
Purtroppo più di darti una mano se hai problemi noi del forum non possiamo fare. Come scrissi su alcuni post, purtroppo c'è un percorso da fare e un pegno da pagare e bisogna essere convinti di sostenerli entrambi.
Se fai un giretto alla base della montagna avrai comunque visto un bellissimo posto e con un dispendio di energie contenuto. Ma solo se avrai l'ardire di scalarla la montagna con grosso dispendio di energie potrai avere il "massimo".
Ciao
per l'errore Error: Undefined symbol: WSregister.... hai idea del motivo?