Fonction CreerRequeteSql(NomRequeteSql : Caractere, SourceRequeteSql : Caractere, TTR : Entier=1, TTP : Entier=1, TDG : Entier=0) Retourner Nul Ou IRequeteSql;
Le nom de la requête Sql doit être unique. Il permet de tracer son exécution. Le source de la requête Sql doit respecter la syntaxe et la sémantique de la base de données cible, même pour le pilote Open DataBase Connectivity (ODBC).
Le source de l'ordre Sql peut comporter des paramètres. Ils sont identifiés par des pseudo-variables correspondant aux noms déclarés par l'appel à la méthode DeclarerParametre.
Si le paramètre TTP spécifiant la taille des tableaux pour les paramètres a pour valeur 1, alors il y a un seul cycle d'exécution au niveau de la base de données.
Sinon les paramètres sont transmis par tableau dont la taille est donnée par TTP et il y a autant de cycles d'exécution au niveau de la base de données que de lignes dans le tableau.
La gestion des tableaux est automatisée pour rendre le principe de Bulk Processing transparent.
Le source de l'ordre Sql peut comporter des résultats pour les ordres de sélection. Ils sont identifiés par des pseudo-variables correspondant aux noms déclarés par l'appel à la méthode DeclarerResultat.
Si le paramètre TTR spécifiant la taille des tableaux pour les résultats a pour valeur 1, alors les enregistrements sont produits rang après rang.
Sinon les enregistrements sont produits par tableau dont la taille est donnée par TTR.
La gestion des tableaux est automatisée pour rendre le principe d'Array Fetch Processing transparent.
Si le paramètre TDG spécifiant le temps de garde en secondes est positif, alors il existe un délai pour exécuter l'ordre Sql.
Si la taille du source de la requête Sql dépasse la taille du paramètre TailleMaxOrdreSql, alors l'exception OrdreSqlTropGrand est envoyée.
Si une méthode d'un type implémentant l'interface IRequeteSql échoue, alors l'exception ErreurOrdreSql est envoyée.
/****************************************************************/
Procedure ListerEmployes2(MonOrdreSql : Nul Ou IOrdreSql, NumeroDepartement : Entier)
/* Objet : Liste les employes. */
/****************************************************************/
Variable
/******/
MonResultatSql : Nul Ou ResultatRequeteSql;
Enregistrement : Nul Ou EnregistrementSql;
NomEmploye : Nul Ou Caractere;
DateEmbauche : Nul Ou Date;
NumeroEmploye : Nul Ou Entier;
Salaire : Nul Ou Reel;
Debut
Ecran.Ecrire("Département "+Caractere(Entier));
Ecran.Ecrire("==============");
MonOrdreSql.EcrireParametre("NumeroDepartement", NumeroDepartement);
MonOrdreSql.ExecuterSql();
MonResultatSql=MonOrdreSql.LireResultatRequete();
Pour Enregistrement=MonResultatSql.ParcoursAuDebut() JusquA MonResultatSql.DernierElement() Faire
Enregistrement.LireResultat("NomEmploye", NomEmploye);
Enregistrement.LireResultat("DateEmbauche", DateEmbauche);
Enregistrement.LireResultat("NumeroEmploye", NumeroEmploye);
Enregistrement.LireResultat("Salaire", Salaire);
Ecran.Ecrire(NomEmploye+" "+Caractere(DateEmbauche)+" "+Caractere(NumeroEmploye)+" "+Caractere(Salaire));
Fin Pour
Fin Procedure
Principal
/*******/
Variable
/******/
MaConnexionSql : Nul Ou IConnexionSql;
MonOrdreSql2 : Nul Ou IOrdreSql;
SalaireMin : Reel;
SalaireMax : Reel;
SalaireMoyen : Reel;
Debut
...
MonOrdreSql=MaConnexionSql.CreerRequeteSql("SELECT ename:=${NomEmploye}, hiredate:=${DateEmbauche}, empno:=${NumeroEmploye}, sal:=${Salaire} FROM emp WHERE deptno=${NumeroDepartement};", 5);
MonOrdreSql.DeclarerParametre("NumeroDepartement", Entier);
MonOrdreSql.DeclarerResultat("NomEmploye", Caractere, 20);
MonOrdreSql.DeclarerResultat("DateEmbauche", Date);
MonOrdreSql.DeclarerResultat("NumeroEmploye", Entier);
MonOrdreSql.DeclarerResultat("Salaire", Reel);
MonOrdreSql.PreparerSql();
ListerEmployes2(MonOrdreSql, 10);
ListerEmployes2(MonOrdreSql, 20);
ListerEmployes2(MonOrdreSql, 30);
...
Fin Principal
- | - | - | - | - | - | - | - | - |