MadM@tt
Messages postés2167Date d'inscriptionmardi 11 novembre 2003StatutMembreDernière intervention16 juillet 2009
-
3 déc. 2007 à 20:34
MadM@tt
Messages postés2167Date d'inscriptionmardi 11 novembre 2003StatutMembreDernière intervention16 juillet 2009
-
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
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.
cs_cantador
Messages postés4720Date d'inscriptiondimanche 26 février 2006StatutModérateurDernière intervention31 juillet 202113 5 déc. 2007 à 12:09
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é..
MadM@tt
Messages postés2167Date d'inscriptionmardi 11 novembre 2003StatutMembreDernière intervention16 juillet 20091 3 déc. 2007 à 23:38
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 ^^
MadM@tt
Messages postés2167Date d'inscriptionmardi 11 novembre 2003StatutMembreDernière intervention16 juillet 20091 3 déc. 2007 à 23:48
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.
MadM@tt
Messages postés2167Date d'inscriptionmardi 11 novembre 2003StatutMembreDernière intervention16 juillet 20091 4 déc. 2007 à 00:08
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
cs_cantador
Messages postés4720Date d'inscriptiondimanche 26 février 2006StatutModérateurDernière intervention31 juillet 202113 4 déc. 2007 à 19:58
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.
@+
MadM@tt
Messages postés2167Date d'inscriptionmardi 11 novembre 2003StatutMembreDernière intervention16 juillet 20091 4 déc. 2007 à 20:59
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).