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 ReadRecord (int handle, int NumValues, FIELD_VALUE_t *FieldValue)
 Legge i valori dei campi del record corrente da un database file aperto.
int EditRecord (int handle, int NumValues, FIELD_VALUE_t *FieldValue)
 Modifica i valori dei campi del record corrente in un database file aperto.
int LocateRecord (int handle, int NumValues, FIELD_VALUE_t *FieldValue, int How)
 Trova un record con valori dati in un database file aperto.

Function Documentation

int EditRecord int  handle,
int  NumValues,
FIELD_VALUE_t FieldValue
 

Modifica i valori dei campi del record corrente in un database file aperto.

Modifica i valori di alcuni campi sul record corrente nel database file.
handle deve essere un handle valido ricavato da una precedente chiamata alla OpenDatabaseFile().
NumValues e' il numero di elementi del vettore FieldValue, cioe' il numero dei campi che devono essere modificati. Deve essere > 0 e <= Numero dei campi del database file.
FieldValue e' il vettore che contiene i nomi e i valori dei campi da modificare. I valori sono nel campo value corrispondente ad ogni nome. L'ordine dei campi in questo vettore puo' essere diverso dall'ordine dei campi del Database File.

A seconda del tipo campo, i valori ammessi sono:

  • CHARACTER
    • una stringa di caratteri ascii anche non stampabili (0<= c <= 127)
  • NUMERIC
    • un valore double valido
  • DATE
    • un valore numerico che rappresenta una data in formato Julian
  • LOGICAL
    • un singolo carattere. Se il valore e' 0 viene memorizzato il valore binario FALSE, altrimenti TRUE

In tutti i casi vengono memorizzati tutti i caratteri fino alla lunghezza dichiarata per il campo, quindi value deve essere allocato adeguatamente. Se un campo non viene specificato in FieldValue (come nome), il suo valore non viene modificato.

Il record corrente viene incrementato di 1 e viene aggiornato il timestamp. Se non ci sono record oppure non c'è record corrente (fine file) viene ritornato LPC_ERR_EOF.

Parameters:
[in] handle L'handle del database aperto
[in] NumValues Numero di elementi del vettore FieldValue
[in] FieldValue Vettore di strutture con i nomi e i valori dei campi
Returns:
LPC_OK Record inserito

LPC_BAD_ARG handle non valido o NumValues non valido o puntatore FieldValue NULL o value NULL

LPC_BAD_FIELD Nome di campo non valido nella struttura FieldValue

LPC_ERR_WRITE errore in scrittura

LPC_NO_MEMORY errore in allocazione memoria

LPC_ERR_READ errore in lettura dal file

LPC_ERR_SEEK errore in spostamento su file

LPC_ERR_EOF errore nessun record o fine file

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

Stefano Guerrini

Andrea Sterbini

Date:
Gennaio 2006
Version:
1.0

int LocateRecord int  handle,
int  NumValues,
FIELD_VALUE_t FieldValue,
int  How
 

Trova un record con valori dati in un database file aperto.

Cerca il primo record che abbia dei valori in determinati campi.
handle deve essere un handle valido ricavato da una precedente chiamata alla OpenDatabaseFile().
NumValues e' il numero di elementi del vettore FieldValue, cioe' il numero dei campi che contengono i valori da cercare. Deve essere > 0 e <= Numero dei campi del DBF
FieldValue e' il vettore che contiene i nomi e i valori dei campi da trovare. L'ordine dei campi in questo vettore puo' essere diverso da quello dei campi nel Database File.
How puo' valere:

  • TOP: la ricerca inizia dal primo record del file e termina se trova un record con i valori indicati oppure a fine file
  • CURRENT: la ricerca inizia dal record corrente e termina se trova un record con i valori indicati oppure a fine file
  • WRAP: la ricerca inizia dal record corrente e termina se trova un record con i valori indicati oppure reinizia dal primo record fino al record corrente (escluso)

La funzione ritorna il numero del record corrente se trova un record con quei valori, altrimenti LPC_NOT_FOUND senza generare errore.

Se il record viene trovato, diventa il nuovo record corrente, altrimenti il record corrente non viene modificato, cioè viene ripristinata la posizione iniziale. Se nel file non ci sono record viene ritornato sempre LPC_NOT_FOUND senza errore.

Parameters:
[in] handle L'handle del database aperto
[in] NumValues Numero di elementi del vettore FieldValue. Deve essere > 0 e <= Numero dei campi.
[in] FieldValue Nomi e valori da ricercare
[in] How Modalita' di ricerca: TOP, CURRENT o WRAP
Returns:
> 0 Numero del nuovo record corrente

LPC_NOT_FOUND Record non trovato

LPC_BAD_ARG handle non valido o NumValues non valido o puntatore FieldValue NULL o value NULL

LPC_BAD_FIELD Nome di campo non valido nella struttura FieldValue

LPC_NO_MEMORY errore in allocazione memoria

LPC_ERR_READ errore in lettura dal file

LPC_ERR_SEEK errore in spostamento su file

See also:
OpenDatabaseFile(), EditRecord(), ReadRecord().
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(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);
                }
        ....
        }

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

int ReadRecord int  handle,
int  NumValues,
FIELD_VALUE_t FieldValue
 

Legge i valori dei campi del record corrente da un database file aperto.

Legge i valori di alcuni campi dal record corrente nel database file.
handle deve essere un handle valido ricavato da una precedente chiamata alla OpenDatabaseFile().
NumValues e' il numero di elementi del vettore FieldValue, cioe' il numero campi che devono essere letti. Se e' 0 devono essere letti tutti valori dei campi del record: in questo caso vengono memorizzati in FieldValue anche i nomi dei campi corrispondenti.
FieldValue e' il vettore che contiene i nomi dei campi da leggere. I valori vengono caricati nel campo value corrispondenti ad ogni nome. L'ordine dei campi in questo vettore puo' essere diverso da quello dei campi nel Database File.

E' responsabilità del chiamante di allocare/deallocare FieldValue per il numero di elementi necessari e il rispettivo campo value per contenere i valori da leggere.
Per ogni campo indicato in FieldValue viene copiato in value il valore del campo letto; se NumValues e' 0, vengono copiati anche i nomi dei campi. In questo caso il campo Name viene sovrascritto
In \ value vengono copiati tanti caratteri quanto e' la lunghezza del campo, quindi ad. es. per un campo CHARACTER di lunghezza 10 verranno letti sempre 10 caratteri.
Per un campo LOGICAL viene memorizzato un solo carattere che vale TRUE o FALSE.

Il record corrente viene incrementato di 1; non viene modificata la data di ultima modifica del file. Se non ci sono record oppure non c'è record corrente (fine file) viene ritornato LPC_ERR_EOF.

Parameters:
[in] handle L'handle del database aperto
[in] NumValues Numero di elementi del vettore FieldValue oppure 0
[in,out] FieldValue Vettore di strutture con i nomi dei campi da leggere. Se NumValues e' 0 i nomi non sono necessari e vengono ignorati.
Returns:
LPC_OK Letti i valori dei campi richiesti

LPC_BAD_ARG handle non valido o NumValues non valido o puntatore FieldValue NULL o value NULL

LPC_BAD_FIELD Nome campo non valido nella struttura FieldValue

LPC_NO_MEMORY errore in allocazione memoria

LPC_ERR_READ errore in lettura dal file

LPC_ERR_SEEK errore in spostamento su file

LPC_ERR_EOF nessun record oppure fine file

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

Stefano Guerrini

Andrea Sterbini

Date:
Gennaio 2006
Version:
1.0


Generated on Tue May 23 15:52:18 2006 for LPC - Modulo 4 by  doxygen 1.4.6-NO