[urgent] Locate ne marche pas sur un champ référence [Résolu]

MadM@tt 2215 Messages postés mardi 11 novembre 2003Date d'inscription 16 juillet 2009 Dernière intervention - 3 déc. 2007 à 20:34 - Dernière réponse : MadM@tt 2215 Messages postés mardi 11 novembre 2003Date d'inscription 16 juillet 2009 Dernière intervention
- 5 déc. 2007 à 23:51
Bonjour à tous,

désolé pour le tag [urgent] mais je n'ai que la nuit pour finir ce boulot

Je suis sur Delphi 5, et malgré toutes mes recherches, impossible de résoudre mon problème :
J'ai ajouté un champ référence à une table, et lorsque je veux faire une recherche sur ce champ à l'aide de Locate, delphi me sort l'erreur suivante ::
Le champ 'NomPays' ne peut pas être utilisé dans une expression filtre

Voici la ligne en question :

DataModuleAgence.TableVoyage.Locate('NOMPAYS',EditNomPays.Text,[]);

PS : au passage quand je veux rajouter l'option loCaseInsensitive Delphi me dit que loCaseInsensitive n'est pas déclaré et ne veux pas compiler, si vous avez une solution pour ça aussi je suis preneur merci.

Merci beaucoup
- MadMatt -

 www.choisir-une-entreprise.com
Afficher la suite 

11 réponses

Répondre au sujet
tilab 97 Messages postés mercredi 25 octobre 2006Date d'inscription 26 octobre 2009 Dernière intervention - 3 déc. 2007 à 23:35
+3
Utile
Salut,

de quel type est le champ NomPays?
loCaseInsensitive est contenu dans l'unit DB; est-elle déclarée dans les uses?

Alex
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de tilab
tilab 97 Messages postés mercredi 25 octobre 2006Date d'inscription 26 octobre 2009 Dernière intervention - 4 déc. 2007 à 00:06
+3
Utile
la syntaxe devrait être:




DataModuleAgence.TableVoyage.Locate('NOMPAYS',EditNomPays.Text,
,[loPartialKey, loCaseInsensitive]




si tu mets [] la localisation se fait seulement en cas d'écriture complète et et avec les majuscules et minuscules justes!!



Alex
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de tilab
cs_cantador 4996 Messages postés dimanche 26 février 2006Date d'inscription 27 mars 2018 Dernière intervention - 5 déc. 2007 à 12:09
+3
Utile
A la limite, il y une rubrique "au secours aidez-moi".. donc..
Cela dit tout le monde peut avoir une urgence mais ce sont souvent les explications alibis qui sont cocaces !

Bref, on va passer le réveillon là dessus et pour en revenir à nos moutons, le TDBLookupComboBox ne modifie rien :
Imagine que tu poses un DBGrid lié à un Query (ta table)

et à côté tu poses Un TDBLookupComboBox..
Cette liste déroulante ne modifie rien, puisqu'elle ne concerne que la table PAYS
et il n'y pas de transformation, c'est le composant lui-même qui fait le boulot.

Il faut remplir les propriétés de la manière suivante :
Ne rien mettre dans le datasouce , ni le Datafield ! (sinon données circulaires..)
ensuite :
KeyField :   CodePays
ListeField :  CodePays;NomPays
ListSource : DsPays

et sur le OnCloseUp il faut récupérer le EditValue et non le value :

DataModuleAgence.TableVoyage.Locate('CodePays', DBLookupComboBox.EditValue,[]);
Evidemment il n'y a pas en natif de composant ComboLookup sans DB..
Moi, j'ai tellement l'habitude de me servir des composants (sublimes) de DevExpress que j'utilise couramment le TcxLookupComboBox qui est adapté..

bon courage pour la suite

cantador
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de cs_cantador
MadM@tt 2215 Messages postés mardi 11 novembre 2003Date d'inscription 16 juillet 2009 Dernière intervention - 3 déc. 2007 à 23:38
0
Utile
Merci pour loCaseInsensitive c'était bien ça ;)

Pour NomPays, c'est de type fkLookUp. Apparement ça serait ça le problème, mais comment faire une recherche sur un champ référence alors ? (je pensais passer par un filtre, mais bon ça aura pas le meme rendu...)

Merci pour la réponse, si tu avais d'autres idées ^^

- MadMatt -

 www.choisir-une-entreprise.com
Commenter la réponse de MadM@tt
tilab 97 Messages postés mercredi 25 octobre 2006Date d'inscription 26 octobre 2009 Dernière intervention - 3 déc. 2007 à 23:43
0
Utile
Hello,
Je me suis mal exprimé: Comment as-tu défini ton champ NomPays dans la base de donnée et quel type de base utilises-tu?

Alex
Commenter la réponse de tilab
MadM@tt 2215 Messages postés mardi 11 novembre 2003Date d'inscription 16 juillet 2009 Dernière intervention - 3 déc. 2007 à 23:48
0
Utile
Ah mince autant pour moi,

Alors la base de données, j'ai un peu de mal à trouver laquelle c'est, a vrai dire je suis dans mon école, donc j'ai un peu du mal à trouver des infos. Les fichiers sont en .dbf, je vois à des endroits "dBase", ou alors "ODBC", bref j'espère que y'avait la réponse la dedans .
Pour le champ NomPays, en fait j'ai ajouté un champ à la table Voyage qui contient IDPays, et en l'ajoutant je l'ai défini en tant que référence vers une colonne d'une autre table. En gros j'ai ajouté NomPays à Voyage, alors que NomPays est normalement dans la table Pays (une sorte de jointure quoi).

J'ai donc fait clic droit sur la table Voyage > Editeur de Champs > Nouveau champ > J'ai coché "référence" et rempli le formulaire pour faire la jointure.

- MadMatt -

 www.choisir-une-entreprise.com
Commenter la réponse de MadM@tt
MadM@tt 2215 Messages postés mardi 11 novembre 2003Date d'inscription 16 juillet 2009 Dernière intervention - 4 déc. 2007 à 00:08
0
Utile
Oui effectivement mais j'ai déjà essayé, et j'ai trouvé confirmation sur un site, en fait on ne peut pas faire de Locate sur un "champ référence" (un champ qui fait jointure avec une autre table). C'est bien *** lol, alors je ne vois qu'une solution : passer par un filtre sur la table . Si tu as une autre idée je suis preneur, en tout cas merci de ton aide

- MadMatt -

 www.choisir-une-entreprise.com
Commenter la réponse de MadM@tt
tilab 97 Messages postés mercredi 25 octobre 2006Date d'inscription 26 octobre 2009 Dernière intervention - 4 déc. 2007 à 00:31
0
Utile
Moi je préfère les query:

Select * from TableVoyage where NomPays like :Critères  + '%'

Alex
Commenter la réponse de tilab
cs_cantador 4996 Messages postés dimanche 26 février 2006Date d'inscription 27 mars 2018 Dernière intervention - 4 déc. 2007 à 19:58
0
Utile
C'est bien confus tout çà et surtout bcp trop précipité pour aboutir à qlqchose de bon..
Je sais pas ce que vous avez tous en ce moment mais c'est toujours :
dépêchez-vous, j'ai perdu mon boulot, ma femme s'est barrée ou je passe mon exam demain matin !

Bon, faire un locate sur un lookup... quelle drole d'idée ?
ben si on peut qd même mais c'est la méthode qui ne va pas..

Dans la table où est crée le lookup NOMPAYS il y a nécessairement le CODEPAYS et si ce dernier est unique, c'est lui qu'il faut utiliser..
Comment ? 
en utilisant un DBLookupComboBox(A part) et sur le choix du PAYS en clair (bien sûr et non le code) et sur le ONCLOSEUP on renvoie le CODE DU PAYS dans le locate :
du coup les SearchOptions peuvent être siupprimées :
DataModuleAgence.TableVoyage.Locate('CodePays',EditNomPays.Value,[]);
ce qui a pour effet de déplacer le pointeur sur l'enregistrement choisi.
@+

cantador
Commenter la réponse de cs_cantador
MadM@tt 2215 Messages postés mardi 11 novembre 2003Date d'inscription 16 juillet 2009 Dernière intervention - 4 déc. 2007 à 20:59
0
Utile
Bonjour,

Depuis près de 4 ans sur les forums Codes Sources, je commence à connaitre les règles et c'est la première fois ou j'ai taggé mon titre d'urgent, je ne fait pas ça à tout va.
Bref petite parenthèse à part, j'ai réussi à faire une sélection avec le nom de pays mais au prix d'un bidouillage très moche, que j'ai un peu fait à regret, mais qui est passé inaperçu pour les profs c'est déjà ça .

Sinon c'est pas pour autant qu'une solution correcte m'interesse pas, seulement j'ai du mal à saisir ce que tu m'expliques. Tu parle de faire entrer le nom du pays à part (dans une autre fenetre par exemple), d'en récupérer le numéro du pays et ensuite de faire un locate avec l'ID ?
Seulement comment tu "transforme" le nom du pays en ID du pays ? Le DBLookupComboBox pour moi ça modifie le nom du pays actuellement sélectionné dans la table non ?

(ce que j'ai fait dans mon devoir c'est une sélection par filtre dans la table Pays, j'en tire le numéro du Pays du premier enregistrement qui vient et je fais un locate avec ça sur le NomPays dans les voyages).

Merci

- MadMatt -

 www.choisir-une-entreprise.com
Commenter la réponse de MadM@tt
MadM@tt 2215 Messages postés mardi 11 novembre 2003Date d'inscription 16 juillet 2009 Dernière intervention - 5 déc. 2007 à 23:51
0
Utile
Ok merci c'est génial, effectivement je ne connaissais pas l'utilisation de ce composant sans préciser le datasource et le datafield.

Merci bien !

- MadMatt -

 www.choisir-une-entreprise.com
Commenter la réponse de MadM@tt

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.