Autore Topic: accedere a tabella .dbf (clipper e dbase III)  (Letto 5064 volte)

Offline gambrinus

  • Gamberetto
  • *
  • Post: 4
    • Mostra profilo
accedere a tabella .dbf (clipper e dbase III)
« il: 02 Luglio 2011, 20:22:23 »
Prima di tutto un saluto a tutti! mi sono appena iscritto al forum e vorrei chiedere aiuto per un progetto nel quale mi sono imbarcato.

Piccola premessa: non sono un programmatore (conosco poco e niente di Java, qualcosa di C e il Visual Basic a livello scolastico) ma ho pensato di provare a riscrivere un vecchio gestionale che utilizziamo per lavoro. Il fatto è che è davvero comodo nella sua semplicità e non vorremmo abbandonarlo per quanto manchino alcune funzioni importanti e la piena compatibilità con win7 (ci sono problemi con le stampe, con la visualizzazione a tutto schermo e con alcuni altri aspetti). Il programma è stato scritto circa vent'anni da un conoscente che purtroppo e morto alcuni anni fa e che, di conseguenza, non l'ha più potuto aggiornare. Non sono in possesso dei sorgenti ma -come da titolo- so che il programma è stato scritto in clipper e che si appoggia ad un database dBase III; in pratica in una cartella sono contenute tutte le tabelle (ognuna è un singolo file .dbf) più gli indici.

Detto quanto sopra, vorrei chiedervi se sapreste suggerirmi come accedere a queste tabelle perché non sono riuscito a trovare molto googlando.

Un'ultima precisazione: la sola soluzione che ho trovato in internet era quella dell'esportazione delle tabelle in cvs o altri formati. Purtroppo questo non andrebbe bene perché avrò la necessità di accedere al database da entrambi i programmi (vecchio e nuovo) per un certo periodo per motivi lavorativi e ho pianificato la migrazione ad un database MySql solo in seconda battuta. Non posso quindi modificare l'attuale database fino a migrazione avvenuta.

Grazie in anticipo per l'aiuto, spero di avervi dato sufficienti informazioni.
Gambrinus

Offline milio

  • Senatore Gambero
  • ******
  • Post: 1.273
  • Chi parla poco dice tanto...
    • Mostra profilo
Re: accedere a tabella .dbf (clipper e dbase III)
« Risposta #1 il: 02 Luglio 2011, 21:59:31 »
L'unica cosa che mi viene in mente è vedere se esistono dei driver odbc...

Offline gambrinus

  • Gamberetto
  • *
  • Post: 4
    • Mostra profilo
Re: accedere a tabella .dbf (clipper e dbase III)
« Risposta #2 il: 03 Luglio 2011, 10:13:32 »
Veramente non sono molto pratico di driver odbc ma sul sito unixODBC, nella sezione driver, non ho trovato nulla che sembrasse fare al caso mio. Ad ogni modo tenterò di utilizzarli.

Immagino potrebbe essere utile avere uno dei file a cui tento di accedere; lo allego.

Grazie milio e grazie a tutti!

Offline md9327

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.840
    • Mostra profilo
Re: accedere a tabella .dbf (clipper e dbase III)
« Risposta #3 il: 04 Luglio 2011, 12:00:23 »
Il DBIII non è un db rdbms, e ha una sintassi SQL like.

Devi però verificare se è davvero un DBIII o un DB7 (che è stata l'ultima versione, inserita anche in Visual dBase). Nel secondo caso, a suo tempo, avevo iniziato a scrivere una liberia per leggere questo tipo di database, che ha una struttura particolare (per non parlare degli indici, a volte multipli nello stesso file MDI). Nel caso di DBIII, se hai la possibilità, dovresti riuscire a trovare in qualche modo l'interprete, che ti permetterebbe l'estrazione dei dati in vari formati o, in alternativa, qualche manager o editor (es. ErWin) che avevavo la possibilità di accedere a database di quel tipo.

Riguardo al programma, a suo tempo esistevano dei decompilatori (ricordo Valkyrie, o qualcosa del genere). Ti permettevano di estrarre il codice sorgente, senza però mantenere i nomi delle variabili e delle funzioni originali, e questo era normale visto che si trattava di librerie C.

Un'ultima cosa: il formato dei dati del database DBIII (o DB7) non è compatibile con l'attuale formato ISO, per cui è necessaria una conversione, in particolare con dati di tipo Date e Float.

Offline gambrinus

  • Gamberetto
  • *
  • Post: 4
    • Mostra profilo
Re: accedere a tabella .dbf (clipper e dbase III)
« Risposta #4 il: 04 Luglio 2011, 12:56:33 »
Il database è un DBIII, lo avevo verificato con dbfviewer che mi permette di visualizzare i dati e, eventualmente, di esportarli. Rimane il problema a cui accennavo, ovvero che l'esportazione non è una soluzione percorribile nel mio caso perché mi constringerebbe a migrare dal vecchio database al nuovo senza la possibilità di un utilizzo simultaneo (cosa che in un primo momento sarebbe per me indispensabile).

Per quanto riguarda i decompilatori devo dire che non avevo idea che esistesse qualcosa di simile (sapevo che, avendo un eseguibile, era possibile al massimo recuperare il sorgente in assembler. Ma non mi sono mai informato nel dettaglio e potrebbe essere tranquillamente una cavolata) proverò questo  Valkyrie o cercherò qualcosa di analogo perché avere i sorgenti mi sarebbe ovviamente utilissimo!

Ho pensato un'altra cosa. Le tabelle .dbf sono apribili da excel/ooffice, potrei pensare di accedere alle tabelle trattandole come fogli excel o il salvataggio ne cambierebbe la formattazione (rendendole inaccessibili dal "vecchio" programma)? oppure, potrei accedere alle tabelle trattandole come documenti di testo (ho visto che aprendole con kate i dati sono visualizzabili una volta capito la lungezza delle varie "stringhe" e la formattazione delle colonne all'inizio del file). Sarebbero soluzioni in qualche modo "pericolose" per l'integrità del database?

Grazie

Offline md9327

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.840
    • Mostra profilo
Re: accedere a tabella .dbf (clipper e dbase III)
« Risposta #5 il: 05 Luglio 2011, 11:25:53 »
Toccare il database, se non hai ben chiaro come viene gestito, è alquanto pericoloso...

Il leggerlo sicuramente non ti crea problemi...

Il formato del DB3 dovresti trovarlo in giro, in qualche sito arcaico, mi pare lo abbia anche io da qualche parte visto che a suo tempo avevo programmato parecchie cose con Clipper (a mio avviso l'antesignano della programmazione ad oggetti...).

Si potrebbe pensare a qualche sorta di convertitore, magari fatto in Gambas, ma farlo per un solo motivo credo sia un lavoro quasi inutile...

Comunque, se excel apre quel tipo di file (non ricordavo lo potesse fare), ovviamente non puoi servirtene per scriverci anche, ti potrebbe rovinare le tabelle... Io penso che l'unica cosa che puoi fare è un piccolo sistema di esportazione parallela, almeno finchè hai in piedi il vecchio programma.

Offline gambrinus

  • Gamberetto
  • *
  • Post: 4
    • Mostra profilo
Re: accedere a tabella .dbf (clipper e dbase III)
« Risposta #6 il: 05 Luglio 2011, 12:58:55 »
la soluzione dell'importazione parallela (immaginando che tu intenda qualcosa di simile ad accesso a vecchio db=importazione in nuovo db) era la mia soluzione "di scorta". Mi crea diversi problemi per il fatto che simultaneamente dovrei curare una migrazione da windows a linux; per questo volevo poter accedere allo stesso db. Facendo come suggerisci avrei il problema della ridondanza dei dati e dell'impossibilità dell'utente win ad accedere ai dati aggiornati dall'utente linux. Non posso scartarla come soluzione (più che altro perché è ovviamente quella meno rischiosa per l'integrita del database), ma preferisco provare a scervellarmi ancora un po' sulle alternative.

Naturalmente dovrei fare un'infinità di prove per verificare la funzionalità della cosa ma, almeno a livello teorico, puoi confermarmi che, aprendo il file da editor di testo, non si va a toccare la formattazione della tabella? lo chiedo perché (provare ad aprire il file che ho allegato con qualunque editor per credere) la formattazione sembra veramente banale; si tratta di 6 tipi di tabella distinti e quindi di capire esattamente come funzionno "solo" 6 distinte formattazioni. Dopodiché si tratterebbe solo di contare la lunghezza dei campi..

Insomma se non tocco la formattazione all'inizio del file teoricamente il file rimane intatto. Sono troppo ottimista?

Offline md9327

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.840
    • Mostra profilo
Re: accedere a tabella .dbf (clipper e dbase III)
« Risposta #7 il: 05 Luglio 2011, 16:26:28 »
Finchè non modifichi e salvi il file, l'editor non può sballarti la tabella...

Riguardo alla formattazione, lo standard usato da DB3 aveva un formato ben definito, ma aveva anche delle particolarità, legate alla concenzione di quel tempo. Come ti avevo accennato, alcuni tipi di dato erano codificati in modo particolare, diverso da quanto è in uso oggi, in particolare appunto le date e i numeri in virgola mobile. Anche per le stringhe non mi pare venivano usati i formati ISO internazionali (UTF e varie...), per cui la trasformazione dei caratteri necessiterebbe di una certa attenzione.

Riguardo all'aggiornamento parallelo, intendevo quello di esportare il db originale, periodicamente, su un db di backup (es. MySQL), e non viceversa. Per fare anche la cosa inversa ti servirebbe una libreria ad-hoc, che non esiste (almeno per quanto ne sò). Io, sempre come accennato, avevo fatto una libreria in C, ma che poteva solo leggere i file DB3, non scriverli. Magari lavorandoci sopra si potrebbe anche la funzione di scrittura, ma la cosa non è sicuramente immediata. Oltre a questo, c'è anche da mettere in conto il discorso di eventuali indici, che non ho avuto modo di analizzare a suo tempo, ma che sicuramente comportano un'ulteriore complicazione, anzi, diciamo che sarebbero una pesante complicazione, visto che dovresti comunque aggiornarli.

Secondo me, e di solito è questo il metodo in questi casi di porting di vecchie applicazioni, è quello di creare il nuovo archivio, compresa l'applicazione di gestione, e mantenere attiva la vecchia, fino a che tutto non sarà pronto per il definitivo cambio.

Offline marcobra

  • Gamberetto
  • *
  • Post: 3
    • Mostra profilo
Re: accedere a tabella .dbf (clipper e dbase III)
« Risposta #8 il: 12 Dicembre 2011, 23:49:18 »
Ma perchè non install ed usi Harbour Clipper per ricompilare la tua applicazione con Harbour
Credo che non avrai molte difficoltà a ricompilare il sorgente... (anche se ad esempio hai usato le librerie Clipper Tools)
La stessa applicazione compilata per i diversi sistemi operativi la potrai usare in Linux ed in Windows ed anche su altri sistemi all'occorrenza...
Dovrai naturlamente su Linux sistemare i path tenendo conto delle maiuscole e minuscole nei nomi dei files e nei percorsi...

Ho già portato applicazioni scritte in clipper sotto Linux e funzionano a meraviglia... tieni conto che per le tue app puoi implementare un gui tramite le librerie qt.

Poi per riscrivere l'applicativo con Gambas potresti migrare il/i databases dell'app che so' a sqlite3
Potrai accedere a questo punto da tutti e due gli applicativi ovvero da quello Clipper ricompilato e naturalmente modificato e da Gambas

Leggi qui...: http://www.gambas-it.org/smf/index.php?topic=1953.0

Ciao...


Uso Ubuntu 32 bits stable e unstable, gambas2, gambas3 entrambi da svn