Présentation
Documentation
L'équipe
Sérialisation
 
Programmes
Objets
Libs Utilitaires
Libs Internes
   
 
Editeur
Syntaxes
Windows
Versions
   

SCR/AL1 - TOME IV. Les librairies internes

3. La librairie scr4i

3.1 Gestion des bases de données

3.1.4 IS_set_name (file s_isam.c:947)

Syntax

IS_set_name(is, name)
ISAM *is;
char *name;

Description

Change le nom du fichier physique associé à un objet ISAM. Le pointeur vers le nom remplace celui actuellement présent dans la structure ISAM. Ce pointeur n'est pas alloué et doit donc être soit statique, soit rester actif tant que le fichier peut être utilisé.

Exemple

    IS_set_name(is_res, "jun91");
if(IS_open_files(is_res, 0L)) return(-1);

File s_isam.c

IS_check_isref(is, fld_nb, type)
IS_check_isrels_rewrite_1(ISAM *is, int cmp_nb)
IS_close(is)
IS_close_all()
IS_close_all_isam()
IS_close_isam(is)
IS_debug_reread(is)
IS_delete(is)
IS_delete_imm(is)
ISAM *IS_dup(is, filename)
char *IS_error()
IS_free_dup(is)
IS_get_field_txt(is, fld, txt)
IS_get_read_field_txt(is, fld, txt)
*/ IS_is_mod_field(is, fld_nb)
IS_next(is)
IS_open(is, mode, lock)
IS_prev(is)
IS_resync(is)
IS_resync_all()
IS_rewrite(is)
IS_rewrite_imm(is)
IS_rewrite_noact
IS_search(is, nu_index, cond, order)
IS_set_db_type(char *dbstring, int type)
IS_set_db_type_1(ISAM *is, char *dbstring, int type)
IS_set_name(is, name)
IS_write(is)
if(type != 0)
if(IS_FOREIGN == 0)

IS_check_isref (file s_isam.c:1669)

Syntax

IS_check_isref(is, fld_nb, type)
ISAM *is;
int fld_nb;
int type; /* 0: IS_write, 1: IS_rewrite */

Description

IS_check_isrels_rewrite_1 (file s_isam.c:1752)

Syntax

IS_check_isrels_rewrite_1(ISAM *is, int cmp_nb)

IS_close (file s_isam.c:121)

Syntax

IS_close(is)
ISAM *is;

Description

Ferme l'ISAM is.

La fonction peut être appelée un nombre quelconque de fois : un compteur du nombre d'ouvertures est tenu à jour dans la structure ISAM de telle sorte qu'à chaque IS_open(), ce compteur soit incrémenté, et qu'à chaque IS_close(), il soit décrémenté. Lorsque le compteur vaut 1, IS_close() ferme réellement le fichier. Les autres fois, IS_close() décrémente le compteur.

De cette façon, toute fonction peut en toute quiétude ouvrir un ISAM au début et le fermer à la fin, sans avoir d'effet sur les autres ouvertures préalables.

Exemple

    if(IS_open(is_clients, SCR_UPDATE, SCR_NO_LOCK))
return(-1);
...
IS_close(is_clients);

Voir également

IS_close_files(), IS_open()

IS_close_all (file s_isam.c:195)

Syntax

IS_close_all()

Description

Ferme tous les ISAMS objets de SCR (pas ceux créés par IS_dup()!) qui sont actuellement ouverts par un appel à IS_close_isam().

Déconnecte également le programme du serveur (IS_end_database()) dans le cas d'un système client/serveur (y compris ODBC). La fonction IS_close_all_isam() ne déconnecte pas de la database.

Cette fonction est utilisée lorsqu'un programme doit être quitté. SCR_end() utilise cette fonction.

Valeur retournée

Retourne le nombre d'ISAM fermés.

Voir également

IS_close(), IS_close_isam(), IS_close_all_isam()

IS_close_all_isam (file s_isam.c:164)

Syntax

IS_close_all_isam()

Description

Ferme tous les ISAMS objets de SCR (pas ceux créés par IS_dup()!) qui sont actuellement ouverts par un appel à IS_close_isam().

Contrairement à IS_close_all(), ne déconnecte pas le programme du serveur (IS_end_database()) dans le cas d'un système client/serveur (y compris ODBC).

Valeur retournée

Retourne le nombre d'ISAM fermés.

Voir également

IS_close(), IS_close_isam(), IS_close_all()

IS_close_isam (file s_isam.c:143)

Syntax

IS_close_isam(is)
ISAM *is;

Description

Ferme l'ISAM is physiquement. Le compteur de nombre d'ouvertures est remis à 0.

Exemple

    if(IS_open(is_clients, SCR_UPDATE, SCR_NO_LOCK))
return(-1);
...
IS_close_isam(is_clients);

Voir également

IS_close_files(), IS_close()

IS_debug_reread (file s_isam.c:1586)

Syntax

IS_debug_reread(is)
ISAM *is;

Description

IS_delete (file s_isam.c:719)

Syntax

IS_delete(is)
ISAM *is ;

Description

Détruit le record courant de l'ISAM is.

Avant de détruire le record, les opérations suivantes ont lieu :

En cas d'erreur dans une de ces opérations, la fonction s'arrète et retourne -1.

Remarque

Le pointeur de l'ISAM (dépendant de la dernière recherche par IS_search() ou IS_next()) n'est pas modifié par la destruction du record : il se place sur le record suivant.

Valeur retournée

0 en cas de succès, -1 sinon.

Voir également

IS_rewrite(), IS_delete()

IS_delete_imm (file s_isam.c:1501)

Syntax

IS_delete_imm(is)
ISAM *is;

Description

Identique à la fonction IS_delete(), mais sans vérifier que le record n'a pas été modifié depuis sa lecture.

Cette fonction est à utiliser lorsque le record lu est directement détruit. Le risque de modification ou de suppression par un autre process du record lu est alors minime, voire inexistant.

Voir également

IS_delete_imm(), IS_NO_REREAD

IS_error (file s_isam.c:977)

Syntax

char *IS_error()

Description

Retourne un message d'erreur correspondant à la dernière erreur rencontrée dans l'utilisation d'une base de données. Le message est extrait du fichier scr_err.txt.

Le message est composé de deux parties : le nom du fichier et l'erreur rencontrée. Comme un fichier autre que celui concerné par l'erreur peut être utilisé après l'arrivée de l'erreur, le nom du fichier peut dans certains cas (rares) ne pas être celui concerné.

Valeur retournée

pointeur vers une variable statique contenant le dernier message d'erreur.

Exemple

    if(IS_write(is_client)) {
PG_display_error(IS_error());
return(-1);
}

IS_get_field_txt (file s_isam.c:1064)

Syntax

IS_get_field_txt(is, fld, txt)
ISAM *is;
int fld;
char *txt;

Description

IS_get_read_field_txt (file s_isam.c:1119)

Syntax

IS_get_read_field_txt(is, fld, txt)
ISAM *is;
int fld;
char *txt;

Description

IS_is_mod_field (file s_isam.c:792)

Syntax

*/
IS_is_mod_field(is, fld_nb)
ISAM *is;
int fld_nb;

IS_next (file s_isam.c:319)

Syntax

IS_next(is)
ISAM *is ;

Description

Poursuit une recherche dans l'ISAM is. La recherche fournit la suite de celle entamée par dernier IS_search(). Elle a lieu suivant le même index, avec la même condition de recherche.

Si la recherche aboutit, le record est placé dans l'ISAM et le pointeur de l'ISAM est placé à cette position de l'ISAM pour les recherches ultérieures (IS_next(), IS_prev()) et pour les rewrites (IS_rewrite()).

La READ_FN de l'ISAM est exécutée après lecture du record.

Valeur retournée

0 si un record est trouvé et que la READ_FN de l'ISAM retourne 0, -1 sinon.

Exemple

    PrintClientsCommune(commune)
char *commune;
{
char name[51];

if(IS_open_files(is_client, 0L) return(-1);
IS_set_field(is_client, 3, commune);
if(IS_search(is_client, 1, SCR_EQ, (char *)0) != 0) {
IS_close(is_client);
return(-1);
}
printf("Clients habitant %s\n\n", commune);

while(1) {
IS_get_field(is_client, 0, name);
printf("%s\n", name);
if(IS_next(is_client)) break;
}

IS_close(is_client);
return(0);
}

Voir également

IS_search(), IS_prev()

IS_open (file s_isam.c:52)

Syntax

IS_open(is, mode, lock)
ISAM *is ;
int mode ;
int lock ;

Description

Ouvre l'ISAM is. Le mode d'ouverture (mode) est SCR_READ pour une lecture sans écriture, SCR_UPDATE ou SCR_WRITE pour des opérations READ/WRITE.

Le paramètre lock est SCR_LOCK pour bloquer le fichier pour un usage exclusif ou SCR_NO_LOCK pour une usage partagé.

La fonction peut être appelée un nombre quelconque de fois : à part le première fois, où une ouverture est réellement effectuée, un compteur du nombre d'ouvertures est tenu à jour dans la structure ISAM. A chaque IS_open(), ce compteur est incrémenté, à chaque IS_close(), il est décrémenté. Lorsque le compteur vaut 1, IS_close() ferme réellement le fichier.

De cette façon, toute fonction peut en toute quiétude ouvrir un ISAM au début et le fermer à la fin, sans avoir d'effet sur les autres ouvertures préalables.

Valeur retournée

0 en cas de succès, -1 sinon.

Exemple

    if(IS_open(is_clients, SCR_UPDATE, SCR_NO_LOCK))
return(-1);
...
IS_close(is_clients);

Voir également

IS_open_files(), IS_close()

IS_prev (file s_isam.c:388)

Syntax

IS_prev(is)
ISAM *is ;

Description

Poursuit une recherche dans l'ISAM is. La recherche fournit le précédent record dans l'ordre de la recherche entamée par dernier IS_search(). Elle a lieu suivant le même index, avec la même condition de recherche.

Si la recherche aboutit, le record est placé dans l'ISAM et le pointeur de l'ISAM est placé à cette position de l'ISAM pour les recherches ultérieures (IS_next(), IS_prev()) et pour les rewrites (IS_rewrite()).

La READ_FN de l'ISAM est exécutée après lecture du record.

Valeur retournée

0 si un record est trouvé et que la READ_FN de l'ISAM retourne 0, -1 sinon.

Exemple

    PrintClientsCommandes(commande)
long commande;
{
char name[51];

if(IS_open_files(is_client, 0L) return(-1);
IS_set_field(is_client, 4, &commande);
if(IS_search(is_client, 2, SCR_LE, (char *)0) != 0) {
IS_close(is_client);
return(-1);
}
printf("Commandes <= %ld FB\n\n", commande);

while(1) {
IS_get_field(is_client, 0, name);
printf("%s\n", name);
if(IS_prev(is_client)) break;
}

IS_close(is_client);
return(0);
}

Voir également

IS_search(), IS_prev()

IS_resync (file s_isam.c:1520)

Syntax

IS_resync(is)
ISAM *is;

Description

Resynchronise les enregistrements bufferisés dans l'ISAM is. Tous les références aux records mémorisés dans l'ISAM sont supprimés par cette fonction.

Voir également

IS_resync_all()

IS_resync_all (file s_isam.c:1537)

Syntax

IS_resync_all()

Description

Resynchronise les enregistrements bufferisés dans tous les ISAM définis.

Voir également

IS_resync()

IS_rewrite (file s_isam.c:594)

Syntax

IS_rewrite(is)
ISAM *is ;

Description

Remplace le record courant de l'ISAM is. La valeur du record doit être fixée à l'aide des fonctions IS_set_field(), SCR_set_*(), etc.

Avant d'écrire le record, les opérations suivantes ont lieu :

En cas d'erreur dans une de ces opérations, la fonction s'arrète et retourne -1.

Remarque

Le pointeur de l'ISAM (dépendant de la dernière recherche par IS_search() ou IS_next()) n'est pas modifié par l'écriture du nouveau record.

Valeur retournée

0 en cas de succès, -1 sinon.

Exemple

    AddCommande(client, montant)
char *client;
long montant;
{
if(IS_open_files(is_client, 0L) return(-1);
SCR_set_text(is_client_name, client);
if(IS_search(is_client, 0, SCR_EQ, (char *)0) != 0) {
IS_close(is_client);
return(-1);
}
is_client_MONTANT += montant;
if(IS_rewrite(is_client)) {
PG_display_error("%s : %s", name, IS_error_text());
IS_close(is_client);
return(-1);
}
IS_close(is_client);
return(0);
}

Voir également

IS_rewrite(), IS_delete()

IS_rewrite_imm (file s_isam.c:1479)

Syntax

IS_rewrite_imm(is)
ISAM *is;

Description

Identique à la fonction IS_rewrite(), mais sans vérifier que le record n'a pas été modifié depuis sa lecture.

Cette fonction est à utiliser lors de longs scan de fichiers au cours desquels le record lu est modifié. La relecture ne se justifie pas en général dans ce cas car les fonctions IS_next() et IS_rewrite() se suivent immédiatement et que le risque de modification par un autre process du record lu est minime, voire inexistant.

Voir également

IS_delete_imm(), IS_NO_REREAD

IS_rewrite_noact (file s_isam.c:773)

Syntax

// Idem que IS_delete mais n'exécute pas la delete_act

IS_delete_noact(ISAM *is)
{
int act, rc;

act = is->is_delete_act;
is->is_delete_act = 0;
rc = IS_delete(is);
is->is_delete_act = act;

return(rc);
}

/* BP_M 25-05-2013 14:04 */
// Idem que IS_rewrite mais n'exécute pas la rewrite_act

IS_rewrite_noact(ISAM *is)

Description

IS_search (file s_isam.c:1255)

Syntax

IS_search(is, nu_index, cond, order)
ISAM *is;
int nu_index;
int cond;
char *order;

Description

Entame une recherche dans l'ISAM is. nu_index est le numéro de l'index de recherche, cond est la condition de recherche et order l'ordre de lecture (order n'est pas implémenté avec CTREE).

Si nu_index est négatif, la recherche a lieu dans l'ordre physique de la database.

La recherche commence en fonction de la valeur des champs de l'index de recherche placés dans le record de l'ISAM. Ces valeurs peuvent être fixées par les fonctions IS_set_field(), SCR_set_*(), etc.

cond peut prendre les valeurs suivantes :

Si la recherche aboutit, le record est placé dans l'ISAM et le pointeur de l'ISAM est placé à cette position de l'ISAM pour les recherches ultérieures (IS_next(), IS_prev()) et pour les rewrites (IS_rewrite()).

La READ_FN de l'ISAM est exécutée après lecture du record. Si cette fonction retourne -1, la lecture est considérée comme erronée. Si elle retourne 1, le record suivant est lu jusqu'à ce que leľa READ_FN retourne 0 ou -1. Si elle retourne 0, la lecture est correcte.

Valeur retournée

0 si un record est trouvé et que la READ_FN de l'ISAM retourne 0, -1 sinon.

Exemple

    PrintClientsCommune(commune)
char *commune;
{
char name[51];

if(IS_open_files(is_client, 0L) return(-1);
IS_set_field(is_client, 3, commune);
if(IS_search(is_client, 1, SCR_EQ, (char *)0) != 0) {
IS_close(is_client);
return(-1);
}
printf("Clients habitant %s\n\n", commune);

while(1) {
IS_get_field(is_client, 0, name);
printf("%s\n", name);
if(IS_next(is_client)) break;
}

IS_close(is_client);
return(0);
}

Voir également

IS_next(), IS_prev()

IS_set_db_type (file s_isam.c:1866)

Syntax

IS_set_db_type(char *dbstring, int type)

IS_set_db_type_1 (file s_isam.c:1883)

Syntax

IS_set_db_type_1(ISAM *is, char *dbstring, int type)

IS_write (file s_isam.c:485)

Syntax

IS_write(is)
ISAM *is ;

Description

Ecrit un nouveau record dans l'ISAM is. La valeur du record doit être fixée à l'aide des fonctions IS_set_field(), SCR_set_*(), etc.

Avant d'écrire le record, les opérations suivantes ont lieu :

En cas d'erreur dans une de ces opérations, la fonction s'arrète et retourne -1.

Remarque

Le pointeur de l'ISAM (dépendant de la dernière recherche par IS_search() ou IS_next()) n'est pas modifié par l'écriture du nouveau record.

Valeur retournée

0 en cas de succès, -1 sinon.

Exemple

    IS_set_field(is_client, 0, name);
if(IS_write(is_client)) {
PG_display_error("%s : %s", name, IS_error_text());
return(-1);
}

Voir également

IS_rewrite(), IS_delete()

if (file s_isam.c:1651)

Syntax

if(type != 0)

Description

Copyright © 1998-2015 Jean-Marc Paul and Bernard PAUL - Envoyez vos remarques ou commentaires à bernard@xon.be