1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82
| int i, j, k, CountTable, NbChamps, Sauvegarde_NbTables;
char Requete[2000], Sauvegarde_Tables[200][50];
char Champs[100][256], NomChamp[256], Colonnes[100][256];
EXEC SQL WHENEVER SQLERROR DO Erreur("Sauvegarde_Lire_Tables()","Echec de la lecture des tables a copier ...");
EXEC SQL DECLARE S01 CURSOR FOR
SELECT DISTINCT(NOMTABLE) FROM SAUVEGARDE_CATEGORIE_TABLE WHERE IDCATEGORIE=:Categorie ORDER BY NOMTABLE;
EXEC SQL OPEN S01;
Sauvegarde_NbTables=0;
while(sqlca.sqlcode==0)
{
EXEC SQL FETCH S01 INTO :Sauvegarde_Tables[Sauvegarde_NbTables];
if (sqlca.sqlcode==0)
{
Trim2(Sauvegarde_Tables[Sauvegarde_NbTables]);
Sauvegarde_NbTables++;
}
}
EXEC SQL CLOSE S01;
for(i=0; i<Sauvegarde_NbTables; i++)
{
printf("Sauvegarde_Lire_Donnees_Communes() -> Traitement
Table 's' ...\n", Sauvegarde_Tables[i]);
// Verification que la table existe
CountTable=0;
EXEC SQL SELECT COUNT(*) INTO :CountTable FROM USER_TABLES
WHERE TABLE_NAME=:Sauvegarde_Tables[i];
if (CountTable >0)
{
// Recuperation des Noms de colonnes de la table
printf("Sauvegarde_Lire_Donnees_Communes() -> Lecture des colonnes
de la table '%s'...\n", Sauvegarde_Tables[i]);
sprintf(Requete, "SELECT DISTINCT(COLUMN_NAME) FROM
USER_TAB_COLUMNS WHERE TABLE_NAME='%s' ORDER BY
COLUMN_NAME", Sauvegarde_Tables[i]);
NbChamps=0;
EXEC SQL PREPARE Req FROM :Requete;
EXEC SQL DECLARE S03 CURSOR FOR Req;
EXEC SQL OPEN S03;
while(sqlca.sqlcode==0)
{
EXEC SQL FETCH S03 INTO :NomChamp;
if (sqlca.sqlcode==0)
{
sprintf(Champs[NbChamps], "%s", Trim(NomChamp));
printf ("Sauvegarde_Lire_Donnees_Communes() -> Champ trouve
'%s'\n", Trim(Champs[NbChamps]));
NbChamps++;
}
}
EXEC SQL CLOSE S03;
// Recuperation des valeurs des enregistrements de la table
EXEC SQL ARRAYLEN Colonnes (NbChamps) EXECUTE;
sprintf(Requete, "SELECT * FROM %s", Sauvegarde_Tables[i]);
EXEC SQL PREPARE Req FROM :Requete;
EXEC SQL DECLARE S04 CURSOR FOR Req;
EXEC SQL OPEN S04;
k=0;
while(sqlca.sqlcode==0)
{
EXEC SQL FETCH S04 INTO :Colonnes;
if (sqlca.sqlcode==0)
{
printf ("\n\nLigne N° : %d\n", k);
k++;
for (j=0; j<NbChamps; j++)
{
sprintf(ValeurChamp, "%s", Trim(Colonnes[j]));
printf ("Colonnes[%d]='%s' ", j, ValeurChamp);
}
}
}
EXEC SQL CLOSE S04;
}
} |
Partager