Modules | |
Costanti | |
Strutture | |
Funzioni comuni | |
Functions | |
void | LPC_GestioneErrore (int ErrorCode, char *Func, char *Msg) |
Stampa l'errore. | |
int | OpenDatabaseFile (char *Name) |
Apre un file di database con nome Name. | |
int | CloseDatabaseFile (int handle) |
Chiude un file di database aperto. | |
int | GetDBFInfo (int handle, DBF_INFO_t *DBFInfo) |
Chiede informazioni su un file di database aperto. | |
int | GetFieldInfo (int handle, int NumFields, FIELD_DATA_t *FieldData) |
Chiede informazioni sui campi di un database aperto. | |
int | IsDBFHandle (int handle) |
Verifica se un handle e' valido. |
|
Chiude un file di database aperto.
handle deve essere un handle valido ricavato da una precedente chiamata alla OpenDatabaseFile(). Il file DBF viene chiuso e viene cancellato il file che indica un database aperto, cioè il file che ha lo stesso nome del DBF ma estensione ma estensione
|
|
Chiede informazioni su un file di database aperto. handle deve essere un handle valido ricavato da una precedente chiamata alla OpenDatabaseFile(). Riempie la struttura DBFInfo di tipo DBF_INFO_t con tutte le informazioni del DBF. In particolare il record corrente (campo CurrentRec) e' sempre > 0, anche se non ci sono record (in quel caso vale 1). Indica infatti il punto di inizio di lettura del prossimo record. Per sapere se ci sono record, bisogna leggere il campo NumRecs.
|
|
Chiede informazioni sui campi di un database aperto.
handle deve essere un handle valido ricavato da una precedente chiamata alla OpenDatabaseFile(). Riempie il vettore di strutture FieldData con le informazioni sui campi di un database precedentemente aperto con OpenDatabaseFile().
|
|
Verifica se un handle e' valido. Ritorna LPC_OK se l'handle e' valido altrimenti LPC_BAD_ARG
|
|
Stampa l'errore. Scrive un codice di errore, la funzione chiamante e un messaggio di errore. L'errore viene stampato su stderr. Il parametro ErrorCode è il codice di errore. Func e' il nome della funzione che sta intercettando l'errore e Msg e' il messaggio di errore.
Da notare che Func non è il nome della funzione che ha generato un errore, ma il nome della funzione che lo ha ricevuto. I codici di errore delle funzioni da implementare sono già definiti in LPC_Include.h Tutti i codice di errore sono negativi. Esempio di gestione dell'errore: int Insert() { .... if (NumFields < 0) { char Err[256]; (void) sprintf(Err, "Errore parametro NumFields negativo"); LPC_GestioneErrore(LPC_BAD_ARG, "Insert", Err); < Liberare tutta la memoria allocata in questa funzione > return(LPC_BAD_ARG); } .... } Esempio di gestione dell'errore su allocazione memoria: int Insert() { .... buf = calloc(10, sizeof(long)); if (!buf) { char Err[256]; (void) sprintf(Err, "Errore allocazione memoria"); LPC_GestioneErrore(LPC_NO_MEMORY, "Insert", Err); < Liberare tutta la memoria allocata in questa funzione > return(LPC_NO_MEMORY); } .... } Esempio di gestione dell'errore ritornato da una chiamata ad una funzione di sistema: int Insert() { .... ret = fwrite(buffer, sizeof(char), len, fp); if (ret != len) { char Err[256]; (void) sprintf(Err, "Errore di sistema [%d] in scrittura su file:[%s]", errno, strerror(errno)); LPC_GestioneErrore(LPC_ERR_WRITE, "Insert", Err); < Liberare tutta la memoria allocata in questa funzione > return(LPC_ERR_WRITE); } .... } Esempio di gestione errore per una chiamata ad una funzione interna: int Insert() { ... ret = GetDBFInfo(handle, &DBFInfo); if (ret != LPC_OK) { char Err[256]; (void) sprintf(Err, "Errore chiamata alla GetDBFInfo:[%d]", ret); LPC_GestioneErrore(ret, "Insert", Err); return(ret); } .... }
|
|
Apre un file di database con nome Name.
Name è una stringa non nulla e NULL terminated e rappresenta il nome del file da creare. Siccome il sistema e' single-user, non e' possibile aprire lo stesso file piu' volte. Il database file deve essere stato precedentemente creato con la CreateDatabaseFile(). La funzione ritorna un handle che deve essere utilizzato per chiamate ad altre funzioni. Una volta aperto il file può essere usato e poi chiuso con la CloseDatabaseFile(). Il record corrente viene settato a 1, anche se non ci sono record nel DBF.
|