4D v16.3

CHERCHER PAR SQL

Accueil

 
4D v16.3
SQL
CHERCHER PAR SQL

CHERCHER PAR SQL 


 

CHERCHER PAR SQL ( {laTable ;} formuleSQL ) 
Paramètre Type   Description
laTable  Table in Table de laquelle retourner une sélection d’enregistrements ou Table par défaut si ce paramètre est omis
formuleSQL  Chaîne in Formule de recherche SQL valide représentant la clause WHERE de la requête SELECT

La commande CHERCHER PAR SQL permet de tirer directement parti du moteur SQL intégré de 4D. Elle exécute une requête SELECT simple qui peut être écrite ainsi :

SELECT *
   FROM laTable
   WHERE <formuleSQL>

laTable est le nom de la table passé en premier paramètre et formuleSQL la chaîne de recherche passée en deuxième paramètre.

Par exemple, l’instruction suivante :

 CHERCHER PAR SQL([Employees];"name=’smith’")

équivaut à la requête SQL :

SELECT * FROM Employees WHERE "name=’smith’"

La commande CHERCHER PAR SQL est semblable à la commande CHERCHER PAR FORMULE. Elle effectue une recherche parmi les enregistrements de la table définie. Elle modifie la sélection courante de table pour le process courant et fait du premier enregistrement de la nouvelle sélection le nouvel enregistrement courant.

Note : La commande CHERCHER PAR SQL ne peut pas être utilisée dans le contexte d'une connexion SQL externe, elle s'adresse directement au moteur SQL intégré de 4D.

CHERCHER PAR SQL applique formuleSQL à chaque enregistrement de la sélection de la table. formuleSQL est une expression booléenne qui doit retourner VRAI ou FAUX. Comme vous le savez peut-être, dans la norme SQL, une condition de recherche peut avoir un résultat VRAI, FAUX ou NULL. Tous les enregistrements (rows) pour lesquels la condition de recherche retourne VRAI sont inclus dans la nouvelle sélection courante.

L’expression formuleSQL peut être simple, comme par exemple la comparaison d’un champ (colonne) à une valeur ; elle peut également être complexe, comme la réalisation d’un calcul. Comme CHERCHER PAR FORMULE, CHERCHER PAR SQL peut évaluer des valeurs dans les tables liées (cf. exemple 4). formuleSQL doit être une instruction SQL valide, conforme à la norme SQL-2 et tenant compte de l’implémentation actuelle du SQL dans 4D. Pour plus d’information la prise en charge du SQL dans 4D, reportez-vous au manuel Guide de référence 4D SQL.

Le paramètre formuleSQL peut contenir des références à des expressions 4D. La syntaxe à utiliser est la même que pour les commandes SQL intégrées ou le code inclus dans les balises Debut SQL/Fin SQL, c’est-à-dire : <<MaVar>> ou :MaVar
Pour plus d’informations sur ce point, reportez-vous à la section Présentation des commandes du thème SQL.

Note : Cette commande est compatible avec les commandes FIXER LIMITE RECHERCHE et FIXER DESTINATION RECHERCHE.

Rappel : Les références aux variables locales ne sont pas possibles en mode compilé. Pour plus d'informations sur la programmation SQL dans 4D, reportez-vous à la section Présentation des commandes du thème SQL.

CHERCHER PAR SQL n’utilise pas les liens entre les tables définis dans l’éditeur de structure de 4D. Si vous souhaitez tirer parti des données liées, vous devez ajouter une clause JOIN dans la requête. Par exemple, considérons la structure suivante, dans laquelle un lien N vers 1 relie les champs [Personnes]Ville à [Villes]Nom :

[Personnes]
   Nom
   Ville
[Villes]
   Nom
   Population

Avec la commande CHERCHER PAR FORMULE, vous pourriez écrire :

 CHERCHER PAR FORMULE([Personnes];[Villes]Population>1000)

Avec CHERCHER PAR SQL, vous devez écrire l’instruction suivante, que le lien existe ou non :

 CHERCHER PAR SQL([Personnes];"personnes.ville=villes.nom AND villes.population>1000")

Note : Les liens 1 vers N et N vers N sont également traités par CHERCHER PAR SQL d’une manière différente de CHERCHER PAR FORMULE.

Cet exemple recherche les bureaux dont les ventes sont supérieures à 100. La requête SQL est :

SELECT * FROM Bureaux WHERE Ventes > 100

En utilisant la commande CHERCHER PAR SQL :

 C_ALPHA(30;$formuleRequete)
 $formuleRequete:="Ventes > 100"
 CHERCHER PAR SQL([Bureaux];$formuleRequete)

Cet exemple recherche les commandes comprises entre 3000 et 4000. La requête SQL est :

SELECT *
FROM Commandes
WHERE Total BETWEEN 3000 AND 4000

En utilisant la commande CHERCHER PAR SQL :

 C_ALPHA(40;$formuleRequete)
 $formuleRequete:="Total BETWEEN 3000 AND 4000"
 CHERCHER PAR SQL([Ventes];$formuleRequete)

Cet exemple montre comment trier le résultat de la requête sur un critère spécifique. La requête SQL est :

SELECT *
FROM Personnes
WHERE Ville =’Paris’
ORDER BY Nom

En utilisant la commande CHERCHER PAR SQL :

 C_ALPHA(40;$formuleRequete)
 $formuleRequete:="Ville = ‘Paris’ ORDER BY Nom"
 CHERCHER PAR SQL([Personnes];$formuleRequete)

Cet exemple montre une requête utilisant des tables liées dans 4D. Via le SQL vous devez utiliser un JOIN pour recréer cette relation. Considérons les deux tables suivantes :

   [Factures] avec les champs (colonnes) suivants :
      ID_Fact : Entier long
      Date_Fact : Date
      Total : Réel
   [Lignes_Factures] avec les champs (colonnes) suivants :
      ID_Ligne : Entier long
      ID_Fact : Entier long
      Code : Alpha (10)

Un lien de N vers 1 relie le champ [Lignes_Factures]ID_Fact au champ [Factures]ID_Fact.
Avec la commande CHERCHER PAR FORMULE, vous pourriez écrire :

 CHERCHER PAR FORMULE([Lignes_Factures];([Lignes_Factures]Code="FX-200") & (Mois de([Factures]Date_Fact)=4))

La requête SQL est :

SELECT ID_Ligne
FROM Lignes_Factures, Factures
WHERE Lignes_Factures.ID_Fact=Factures.ID_Fact
AND Lignes_Factures.Code='FX-200'
AND MONTH(Factures.Date_Fact) = 4

En utilisant la commande CHERCHER PAR SQL :

 C_ALPHA(40;$formuleRequete)
 $formuleRequete:="Lignes_Factures.ID_Fact=Factures.ID_Fact AND Lignes_Factures.Code=’FX-200’ AND MONTH(Factures.Date_Fact)=4"
 CHERCHER PAR SQL([Lignes_Factures];$formuleRequete)

Si le format de la condition de recherche est correct, la variable système OK prend la valeur 1. Sinon, elle prend la valeur 0, le résultat de la commande est une sélection vide et une erreur est retournée. Cette erreur peut être interceptée par une méthode installée à l’aide de la commande APPELER SUR ERREUR.



Voir aussi  

CHERCHER PAR FORMULE

 
PROPRIÉTÉS 

Produit : 4D
Thème : SQL
Numéro : 942
Nom intl. : QUERY BY SQL

Cette commande modifie la variable système OKCette commande modifie la variable système ErrorCette commande change l'enregistrement courantCette commande change la sélection couranteCommande provoquant un échange entre le client et le serveur

 
HISTORIQUE 

Créé : 4D v11 SQL

 
UTILISATION DE L'ARTICLE

4D - Langage ( 4D v16)
4D - Langage ( 4D v16.1)
4D - Langage ( 4D v16.2)
4D - Langage ( 4D v16.3)