UpsQry.IConnexionSql.CreerRequeteSql

Fonction CreerRequeteSql(NomRequeteSql : Caractere, SourceRequeteSql : Caractere, TTR : Entier=1, TTP : Entier=1, TDG : Entier=0) Retourner Nul Ou IRequeteSql;

Description

La méthode CreerRequeteSql permet à la tâche courante créer une nouvelle requête Structured Query Language (SQL) de nom NomRequeteSql et de source SourceRequeteSql. Pour cela, la tâche courante doit s'être appropriée au préalable la connexion.

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.

Exemple

/****************************************************************/
Procedure ListerEmployes2(MonOrdreSql : Nul Ou IOrdreSql, NumeroDepartement : Entier)
/* Objet : Liste les employes. */
/****************************************************************/
Variable
/******/

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 Fin Pour
Fin Procedure

Principal
/*******/
Variable
/******/

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

Voir aussi

ExecuterOrdreSql pour exécuter une requête Sql mono-rang directement.

Traduction

---------