|
| problème avec TableCherche sur table Fichier |
| Iniciado por Céline, 29,jul. 2020 10:36 - 6 respuestas |
| |
| | | |
|
| |
Miembro registrado 10 mensajes |
|
| Publicado el 29,julio 2020 - 10:36 |
Bonjour, je rencontre un problème avec un TableCherche :
j'ai une table fichier/requête. Certaines colonnes sont alimentées par la requête grâce à leur onglet liaison (ex Nom, Prénom) ; d'autres colonnes sont alimentées par programmation dans le code affichage d'une ligne de la table (ex NompPrénom).
Si je fais un TableCherche sur une colonne alimentée par requête, aucun problème. Mais je veux aussi faire un TableCherche sur une colonne alimentée par programmation. Là ça fonctione pour les n premiers enregistrements (lettres A à C) mais pas pour les suivants, l'entier retourné est -1.
J'ai lu les sujets du forum et essayé de décocher l'ascenseur proportionnel, de décocher la fonction Hfiltre etc, sans succès. Avez-vous rencontré le pb et auriez-vous SVP une piste pour le résoudre ??
Affectation de la colonne NompPrénom :
Table_REQ_DOSSIERS[Table_REQ_DOSSIERS].NomPrénom = Table_REQ_DOSSIERS[Table_REQ_DOSSIERS].Nom+" "+Table_REQ_DOSSIERS[Table_REQ_DOSSIERS].Prenom
Recherche sur Nom (colonne de la requête) : ok
ent1 est un entier ent1 = TableCherche(Table_REQ_DOSSIERS.Nom,MoiMême,rechercheCommencePar)
Recherche sur NomPrénom (colonne par programmation) : KO
ent1 = TableCherche(Table_REQ_DOSSIERS.NomPrénom,MoiMême,rechercheCommencePar) TableSelectPlus(Table_REQ_DOSSIERS,ent1) |
| |
| |
| | | |
|
| | |
| |
Miembro registrado 4.363 mensajes |
|
| Publicado el 29,julio 2020 - 11:01 |
Bonjour, C'est logique, tu es en présence d'un champ table mixte et nom d'un champ table Fichier. Etant donné que le calcul se fait lors de l'affichage d'une ligne et qu'elle n'est pas encore affichée,... La solution est d'ajouter une colonne calculée à ta requête et de lier la colonne de ton champ table à la colonne ainsi crée. e.g.:
SELECT Client.PK_Client AS PK_Client, Client.NDX_NomClient AS NDX_NomClient, Client.PrénomClient AS PrénomClient, Client.NDX_NomClient+Client.PrénomClient AS NomPrénom FROM Client
-- Il y a peut être plus simple, mais, ça tourne |
| |
| |
| | | |
|
| | |
| |
Miembro registrado 4.363 mensajes |
|
| Publicado el 29,julio 2020 - 11:10 |
Une autre solution est d'ajouter une condition dans ta requête.
SELECT Client.PK_Client AS PK_Client, Client.NDX_NomClient AS NDX_NomClient, Client.PrénomClient AS NDX_PrénomClient FROM Client WHERE Client.NDX_NomClient={pNom} AND Client.NDX_PrénomClient={pPrénom} Pour initialiser ton champ table, il suffira de passer Null aux paramètres pNom et pPrénom. Pour effectuer la recherche les paramètres seront le nom et le prénom saisis. Afin d'accélerer la recherche, il est conseiller d'indexer (clé avec doublon) les colonnes Nom et Prénom (d'où mon préfixe NDX)
-- Il y a peut être plus simple, mais, ça tourne |
| |
| |
| | | |
|
| | |
| |
Miembro registrado 10 mensajes |
|
| Publicado el 29,julio 2020 - 14:05 |
Je voulais éviter de toucher à la requête qui est utilisée par ailleurs, mais ce n'est probablement pas possible. En tout cas, je comprend mieux, merci ! |
| |
| |
| | | |
|
| | |
| |
Miembro registrado 4.363 mensajes |
|
| Publicado el 29,julio 2020 - 18:57 |
La deuxième requête à l'avantage de faire coup double. Elle va t'éviter de boucler sur l'ensemble de la table pour avoir tous les tuples correspondant à une recherche. Une requête est dans la plupart du temps plus rapide qu'une boucle, surtout dans un langage interprété.
-- Il y a peut être plus simple, mais, ça tourne |
| |
| |
| | | |
|
| | |
| |
| Publicado el 29,julio 2020 - 22:57 |
| une solution simple est d'exécuter la requete et de remplir une table méoire par code en bouclant dessus... Dans la boucel tu déplace le code qui vient de l'affichage de ligne, et de cette manière toute la table est chargée et cherchable sans modifier la requete |
| |
| |
| | | |
|
| | |
| |
Miembro registrado 10 mensajes |
|
| Publicado el 30,julio 2020 - 14:49 |
En fait, on avait une table mémoire (il n'y avait effectivement pas ce problème de recherche) et on est passés à une table fichier pour optimiser les performances. Du coup, on veut garder cette table fichier. J'ai donc finalement modifié la requête selon la 1ère solution de Voroltinquo et c'est ok. Je ne peux pas utiliser sa 2ème solution car ça serait trop lourd de modifier la structure de la table.
Merci à tous les deux ! |
| |
| |
| | | |
|
| | | | |
| | |
|