Specifiche comuni a tutti i Moduli


Modules

 Costanti
 Strutture
 Funzioni comuni

Functions

void LPC_GestioneErrore (int ErrorCode, char *Func, char *Msg)
 Stampa l'errore.
int InsertBlankRecord (int handle, int Where)
 Inserisce un record vuoto in un database file aperto.
int DeleteRecord (int handle)
 Cancella un record in un database file aperto.
int GotoRecord (int handle, int Mode, long NumRec)
 Si sposta sui record di un database file aperto.

Function Documentation

int DeleteRecord int  handle  ) 
 

Cancella un record in un database file aperto.

Cancella il record corrente nel file. handle deve essere un handle valido ricavato da una precedente chiamata alla OpenDatabaseFile().
Il record viene cancellato fisicamente e il numero del record corrente non cambia.
Se il puntatore del record corrente è settato a fine file, viene ritornato l'errore LPC_ERR_EOF.
Se viene cancellato l'ultimo record, il puntatore rimane a fine file.

La data di ultima modifica del file viene settata alla data corrente, e il numero dei records viene decrementato di 1.

Parameters:
[in] handle L'handle del database aperto
Returns:
LPC_OK Record cancellato

LPC_BAD_ARG handle non valido

LPC_ERR_WRITE errore in scrittura

LPC_ERR_READ errore in lettura

LPC_ERR_SEEK errore in posizionamento

LPC_NO_MEMORY errore in allocazione memoria

LPC_ERR_EOF già a fine file, nessun record corrente

See also:
OpenDatabaseFile(), InsertBlankRecord().
Author:
Gianni Campanile

Stefano Guerrini

Andrea Sterbini

Date:
Gennaio 2006
Version:
1.0

int GotoRecord int  handle,
int  Mode,
long  Num
 

Si sposta sui record di un database file aperto.

Effettua uno spostamento di un certo numero di record su un database file aperto.
handle deve essere un handle valido ricavato da una precedente chiamata alla OpenDatabaseFile().

Il parametro Mode indica la modalità di spostamento e può valere:

  • ABSOLUTE
    • lo spostamento è assoluto. Se Num e' <= 1 si viene posizionati al primo record, se Num è > del numero dei records si viene posizionati a fine file, il record corrente vale NumRecs+1 e viene ritornato LPC_ERR_EOF.
  • RELATIVE
    • lo spostamento è relativo al record corrente. In questo caso Num viene sommato al numero del record corrente e se il risultato è:
      • <=0 Si torna al primo record e il record corrente vale 1.
      • > 0 e <= NumRecs Ci si sposta al record risultato
      • > NumRecs Si è posizionati a fine file, il record corrente vale NumRecs+1 e viene ritornato LPC_ERR_EOF

La funzione ritorna il numero del nuovo record corrente o LPC_ERR_EOF.

Parameters:
[in] handle L'handle del database aperto
[in] Mode Modalità di spostamento: ABSOLUTE o RELATIVE
[in] Num Numero dei record di cui spostarsi. Valore positivo o negativo o nullo.
Returns:
> 0 Numero del nuovo record corrente

LPC_BAD_ARG handle non valido oppure Mode non valido

LPC_ERR_SEEK Errore di spostamento su file

LPC_ERR_READ errore in lettura

LPC_ERR_EOF fine file, record corrente = NumRecs+1

See also:
OpenDatabaseFile(), InsertBlankRecord(), DeleteRecord()
Author:
Gianni Campanile

Stefano Guerrini

Andrea Sterbini

Date:
Gennaio 2006
Version:
1.0

int InsertBlankRecord int  handle,
int  Where
 

Inserisce un record vuoto in un database file aperto.

Inserisce un record vuoto in un DBF. Un record vuoto e' composto di tutti NULL.

handle deve essere un handle valido ricavato da una precedente chiamata alla OpenDatabaseFile().
A seconda del valore del parametro Where, il record viene inserito in posizioni diverse e precisamente:

  • TOP
    • All'inizio del file. Il record inserito diventa il primo record del file;
  • BOTTOM
    • Alla fine del file. Il record inserito diventa l'ultimo record del file;
  • CURRENT
    • Alla posizione corrente.

In tutti i casi, il record corrente diventa il nuovo record inserito.

La data di ultima modifica del file viene settata alla data corrente, e il numero dei records viene incrementato di 1.

Parameters:
[in] handle L'handle del database aperto
[in] Where Costante per il punto di inserimento: TOP, BOTTOM, CURRENT
Returns:
LPC_OK Record inserito

LPC_BAD_ARG handle non valido o Where non valido

LPC_ERR_WRITE errore in scrittura

LPC_ERR_READ errore in lettura

LPC_ERR_SEEK errore in posizionamento

LPC_NO_MEMORY errore in allocazione memoria

See also:
GetDBFInfo(), OpenDatabaseFile(), DeleteRecord(), EditRecord().
Author:
Gianni Campanile

Stefano Guerrini

Andrea Sterbini

Date:
Gennaio 2006
Version:
1.0

void LPC_GestioneErrore int  ErrorCode,
char *  Func,
char *  Msg
 

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.
Il messaggio di errore e' una stringa che puo' contenere le informazioni aggiuntive per il miglior monitoraggio dell'errore.

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(int32_t));
                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);
                }
        ....
        }

Parameters:
[in] ErrorCode Codice dell'errore
[in] Func Funzione da cui viene la chiamata
[in] Msg Messaggio di errore
Author:
Gianni Campanile

Stefano Guerrini

Andrea Sterbini

Date:
Gennaio 2006
Version:
1.0


Generated on Wed Apr 26 18:51:31 2006 for LPC - Modulo 3 by  doxygen 1.4.6-NO