Italian community of Lazarus and Free Pascal

Programmazione => Databases => Topic aperto da: kelvo - Novembre 01, 2011, 06:04:44 pm

Titolo: Dbf
Inserito da: kelvo - Novembre 01, 2011, 06:04:44 pm
Obsoleto il Dbf o vale la pena usarlo?
L'alternativa?
Titolo: Re:Dbf
Inserito da: xinyiman - Novembre 01, 2011, 10:02:36 pm
Io lo trovo obsoleto, preferisco mille e mille volte SqlLite!
Titolo: Re:Dbf
Inserito da: kelvo - Novembre 01, 2011, 10:06:55 pm
certo ma io ho il problema di manipolare i dati velocemente sai apro le tabelle con access e via ...
comunque sqllite quindi?
Titolo: Re:Dbf
Inserito da: xinyiman - Novembre 01, 2011, 10:10:07 pm
SQLite è un database portabile multipiattaforma scritto in C. E' comodissimo. Io l'ho usato con successo sia su windows che su linux che su windows mobile. Funziona anche su Android

Qui qualche info in più, per Lazarus ci sono degli oggetti oppure anche ZeosLib permette di usarlo.

http://it.wikipedia.org/wiki/SQLite
Titolo: Re:Dbf
Inserito da: kelvo - Novembre 01, 2011, 10:12:15 pm
lo uso gia' con realbasic
ma e' se devo manipolare i dati da fuori bene come con access non c'e' nulla
Titolo: Re:Dbf
Inserito da: xinyiman - Novembre 01, 2011, 10:16:07 pm
Che genere di manipolazioni? Query e via discorrendo?
Titolo: Re:Dbf
Inserito da: kelvo - Novembre 01, 2011, 10:16:56 pm
si cancellare o editare record velocemente
senza scrivere la query
Titolo: Re:Dbf
Inserito da: xinyiman - Novembre 01, 2011, 10:19:52 pm
Bhe puoi fare un applicazione tu con Lazarus, se è solo per editare record usi ZeosLib (per cambiare tipologia di database facilmente) e poi fai selezionare una tabella del db e te la gestisci con una DBGrid.
Titolo: Re:Dbf
Inserito da: Fabio - Novembre 01, 2011, 10:55:36 pm
si cancellare o editare record velocemente
senza scrivere la query

Prova questi se ti van bene, sono gestione di database multipli
http://fishcodelib.com/Database.htm
http://www.etl-tools.com/data-base-browser-supports-tabs.html
Titolo: Re:Dbf
Inserito da: kelvo - Novembre 02, 2011, 09:18:37 am
Li provo subito ...
Titolo: Re:Dbf
Inserito da: Goblin - Novembre 02, 2011, 03:22:27 pm
http://www.sqliteexpert.com/
versione personal
Titolo: Re:Dbf
Inserito da: faxius - Gennaio 28, 2012, 01:51:21 pm
Salve avrei un paio di problemini con tdbf:
 primo:

quando vado ad eseguireo (F9) mi riporta l'errore:

C:\Program Files\lazarus\components\tdbf\registerdbf.pas(74,1) Error: Can't create object file: C:\Program Files\lazarus\components\tdbf\lib\x86_64-win64\win32\registerdbf.o
C:\Program Files\lazarus\components\tdbf\registerdbf.pas(74,1) Fatal: Can't create object C:\Program Files\lazarus\components\tdbf\lib\x86_64-win64\win32\registerdbf.o

però se eseguo (F9) di nuovo non riporta più questo errore. Ho provato riaprendo il package del tdbf e a ricompilarlo, ma niente.
Come si ovvia a questo errore?

secondo:
Ho creato un dbf con un campo 'data' e con un campo 'nome' con cdbfexplorer.
Tramite programma posso inserire varie date e nomi, ma come si fa a metterle in serie cronologica in base alla data?
esempio
   06/01/2012    mario
   15/01/2012   gino
   20/01/2012   luigi
   20/01/2012   mario
   22/01/2012   enzo

e non, come rimane a me,
   06/01/201   mario
   15/01/2012   gino
   20/01/2012   luigi
   22/01/2012   enzo
   20/01/2012   mario

Ho provato a seguire il tutorial mettendo l'addindex, ma non ci son riuscito.
Mi ricordo che in delphi 3 con database desktop, in fase dic reazione della tabella, si metteva una key(*)..ma ora?

ho letto nel forum altri post e che tdbf non è molto usato(mi pare), però vorrei usare questo.

grazie a tutti coloro che vorranno darmi un aiuto e scusate la lungaggine.
Titolo: Re:Dbf
Inserito da: xinyiman - Gennaio 30, 2012, 11:45:23 am
Il primo problema non mi è mai capitato di affrontarlo.
Il secondo idem, è per questo che preferisco usare SQLite al posto dei DBF. Scusa ma non so dirti di più!
Titolo: Re:Dbf
Inserito da: xinyiman - Gennaio 30, 2012, 12:44:34 pm
Ho dato un occhiata qui

http://wiki.lazarus.freepascal.org/Lazarus_Tdbf_Tutorial

Ma non mi sembra che menzioni qualcosa riguardo all'ordinamento. Dove lo hai letto tu?
Titolo: Re:Dbf
Inserito da: faxius - Gennaio 30, 2012, 06:17:23 pm
Ho seguito questo esempio qui:

MyDbf.AddIndex('custid', 'Id', [ixPrimary, ixUnique]);
MyDbf.AddIndex('custname','Name', [ixCaseInsensitive]);
MyDbf.Close;

ma non funge...oppure riporta errore e non è detto che c'entri qualcosa con quello che voglio io ehh :).

Era un tentativo.
Ho provato con Mysql( che sembra essere tipo Database desktop di delphi)
e c'è un comando "Sorttable" ...pensavo si potesse utilizzare anche tramite codice,ma non ci riesco.
Sqllite può ordinarmi le date come le voglio io?
Titolo: Re:Dbf
Inserito da: bonmario - Gennaio 30, 2012, 08:43:15 pm

Ho creato un dbf con un campo 'data' e con un campo 'nome' con cdbfexplorer.
Tramite programma posso inserire varie date e nomi, ma come si fa a metterle in serie cronologica in base alla data?
esempio
   06/01/2012    mario
   15/01/2012   gino
   20/01/2012   luigi
   20/01/2012   mario
   22/01/2012   enzo

e non, come rimane a me,
   06/01/201   mario
   15/01/2012   gino
   20/01/2012   luigi
   22/01/2012   enzo
   20/01/2012   mario

Ho provato a seguire il tutorial mettendo l'addindex, ma non ci son riuscito.

Ciao,
vedendo il tu output, probabilmente hai dichiarato il campo "data" di tipo stringa, invece devi dichiararlo di tipo ftDate o, al massimo ftDateTime se vuoi anche l'ora.

Per il resto ti rimando al tutorial che ti è già stato consigliato: http://wiki.lazarus.freepascal.org/Lazarus_Tdbf_Tutorial (http://wiki.lazarus.freepascal.org/Lazarus_Tdbf_Tutorial) quando ho usato i TDBF per la prima volta qualche anno fa, mi è servito molto.

Dai anche un'occhiata a questo che è molto più completo: http://www.podgoretsky.com/ftp/docs/DB/tdbf.pdf (http://www.podgoretsky.com/ftp/docs/DB/tdbf.pdf)

Ciao, Mario
Titolo: Re:Dbf
Inserito da: xinyiman - Gennaio 31, 2012, 08:32:47 am
Ho seguito questo esempio qui:

MyDbf.AddIndex('custid', 'Id', [ixPrimary, ixUnique]);
MyDbf.AddIndex('custname','Name', [ixCaseInsensitive]);
MyDbf.Close;

ma non funge...oppure riporta errore e non è detto che c'entri qualcosa con quello che voglio io ehh :).

Era un tentativo.
Ho provato con Mysql( che sembra essere tipo Database desktop di delphi)
e c'è un comando "Sorttable" ...pensavo si potesse utilizzare anche tramite codice,ma non ci riesco.
Sqllite può ordinarmi le date come le voglio io?

Si Sqlite si, ma anche gli altri database da te menzionati. Basta che nella query che usi per visualizzare i dati usi la dicitura ORDER BY NomeCampo ASC (per un ordinamento crescente, DESC per quello decrescente).
Titolo: Re:Dbf
Inserito da: faxius - Febbraio 01, 2012, 06:54:51 pm
x bonmario: il campo "data" è ftDate però x essere primario accetta solo integer e string.

utile il manuale tdbf

x xinyiman: proverò ad usare sqlite anche se non lo conosco....farò tentativi

Titolo: Re:Dbf
Inserito da: xinyiman - Febbraio 01, 2012, 07:11:28 pm
guarda, sqlite ti darà tante soddisfazioni :)
Titolo: Problema con packtable su dbf
Inserito da: faxius - Febbraio 24, 2012, 08:44:44 am
Packtable con dbf

Se elimino un record da un dbf questo non viene fisicamente cancellato e fin qui ok.
Ho seguito la procedura di packtable riportata sul tutorial del tdbf e questa funziona solo se il componente del dataset ha impostato dbf1.active:=false fin dall'inizio. Se invece è true e lo cambio da programma si blocca e dice che non può aprire il database. Per far capire meglio allego un esempio con il tutto da inserire in c:\temp.
grazie a chi vorrà aiutarmi.
Faxius
Titolo: Re:Dbf
Inserito da: bonmario - Febbraio 24, 2012, 10:30:55 am
Ho un solo progetto che usa i TDBF e che non tocco da anni. Dopo varie prove ed errori, mi ero fatto una procedura per compattare i DBF senza avere errori. Eccola:

Codice: [Seleziona]
  procedure CompattaDB(var MyDbf:TDbf);
  begin
    //Chiusura preventiva
    MyDbf.Close;
   
    //Apro il file im modalità  esclusiva e lo riorganizzo
    MyDbf.Exclusive:=True;
    MyDbf.Open;
    MyDbf.PackTable;
    MyDbf.RegenerateIndexes;
    MyDbf.Close;
    MyDbf.Exclusive:=False;
  end;

Ciao, Mario
Titolo: Re:Dbf
Inserito da: xinyiman - Febbraio 24, 2012, 11:20:27 am
Io nell'unico programma (vecchio) in cui usavo i dbf usavo questo codice prima di uscire dal programma

Codice: [Seleziona]
     Dbf_Appoggio.TableLevel := 7;
     Dbf_Appoggio.TableName := 'file.dbf';
     Dbf_Appoggio.Exclusive := True;
     Dbf_Appoggio.Open;
     Dbf_Appoggio.PackTable;
     Dbf_Appoggio.RegenerateIndexes;
     Dbf_Appoggio.Close;
     Dbf_Appoggio.Exclusive := False;
Titolo: Re:Dbf
Inserito da: faxius - Febbraio 26, 2012, 03:00:54 pm
X bonmario: è la stessa sintassi che ho usato io e presa dal tutorial, ma si blocca e non riesce ad aprire il dbf.

X xinyiman: riporta che non puo operare su un database attivo. mettendo anche dbf1.active:= false , passa al primo errore che non può aprirre il database.

il file zippato dele mio esempio si vede?
Titolo: Re:Dbf
Inserito da: bonmario - Febbraio 26, 2012, 06:39:04 pm
Il file zippato l'ho visto. Ho provato ad eseguirlo il progetto su Linux. Lancio il programma e nella caption del form c'è 7 e mi fa vedere i 7 record. Clicco sul bottone e mi pulisce la tabella e mi mette nella caption del form 0.

P.S. Ho visto che hai usato le stesse istruzioni che ho usato io, ma l'ordine non è lo stesso.
Io mi ricordo che all'epoca ci ho messo un bel po' a far funzionare il tutto, quindi prova a metterle nell'ordine con cui le ho messe io e poi fammi sapere.

Ciao, Mario
Titolo: Re:Dbf
Inserito da: faxius - Febbraio 26, 2012, 11:44:12 pm
Nella caption della form riporta 7 record ma da dbgrid ce ne sono 6 e non 7. il pulsante a me fa bloccare il tutto dicendo che non può aprire il database. io ho lazarus su win7 non so se può essere la causa perchè a me non pulisce la tabella e non riporta zero(poi perchè dovrebbe riportare zero?). Ho provato anche il tuo ordnine ma il risultato è lo stesso.
Titolo: Re:Dbf
Inserito da: bonmario - Febbraio 27, 2012, 08:15:45 am
Provato qui al lavoro su XP e da un errore di access violation quando fa la Open.
Non so che dire, anche perché lo stesso progetto su Linux 64 bit non da errori.
L'unica differenza rispetto a come lo uso io, è che nel mio progetto le aperture e chiusure del DB vengono fatte tutte a runtime quando serve a me e non all'apertura del progetto.

Ciao, Mario
Titolo: Re:Dbf
Inserito da: faxius - Febbraio 27, 2012, 04:50:13 pm
quindi sembra essere un problema legato al SO che si usa......un altro modo x bypassare il problema ti sovviene? un modo x eliminare definitivament ei record cncellati, ma ancora presenti sul dbf?
ciao e grazie
Titolo: Re:Dbf
Inserito da: bonmario - Febbraio 27, 2012, 08:40:11 pm
Purtroppo in questi giorni ho poco tempo, altrimenti avrei fatto delle prove col tuo sorgente.
Potresti provare a non aprire il file in automatico, ma aprirlo dove ti serve.

Ciao, Mario
Titolo: Re:Dbf
Inserito da: faxius - Febbraio 28, 2012, 03:39:12 pm
Già fatto ma non funge..anche con dbf.close prima del packtable....tsk tsk
Titolo: Re:Dbf
Inserito da: bonmario - Febbraio 28, 2012, 06:38:18 pm
Non capisco cosa non abbia il tuo programma.
Poco prima di uscire dal lavoro, ho trovato il progetto che allego a questo post tra i miei progetti di test. L'ho adattato in fretta prima di uscire.
Lancia il programma, clicca sul bottone "Importa". Lui crea una tabella con i numeri da 1 a 10 e cancella le righe relative ai numeri pari.
Fatto questo, clicca sul bottone "Compatta". Fa la compattazione senza dare errori, ma non so perché non rivisualizza il DB nella Grid.
Spero che ti possa servire ...

Ciao, Mario