Programma di esempio MDBDUMP.PRT |
; MDBDUMP
;
; Programma per Proteus
;
; (C) 2003 Simone Zanella Productions
;
; Questo programma visualizza il contenuto di tutte le tabelle contenute nel database
; specificato come primo parametro.
#!proteus -z -j
!include "daodefs.prt"
IF LT(ARGC, 5)
CONSOLELN "Sintassi: " ARGV(1) " " ARGV(2) \
" nomefile.mdb"
CONSOLELN "Scrive il contenuto di tutte le tabelle di nomefile.mdb"
ABORT 0
FI
; Apre il database
DBHandle = 0
ApriDB(@DBHandle, ARGV(5))
; Scorre tutte le tabelle
NumTab = DAODBGETTABCOUNT(DBHandle)
FOR X = 1 TO NumTab
V = DAODBGETTABINFO(DBHandle, X)
NomeTab = VECGET(V, 1)
VECFREE(V)
IF STRNEQ(LEFT(NomeTab, 4), "MSys")
CONSOLELN "Tabella: " NomeTab
CONSOLELN ""
rshandle = 0
; Stampa il contenuto di tutte le tabelle
IF ApriTabella(DBHandle, @rshandle, NomeTab)
StampaRecord(rshandle)
DAORSCLOSE(rshandle)
DAORSFREE(rshandle)
FI
FI
NEXT
DAODBCLOSE(DBHandle)
DAODBFREE(DBHandle)
ABORT 0
FUNCTION ApriDB(dbhandle, s)
; Alloca il database e prova ad aprirlo; memorizza in dbhandle il relativo handle
dbhandle = DAODBNEW()
res = DAODBOPEN(dbhandle, s, 0, 0, "")
IF EQ(res, -1)
; Errore
StampaErrori(dbhandle)
ABORT 1
FI
RETURN
FUNCTION ApriTabella(dbhandle, rshandle, t)
; Apre la tabella t del database; memorizza in rshandle il relativo handle
rshandle = DAORSNEW(dbhandle)
res = DAORSOPEN(rshandle, _DAOCOpenTable, t, 0)
IF EQ(res, -1)
; Errore
StampaErrori(dbhandle)
RETURN 0
FI
RETURN 1
FUNCTION StampaRecord(rshandle)
; Carica i nomi dei campi in un vettore
ncampi = DAORSGETFIELDCOUNT(rshandle)
nomicampi = VECNEW(ncampi)
FOR x = 1 TO ncampi
v = DAORSGETFIELDINFO(rshandle, x)
VECSET(nomicampi, x, VECGET(v, 1))
VECFREE(v)
NEXT
; Se ci sono dei record...
IF NOT(AND(DAORSATTRIB(rshandle, _DAORSATTISBOF), DAORSATTRIB(rshandle, _DAORSATTISEOF)))
; ...per ogni record stampa il contenuto di tutti i campi
DAORSMOVEFIRST(rshandle)
WHILE NOT(DAORSATTRIB(rshandle, _DAORSATTISEOF))
FOR x = 1 TO ncampi
CONSOLELN " Campo: " PADR(VECGET(nomicampi, x), 20, " ") " Valore: " DAORSGETFIELDVAL(rshandle, x)
NEXT
CONSOLELN ""
DAORSMOVENEXT(rshandle)
LOOP
FI
VECFREE(nomicampi)
RETURN
FUNCTION StampaErrori(dbhandle)
; Stampa tutti gli errori DAO avvenuti in seguito all'ultima operazione
numerr = DAOERRCOUNT(dbhandle)
FOR x = 1 TO numerr
CONSOLELN "Errore " x ":"
CONSOLELN " Codice : " DAOGETERRORNUM(dbhandle, x)
CONSOLELN " Descrizione: " DAOGETERRORDESC(dbhandle, x)
CONSOLELN " Sorgente : " DAOGETERRORSRC(dbhandle, x)
CONSOLELN ""
NEXT
RETURN