Utilisation de variables dans des requêtes SQL

Il est possible d'utiliser des objets de variable dans une requête SQL en plus des valeurs de chaîne. Une requête SQL utilisant des variables doit être écrite en tant que formule, commencer par le signe égal (=) et contenir des chaînes concaténées à l'aide d'esperluettes (&).

Les variables peuvent remplacer un nom de table ou être combinées avec la clause WHERE pour remplacer des valeurs de filtre.

Utilisation d'une variable pour un nom de table

Au lieu d'entrer explicitement le nom de la table, vous pouvez créer une variable pour stocker ce nom et exécuter une instruction SELECT portant sur cette variable :

="SELECT * FROM "&GlobalVariables.TableName.Text
	 

Formule équivalente :

SELECT * FROM [TableName]
	 

Utilisation d'une variable pour une valeur de filtre

Il est possible de créer une variable pour stocker un nom de produit :

="SELECT * FROM Products WHERE ProductName =’"&
		GlobalVariables.ProductName.Text&"’"
	 

Cela équivaut à l'instruction SELECT suivante portant sur la table Produits :

SELECT * FROM Products WHERE ProductName= ’Widget’
	 

Lorsqu'une variable renvoie une valeur de chaîne, elle doit être placée entre apostrophes ('). Si la variable renvoie une valeur numérique, cette précaution est inutile. Par exemple :

="SELECT * FROM Products WHERE ProductID="&
		GlobalVariables.ProductID.Text
	 

Syntaxe spécifique à la base de données

Les fournisseurs de bases de données implémentent SQL de différentes façons. Les listes relationnelles sont définies par les instructions SQL. Ainsi, les créateurs de rapports peuvent être amenés à écrire plusieurs versions de la même instruction afin que la définition de liste fonctionne avec les différents types de connexion de données.

Si des variables sont utilisées dans les requêtes SQL, la syntaxe requise dépend du type de base de données pour laquelle la requête est écrite. Par exemple, cette instruction est écrite en SQL standard :

=" SELECT Id, AccCde FROM LdgA where AccCde like '"&GlobalVariables.GV_WhereClause.Text&"' "

Pour une base de données Oracle, l'instruction sera :

=" SELECT ""Id"", ""AccCde"" FROM DES.LDGA where ""AccCde"" like '"&GlobalVariables.GV_WhereClause.Text&"' "

Pour une base de données DB2, l'instruction sera :

=" SELECT ""Id"", ""AccCde"" FROM ADMIN_DEV.""LdgA"" where ""AccCde"" like '"&GlobalVariables.GV_WhereClause.Text&"' "