|
Re: Recherche ( très souple ) |
|
Utilisateur WDF
Inscrit: 28/05/2007 18:18
Post(s): 90
|
Bonjour, Juste en regardant ce code, je peux dire ... que je n'ai rien compris. Et, admettons que ce code marche ( je vais le vérifier quand j'en aurais le temps ), comment faire cela pour plusieurs rubriques ?
Contribution le : 03/11/2007 17:15
|
|
|
Re: Recherche ( très souple ) |
|
Animateur WDF
Inscrit: 02/03/2003 04:07
De Noisy le grand(93)
Post(s): 2745
|
Bonjour, Pour la recherche souple, le moteur Hyperfile et par défaut ignore la casse et la ponctuation ni les espaces avant et après. 1) La procédure pour Splitterest une procédure qui permet de remplir un tableau dynamique de chaines en lui passant en paramètre une chaine de valeurs séparées par des virgules 2) Méthode pour prendre différents séparateursCette méthode permet de remplacer les différents séparateurs qui pourrait y avoir lors de la saisie par l'utilisateur et de les transformer par des virgules car le traitement lui attend des virgules comme séparateur. Ainsi l'utilisateur pourra a sa guise utiliser différents séparateur. Dans mon exemple je traite le ';' les ':' et les espaces, mais on peu en rajouter autant que l'on veux. 3) Recherche PhonétiqueLa je vous offre une méthode qui va au delà de votre demande en méthode de recherche souple. Cette technique permet à un utilisateur d'avoir la possibilité de mal orthographier les mots qu'il veux rechercher exemple dupon dupond dupont Même si l'utilisateur saisie dupond et bien la requête renverra Dupont n'est-ce pas de l'égalité souple 4) avec plusieurs rubriquesIl peut y avoir autant de rubriques que voulu il suffit d'alimenter la variable sCondition en fonction des saisie dans les différents champs mis à la disposition de l'utilisateur
Si SansEspace(Champ1) <> "" Alors
sCondition += " AND [MaRubrique1] = '" + Champ1..Valeur + "' "
Fin
Si SansEspace(Champ2) <> "" Alors
sCondition += " AND [MaRubrique2] = '" + Champ2..Valeur + "' "
Fin
vous pouvez en faire autant que vous en avez besoin.
Contribution le : 05/11/2007 11:13
|
|
|
Re: Recherche ( très souple ) |
|
Utilisateur WDF
Inscrit: 28/05/2007 18:18
Post(s): 90
|
Bonjour, en faisant ce code ... ça marche pas :
tblVar est un tableau dynamique de 0 chaînes
Ind est un entier
sCondition est une chaîne
sClientRecherche est une chaîne = "dupon"
Rs est une Source de Données
Sql est une chaîne
//On remplie un tableau avec les valeurs voulues
TableauAjoute(tblVar, "Allergie")
TableauAjoute(tblVar, "Asthme")
TableauAjoute(tblVar, "Machine")
//On construit la condition
POUR Ind = 1 A Dimension( tblVar)
FIN
SI SansEspace(valNom) <> "" ALORS
sCondition += " AND [Nom] = '" + valNom..Valeur + "' "
FIN
SI SansEspace(ValDate) <> "" ALORS
sCondition += " AND [Date_int] = '" + ValDate..Valeur + "' "
FIN
SI SansEspace(ValClasse) <> "" ALORS
sCondition += " AND [Classes] = '" + ValClasse..Valeur + "' "
FIN
SI SansEspace(ValDifficultes) <> "" ALORS
sCondition += " AND [Difficultes] = '" + ValDifficultes..Valeur + "' "
FIN
SI SansEspace(ValPai) <> "" ALORS
sCondition += " AND [Pai] = '" + ValPai..Valeur + "' "
FIN
SI SansEspace(ValSuivi) <> "" ALORS
sCondition += " AND [Suivi] = '" + ValSuivi..Valeur + "' "
FIN
SI SansEspace(ValSuites) <> "" ALORS
sCondition += " AND [Suites] = '" + ValSuites..Valeur + "' "
FIN
SI SansEspace(ValNotes) <> "" ALORS
sCondition += " AND [Notes] = '" + ValNotes..Valeur + "' "
FIN
//On construit la requête
Sql =
[
SELECT
WL.Phonétique(Donnee.Nom) As Nom
WL.Phonétique(Donnee.Date_int) As Date_int
WL.Phonétique(Donnee.Classes) As Classes
WL.Phonétique(Donnee.Difficultes) As Difficultes
WL.Phonétique(Donnee.Pai) As Pai
WL.Phonétique(Donnee.Suivi) As Suivi
WL.Phonétique(Donnee.Suites) As Suites
WL.Phonétique(Donnee.Notes) As Notes
FROM
Donnee
WHERE
Nom LIKE
Date_int LIKE
Classes LIKE
Difficultes LIKE
Pai LIKE
Suivi LIKE
Suites LIKE
Notes LIKE
]
Sql += "'%" + WL.Phonétique(sClientRecherche) + "%'"
//On execute la requete
Sql = Remplace( Sql, "@sCondition", sCondition )
SI PAS HExécuteRequêteSQL( Rs, hRequêteDéfaut, Sql ) ALORS
Erreur( HErreurInfo())
RETOUR
FIN
POUR TOUS Rs
//remplir la table
TableAjouteLigne(Table_recherche,{NomEta + ".Nom",indRubrique},...
{NomEta + ".Date_int",indRubrique},...
{NomEta + ".Rs",indRubrique},...
{NomEta + ".A_voir",indRubrique},...
{NomEta + ".classes",indRubrique},...
{NomEta + ".Difficultes",indRubrique},...
{NomEta + ".Pai",indRubrique},...
{NomEta + ".Suivi",indRubrique},...
{NomEta + ".Suites",indRubrique},...
{NomEta + ".Notes",indRubrique},...
{NomEta + ".Archiver",indRubrique})
FIN
Contribution le : 05/11/2007 11:53
|
|
|
Re: Recherche ( très souple ) |
|
Animateur WDF
Inscrit: 02/03/2003 04:07
De Noisy le grand(93)
Post(s): 2745
|
Bonjour Le_GnU, Je ne sais par ou commencer !!!, mais vous mélangez un peu tout sans trop comprendre en effet le principe de fonctionnement Je vais tenter d'être plus didactique, mais cela est très difficile lorsque l'on ne connait rien du projet ni de la structure de l'analyse. La première des choses à faire est de savoir réellement ce que l'on doit chercher. Important et a savoir la recherche Il me semble que les requêtes SQL ne fonctionne pas sur les champs mémos (A Vérifier) voir le type de la rubrique Notes. Prennez l'habitude lorsque vous rencontrez un problème de commencer par le plus simplement possible afin de vous familiariser avec les requête SQL principe de fonctionnement on déclare une chaine qui va contenir la requête elle même Sql est une chaineensuite une variable qui va contenir le résultat de l'exécution de la requête Rs est une source de donneesstructure type d'une requête SELECT SELECT = Pour extraire des données d"une base FROM = Pour indiquer sur quel fichier l'extraction va se faire WHERE = pour conditionner la recherche ORDER BY = pour ordonner le résultat Dans votre cas commencer par un code simple
Rs est une Source de Données
Sql est une chaîne
sCondition est une chaîne
//On construit la requête
Sql =
[
SELECT
Donnee.Nom As Nom
Donnee.Date_int As Date_int
Donnee.Classes As Classes
Donnee.Difficultes As Difficultes
Donnee.Pai As Pai
Donnee.Suivi As Suivi
Donnee.Suites As Suites
Donnee.Notes As Notes
FROM
Donnees //Apparement le nom du fichier physique
WHERE
[Nom] = '" + valNom..Valeur + "' "
]
Dans cette dernière ligne le = représente une égalité pur si vous remplacer = par LIKE ce la signifira qui contient mais encore faut il lui signifier où pour cela on utilise le caratère % exemple avec le nom Dupont LIKE Du% //signifie commence par Du LIKE %po% //Signifie contient po LIKE %nt //Signifie fini par nt maintenant que la requête est créée on l'execute
Si Pas HExecuteRequete( Rs, HRequeteDefaut, Sql ) Alors
Erreur(HErreurInfo() //Si la requete est mal formulée ce qui est le cas dans votre code
Fin
Si cette portion de code s'est exécuté sans afficher de message d'alerte alors vous pouvez parcourir le résultat contenu dans la variable Rs
POUR TOUS Rs
//remplir la table
TableAjouteLigne(Table_recherche,Rs.Nom,...
Rs.Date_int,...
Rs.classes,...
Rs.Difficultes,...
Rs.Pai,...
Rs.Suivi,...
Rs.Suites,...
Rs.Notes,...
)
FIN
seules les données extraites sont accessibles directement via la variable Rs Tester ce simple code et faites le évoluer petit à petit A la volée ce que vous devriez avoir Une procédure pour corrigé les séparateur sur la saisie des difficulté
PROCEDURE CorrigeDifficultes(sValDifficultes)
//On remplace le points virgules par des virgules
sValDifficultes = Remplace( sValDifficultes, ";", "," )
//On remplace les deux points par des virgules
sValDifficultes = Remplace( sValDifficultes, ":", "," )
//On remplace les espaces par des virgules
sValDifficultes = Remplace( sValDifficultes, " ", "," )
Renvoyer sValDifficultes
Procédure pour alimenter le tableau dynamique avec le contenu de ValDifficultes
PROCEDURE Split( ChaineSource est une chaine, CaractereSeparateur est une chaine, bSupprimeEspace est un booléen = Faux )
tbl est un tableau dynamique de 0 chaines
sListe est une chaine = ChaineSource
sUnMot est une chaine
POUR TOUTE CHAINE sUnMot DE SListe SEPAREE PAR CaractereSeparateur
Si bSupprimeEspace = Vrai Alors
sUnMot = SansEspace( sUnMot )
Fin
TableauAjoute( tbl, sUnMot )
FIN
RENVOYER tbl
//On peut continuer comme çà Une procédure pour ajouter les conditions
PROCEDURE AjouteCondition( pCondition, pNewCondition )
Si pCondition <> "" alors
pCondition += " AND " + pNewCondition
La procédure principale
tblVar est un tableau dynamique de 0 chaînes
Ind est un entier
sCondition est une chaîne
Rs est une Source de Données
Sql est une chaîne
SI SansEspace(valNom) <> "" ALORS
AjouteCondition(sCondition, " [Nom] LIKE '%" + WL.Phonetique(valNom..Valeur) + "%' " )
FIN
SI SansEspace(ValDate) <> "" ALORS
AjouteCondition(sCondition, " [Date_int] = '" + ValDate..Valeur + "' ")
FIN
SI SansEspace(ValClasse) <> "" ALORS
AjouteCondition(sCondition, " [Classes] = '" + ValClasse..Valeur + "' ")
FIN
SI SansEspace(ValDifficultes) <> "" ALORS
ValDifficultes = CorrigeDifficultes(ValDifficultes)
tblVal = Split( ValDifficultes, ",", Vrai )
AjouteCondition(sCondition += " AND [Difficultes] = '" + ValDifficultes..Valeur + "' ")
//On ajoute les conditions à partir du tableau dynamique
Pour Ind = 1 a Dimension( tblVar)
AjouteCondition( sCondition , RC + " [Difficultes] LIKE '%" + WL.Phonétique(tblVar[Ind]) + "%' "
"'%" + WL.Phonétique(sClientRecherche) + "%'"
Fin
FIN
SI SansEspace(ValPai) <> "" ALORS
AjouteCondition(sCondition," [Pai] = '" + ValPai..Valeur + "' ")
FIN
SI SansEspace(ValSuivi) <> "" ALORS
AjouteCondition( sCondition," [Suivi] = '" + ValSuivi..Valeur + "' " )
FIN
SI SansEspace(ValSuites) <> "" ALORS
AjouteCondition( sCondition," [Suites] = '" + ValSuites..Valeur + "' " )
FIN
SI SansEspace(ValNotes) <> "" ALORS
AjouteCondition( sCondition, " [Notes] = '" + ValNotes..Valeur + "' ")
FIN
//On construit la requête
Sql =
[
SELECT
WL.Phonétique(Donnee.Nom) As Nom
//Phonétique non nécessaire sur une date
Donnee.Date_int As Date_int
WL.Phonétique(Donnee.Classes) As Classes
//Quel est le type de Classes ?
WL.Phonétique(Donnee.Difficultes) As Difficultes
//Pas de Phonétique sur les valeurs numériques
Donnee.Pai As Pai
WL.Phonétique(Donnee.Suivi) As Suivi
WL.Phonétique(Donnee.Suites) As Suites
//ATTENTION pas de Mémo
WL.Phonétique(Donnee.Notes) As Notes
FROM
Donnee
WHERE
@sCondition
]
//On remplace la chaine @sCondition par sCondition
Sql = Remplace( Sql, "@sCondition", sCondition )
Sql += "'%" + WL.Phonétique(sClientRecherche) + "%'"
//On execute la requete
Sql = Remplace( Sql, "@sCondition", sCondition )
SI PAS HExécuteRequêteSQL( Rs, hRequêteDéfaut, Sql ) ALORS
Erreur( HErreurInfo())
RETOUR
FIN
//On rempli la table
POUR TOUS Rs
//remplir la table
TableAjouteLigne(Table_recherche,Rs.Nom,...
Rs.Date_int,...
Rs.classes,...
Rs.Difficultes,...
Rs.Pai,...
Rs.Suivi,...
Rs.Suites,...
Rs.Notes,...
)
FIN
//Libération de la ressource
HAnnuleDeclaration(Rs)
Code saisie à la volée et pouvant contenir des erreurs
Contribution le : 05/11/2007 14:56
|
|
|
Re: Recherche ( très souple ) |
|
Utilisateur WDF
Inscrit: 28/05/2007 18:18
Post(s): 90
|
Bonsoir, Citation : Si cette portion de code s'est exécuté sans afficher de message d'alerte alors vous pouvez parcourir le résultat contenu dans la variable Rs A l'exécution, j'ai ce méssage d'erreur : "Une erreur est survenue dans la fenêtre L'objet Rs n'a pas été trouvé." En mettant dans une procédure "Tri" ce code :
Rs est une Source de Données
Sql est une chaîne
sCondition est une chaîne
//On construit la requête
Sql =
[
SELECT
Donnee.Nom As Nom
Donnee.Date_int As Date_int
Donnee.Classes As Classes
Donnee.Difficultes As Difficultes
Donnee.Pai As Pai
Donnee.Suivi As Suivi
Donnee.Suites As Suites
Donnee.Notes As Notes
FROM
Donnees //Apparement le nom du fichier physique
WHERE
[Nom] LIKE "'%" + valNom..Valeur + "%'"
]
SI PAS HExécuteRequête( Rs, hRequêteDéfaut, Sql ) ALORS
Erreur(HErreurInfo()) //Si la requete est mal formulée ce qui est le cas dans votre code
FIN
Infos sur ma BDD : - Les rubriques concernant la recherche : Nom = Texte Date_int = Texte Classes = Texte Difficultes = Texte Pai = Texte Suivi = Texte Suites = Texte Notes = Texte J'ai une rubrique "Rs", le problème peut venir de la ... Edit : en renommant les "Rs" en "Rsql", le meme méssage d'erreur !
Contribution le : 05/11/2007 19:22
|
|
|
Re: Recherche ( très souple ) |
|
Animateur WDF
Inscrit: 02/03/2003 04:07
De Noisy le grand(93)
Post(s): 2745
|
remplacer :
SI PAS HExécuteRequête( Rs, hRequêteDéfaut, Sql ) ALORS
Erreur(HErreurInfo()) //Si la requete est mal formulée ce qui est le cas dans votre code
FIN
par
SI PAS HExécuteRequêteSQL( Rs, hRequêteDéfaut, Sql ) ALORS
Erreur(HErreurInfo()) //Si la requete est mal formulée ce qui est le cas dans votre code
FIN
Contribution le : 06/11/2007 00:02
|
|
|
Re: Recherche ( très souple ) |
|
Utilisateur WDF
Inscrit: 28/05/2007 18:18
Post(s): 90
|
Bonjour, maintenant, j'ai "mot Donnee innatendu"
Contribution le : 06/11/2007 11:15
|
|
|
Re: Recherche ( très souple ) |
|
Animateur WDF
Inscrit: 02/03/2003 04:07
De Noisy le grand(93)
Post(s): 2745
|
Bonjour, Bon, cela signifie qu'il y a une erreur de syntaxe dans la sql, si vous pouviez mettre le contenu de la variable Sql juste avant son exécution on pourrait peyt-être trouver l'erreur
Contribution le : 07/11/2007 11:52
|
|
|
Re: Recherche ( très souple ) |
|
Utilisateur WDF
Inscrit: 28/05/2007 18:18
Post(s): 90
|
Tout est 2 méssages plus haut, sauf que j'ai remplacé "donneeS" par "donneE"
Sql =
[
SELECT
Donnee.Nom As Nom
Donnee.Date_int As Date_int
Donnee.Classes As Classes
Donnee.Difficultes As Difficultes
Donnee.Pai As Pai
Donnee.Suivi As Suivi
Donnee.Suites As Suites
Donnee.Notes As Notes
FROM
Donnees //Apparement le nom du fichier physique
WHERE
[Nom] LIKE "'%" + valNom..Valeur + "%'"
]
Contribution le : 07/11/2007 13:33
Edité par Le_GnU sur 7/11/2007 13:52:33
|
|
|
Re: Recherche ( très souple ) |
|
Animateur WDF
Inscrit: 02/03/2003 04:07
De Noisy le grand(93)
Post(s): 2745
|
Bonjour, Syntaxe d'une SQL:
SELECT
<Fichier>.<Rubrique1>,
<Fichier>.<Rubrique2>,
<Fichier>.<Rubriquen>
FROM
<Fichier>
1) Dans votre syntaxe je ne vois pas les virgules séparant les différentes rubriques à extraire 2) le nom du fichier spécifié après le 'FROM' ne coïncide pas avec le nom du fichier pour les rubriques. on devrait si le nom du fichier physique est 'Donnee' avoir:
Sql =
[
SELECT
Donnee.Nom As Nom,
Donnee.Date_int As Date_int,
Donnee.Classes As Classes,
Donnee.Difficultes As Difficultes,
Donnee.Pai As Pai,
Donnee.Suivi As Suivi,
Donnee.Suites As Suites,
Donnee.Notes As Notes
FROM
Donnee //Apparement le nom du fichier physique
WHERE
[Nom] LIKE "'%" + valNom..Valeur + "%'"
]
Contribution le : 07/11/2007 14:27
|
|
|
Re: Recherche ( très souple ) |
|
Utilisateur WDF
Inscrit: 28/05/2007 18:18
Post(s): 90
|
Bonjour, maintenant, j'ai "caractère " innatendu"
Contribution le : 07/11/2007 14:36
|
|
|
Re: Recherche ( très souple ) |
|
Animateur WDF
Inscrit: 02/03/2003 04:07
De Noisy le grand(93)
Post(s): 2745
|
Soyer compréhensible, si vous ne mettez que les messages d'erreur sans mettre en ligne ce qui à causé l'erreur cela va devenir difficile de vous aider. Citation : vous pouviez mettre le contenu de la variable Sql juste avant son exécution
c'est ce qui est exécuté par la commande HExecuteSQL() par consequent la variable SQL ne devrait plus contenir "'%" + valNom..Valeur + "%'" ni le commentaire : //Apparement le nom du fichier physique
Contribution le : 07/11/2007 16:56
|
|
|
Re: Recherche ( très souple ) |
|
Utilisateur WDF
Inscrit: 28/05/2007 18:18
Post(s): 90
|
Bonsoir, Voila le code de ma procédure "principale" :
tblVar est un tableau dynamique de 0 chaînes
Ind est un entier
sCondition est une chaîne
Rs est une Source de Données
Sql est une chaîne
sClientRecherche est une chaîne
// On efface la table
TableSupprimeTout(Table_recherche)
SI SansEspace(valNom) <> "" ALORS
AjouteCondition(sCondition, " [Nom] LIKE '%" + WL.Phonétique(valNom..Valeur) + "%' " )
FIN
SI SansEspace(ValDate) <> "" ALORS
AjouteCondition(sCondition, " [Date_int] = '" + ValDate..Valeur + "' ")
FIN
SI SansEspace(ValClasse) <> "" ALORS
AjouteCondition(sCondition, " [Classes] = '" + ValClasse..Valeur + "' ")
FIN
SI SansEspace(ValDifficultes) <> "" ALORS
ValDifficultes = CorrigeDifficultes(ValDifficultes)
tblVar = Split( ValDifficultes, ",", Vrai )
AjouteCondition(sCondition, " AND [Difficultes] = '" + ValDifficultes..Valeur + "' ")
//On ajoute les conditions à partir du tableau dynamique
POUR Ind = 1 A Dimension( tblVar)
AjouteCondition( sCondition , RC + " [Difficultes] LIKE '%" + WL.Phonétique(tblVar[Ind]) + "%' ")
FIN
FIN
SI SansEspace(ValPai) <> "" ALORS
AjouteCondition(sCondition," [Pai] = '" + ValPai..Valeur + "' ")
FIN
SI SansEspace(ValSuivi) <> "" ALORS
AjouteCondition( sCondition," [Suivi] = '" + ValSuivi..Valeur + "' " )
FIN
SI SansEspace(ValSuites) <> "" ALORS
AjouteCondition( sCondition," [Suites] = '" + ValSuites..Valeur + "' " )
FIN
SI SansEspace(ValNotes) <> "" ALORS
AjouteCondition( sCondition, " [Notes] = '" + ValNotes..Valeur + "' ")
FIN
//On construit la requête
Sql =
[
SELECT
Donnee.Nom As Nom,
Donnee.Date_int As Date_int,
Donnee.Classes As Classes,
Donnee.Difficultes As Difficultes,
Donnee.Pai As Pai,
Donnee.Suivi As Suivi,
Donnee.Suites As Suites,
Donnee.Notes As Notes
FROM
Donnee
]
//On execute la requete
Sql = Remplace( Sql, "@sCondition", sCondition )
SI PAS HExécuteRequêteSQL( Rs, hRequêteDéfaut, Sql ) ALORS
Erreur( HErreurInfo())
RETOUR
FIN
//On rempli la table
POUR TOUS Rs
//remplir la table
TableAjouteLigne(Table_recherche,Rs.Nom,...
Rs.Date_int,...
Rs.classes,...
Rs.Difficultes,...
Rs.Pai,...
Rs.Suivi,...
Rs.Suites,...
Rs.Notes)
FIN
//Libération de la ressource
HAnnuleDéclaration(Rs)
En executant ce code, je vois dans ma liste mes clients. L'ennui, c'est que ca ne marche pas comme sa evrait marcher : aucun de mes clients n'est trié ! Dans une fenetre "tri" j'ai mes champs pour rechercher mais, ca ne recherche pas ...
Contribution le : 09/11/2007 18:52
|
|
|
Re: Recherche ( très souple ) |
|
Animateur WDF
Inscrit: 02/03/2003 04:07
De Noisy le grand(93)
Post(s): 2745
|
Bonjour, Je finis par me demander si vous comprenez le code que vous écrivez Vous construisez correctement la condition de sélection de vos enregistrement sCondition mais vous ne l'appliquez pas dans la requête!
tblVar est un tableau dynamique de 0 chaînes
Ind est un entier
sCondition est une chaîne
Rs est une Source de Données
Sql est une chaîne
sClientRecherche est une chaîne
// On efface la table
TableSupprimeTout(Table_recherche)
SI SansEspace(valNom) <> "" ALORS
AjouteCondition(sCondition, " [Nom] LIKE '%" + WL.Phonétique(valNom..Valeur) + "%' " )
FIN
SI SansEspace(ValDate) <> "" ALORS
AjouteCondition(sCondition, " [Date_int] = '" + ValDate..Valeur + "' ")
FIN
SI SansEspace(ValClasse) <> "" ALORS
AjouteCondition(sCondition, " [Classes] = '" + ValClasse..Valeur + "' ")
FIN
SI SansEspace(ValDifficultes) <> "" ALORS
ValDifficultes = CorrigeDifficultes(ValDifficultes)
tblVar = Split( ValDifficultes, ",", Vrai )
AjouteCondition(sCondition, " AND [Difficultes] = '" + ValDifficultes..Valeur + "' ")
//On ajoute les conditions à partir du tableau dynamique
POUR Ind = 1 A Dimension( tblVar)
AjouteCondition( sCondition , RC + " [Difficultes] LIKE '%" + WL.Phonétique(tblVar[Ind]) + "%' ")
FIN
FIN
SI SansEspace(ValPai) <> "" ALORS
AjouteCondition(sCondition," [Pai] = '" + ValPai..Valeur + "' ")
FIN
SI SansEspace(ValSuivi) <> "" ALORS
AjouteCondition( sCondition," [Suivi] = '" + ValSuivi..Valeur + "' " )
FIN
SI SansEspace(ValSuites) <> "" ALORS
AjouteCondition( sCondition," [Suites] = '" + ValSuites..Valeur + "' " )
FIN
SI SansEspace(ValNotes) <> "" ALORS
AjouteCondition( sCondition, " [Notes] = '" + ValNotes..Valeur + "' ")
FIN
//On construit la requête
Sql =
[
SELECT
WL.Phonétique(Donnee.Nom) As Nom,
Donnee.Date_int As Date_int,
Donnee.Classes As Classes,
Donnee.Difficultes As Difficultes,
Donnee.Pai As Pai,
Donnee.Suivi As Suivi,
Donnee.Suites As Suites,
Donnee.Notes As Notes
FROM
Donnee
WHERE
@sCondition
ORDER BY Nom
]
//On execute la requete
Sql = Remplace( Sql, "@sCondition", sCondition )
SI PAS HExécuteRequêteSQL( Rs, hRequêteDéfaut, Sql ) ALORS
Erreur( HErreurInfo())
RETOUR
FIN
//On rempli la table
POUR TOUS Rs
//remplir la table
TableAjouteLigne(Table_recherche,Rs.Nom,...
Rs.Date_int,...
Rs.classes,...
Rs.Difficultes,...
Rs.Pai,...
Rs.Suivi,...
Rs.Suites,...
Rs.Notes)
FIN
//Libération de la ressource
HAnnuleDéclaration(Rs)
J'ai rajouter dans la variable Sql la condition de sélection contenu dans sCondition ==>WHERE @sCondition J'ai rajouter aussi un tri sur le nom ==>ORDER BY Nom ainsi que la Phonétique sur le Nom
Contribution le : 09/11/2007 23:37
|
|
|
Re: Recherche ( très souple ) |
|
Utilisateur WDF
Inscrit: 28/05/2007 18:18
Post(s): 90
|
Bonjour, je ne comprend pas le "@scondition"
J'ai une erreur "mot ( innatendu"
Contribution le : 10/11/2007 10:59
|
|
|
Re: Recherche ( très souple ) |
|
Animateur WDF
Inscrit: 02/03/2003 04:07
De Noisy le grand(93)
Post(s): 2745
|
Bonjour, Dire qu'il y a une erreur c'est bien mais si vous ne mettez pas le contenu de la variable qui pose problème on ne peu pas deviner. mettez sur le site le contenu de la variable sCondition avant l'exécution de la ligne:
SI PAS HExécuteRequêteSQL( Rs, hRequêteDéfaut, Sql ) ALORS
Contribution le : 10/11/2007 16:56
|
|
|
Re: Recherche ( très souple ) |
|
Utilisateur WDF
Inscrit: 28/05/2007 18:18
Post(s): 90
|
Contenu :
SI SansEspace(ValClasse) <> "" ALORS
AjouteCondition(sCondition, " [Classes] = '" + ValClasse..Valeur + "' ")
FIN
sCondition = " "
Contribution le : 10/11/2007 17:36
|
|
|
Re: Recherche ( très souple ) |
|
Animateur WDF
Inscrit: 02/03/2003 04:07
De Noisy le grand(93)
Post(s): 2745
|
Bonjour, En effet une erreur dans la procédure
PROCEDURE AjouteCondition( pCondition, pNewCondition )
Si pCondition <> "" alors
pCondition += " AND "
Fin
pCondition += pNewCondition
La précédente procédure ne pouvait se remplir
Contribution le : 10/11/2007 18:05
|
|
|
Re: Recherche ( très souple ) |
|
Utilisateur WDF
Inscrit: 28/05/2007 18:18
Post(s): 90
|
Meme erreur mais cette fois, ici :
SI SansEspace(ValDifficultes) <> "" ALORS
ValDifficultes = CorrigeDifficultes(ValDifficultes)
tblVar = Split( ValDifficultes, ",", Vrai )
AjouteCondition(sCondition, " AND [Difficultes] = '" + ValDifficultes..Valeur + "' ")
//On ajoute les conditions à partir du tableau dynamique
POUR Ind = 1 A Dimension( tblVar)
AjouteCondition( sCondition , RC + " [Difficultes] LIKE '%" + WL.Phonétique(tblVar[Ind]) + "%' ")
FIN
Le point d'arret étant a la ligne "ajouteCondition" Edit : bug corrigé en supprimant le " AND" Meme erreur a cette ligne :
SI SansEspace(ValSuivi) <> "" ALORS
AjouteCondition( sCondition," [Suivi] = '" + ValSuivi..Valeur + "' " )
FIN
Contribution le : 10/11/2007 18:32
Edité par Le_GnU sur 10/11/2007 19:00:41
|
|
|
Re: Recherche ( très souple ) |
|
Animateur WDF
Inscrit: 02/03/2003 04:07
De Noisy le grand(93)
Post(s): 2745
|
Bonjour, Une fois de plus vous mettez le code écrit au lieu de mettre la syntaxe générer contenu dans sCondition, c'est dans cette variable que les erreurs vont être visibles mais a lire le code on voit qu'il faut remplacer:
AjouteCondition(sCondition, " AND [Difficultes] = '" + ValDifficultes..Valeur + "' ")
par
AjouteCondition(sCondition, " [Difficultes] = '" + ValDifficultes..Valeur + "' ")
le 'AND' ne doit être passé en paramêtre puisqu'il est automatiquement ajouté par la fonction AjouteCondition
Contribution le : 10/11/2007 19:01
|
|
Vous ne pouvez pas débuter de nouveaux sujets.
Vous pouvez voir les sujets.
Vous ne pouvez pas répondre aux contributions.
Vous ne pouvez pas éditer vos contributions.
Vous ne pouvez pas effacez vos contributions.
Vous ne pouvez pas ajouter de nouveaux sondages.
Vous ne pouvez pas voter en sondage.
Vous ne pouvez pas attacher des fichiers à vos contributions.
Vous ne pouvez pas poster sans approbation.
|
Connexion
Menu
Chercher WDForge
Chercher Web
Partenaires
|