J'ai un dbLookupcombobox strong> câblé à une requête de base de données. Cette partie fonctionne bien. Lorsque j'exécute le programme, le dbLookupCombobox strong> est peuplé avec les résultats de la requête. J'aimerais voir la Également, si je charge un enregistrement de base de données précédemment enregistré qui avait sélectionné «Strong> Index 2« Élimination rapide » Strong> Comment obtiendrai-je la oui, "Veuillez sélectionner" strong> est index 0 et il est retraité dans le cadre de la requête. P> p>
5 Réponses :
Un moyen de faire cela serait d'ajouter "Veuillez sélectionner" à la table sous-jacente à partir duquel vous sélectionnez, où la touche de ce tuple serait 0. Ensuite, lorsque vous affichez le ComboBox et la valeur du champ connecté est 0, 'Veuillez sélectionner' serait affiché. Bien sûr, vous devez vous assurer que cette valeur n'est jamais sélectionnée! P>
Ensuite, vous devez vous assurer que les champs d'un nouvel enregistrement sont initialisés à la valeur 0 et non NULL.
Je suppose que la valeur du champ de table sous-jacente est nulle plutôt que zéro, qui indique à la DBCombobox qu'aucune valeur n'a encore été sélectionnée et s'affiche en conséquence. P>
Si la valeur dans la table était nulle, je pense que le texte dans le champ d'édition du combo serait sélectionné pour indiquer que, mais je me souviendrai de cela de manière incorrecte. P>
Quoi qu'il en soit, vérifiez simplement le champ1.isnull (ou Isempty), puis la définir à zéro. Cela signifie que vous ne pouvez plus distinguer entre une "valeur inconnue" (null) et "aucune valeur sélectionnée" (zéro), à moins que vous n'empêchez la valeur zéro de la rendant dans la table ... P>
Cela fait un sens parfait. Je suis parti de la programmation Delphes depuis un certain temps (plus de 8 ans) et j'ai passé la majeure partie de ma programmation Web de mon temps. Lorsque j'ai démarré une programmation Web, je me souviens d'être très frustré jusqu'à ce que j'ai bien compris le concept d'un environnement apatride. Maintenant, je suis de retour à Delphi et je suis frustré parce que j'essaie d'utiliser un "style de codage apatride" aux dbcontrols qui ne sont pas apatrides.
@Cape: Wellcome retour à Delphi. J'espère que ce n'est pas toute la frustration pour vous et il y a au moins deux "Oh ouais!"
Je viens d'avoir un de ces "oh ouais!" des moments. J'ai acheté le nouveau livre Cary Jensens "Delphi en profondeur: Cliendatasets" et ont porté ses exemples de BDE-DBDemos sur l'accès MS et d'apprendre beaucoup. ClientDatasets a beaucoup d'utilité. Lorsque je me fais faire avec le portage pour accéder, j'essaie d'essayer de porter à Elevatebb.
Le Un moyen de contourner cela consiste à ajouter la valeur null à l'ensemble de données derrière le Maintenant, pour assurer ce jeu de données spécial n'est disponible que lorsque vous ajoutez un nouvel enregistrement à l'ensemble de données associé au DataSource code>, gérez la requête pour dbLookupcombobox code> Affiche par défaut le (s)
listfield (s) code> dont
Keyfield code> dans le
listSource code> correspond au
Datafield code> dans le
DataSource code>. Donc, pour vous assurer d'afficher une certaine valeur pour le
datafield code> étant NULL, vous devez fournir un
Keyfield code> de NULL dans le
listSource code>. Mais on pourrait imaginer ne pas vouloir une valeur nulle dans la table de sous-couche associée au
listSource code>. P>
listSource code> avec un "code> Union SELECT code>. Cela devrait fonctionner très bien, puisque cet ensemble de données n'a pas besoin d'être éditable. P>
listSource.dataset code>
datasource.onstatechange code>. Lorsque
datasource.state = dsinsert code>, puis mettez à jour
listSource.dataset code>. P>
Vous pouvez essayer ceci (je sais que vous l'avez probablement résolu maintenant, comme vous l'avez posé plus de 2 ans), mais au cas où quelqu'un d'autre était intéressé ...
dbluLookup.KeyValue := dbluLookup.ListSource.DataSet.FieldByName(dbluLookup.KeyField).Value;
Modification pour Steve Childs Répondre dans TwwdblookUpombo, composant InfoPower
cboFilterTravel1.LookupValue := cboFilterTravel1.LookupTable.FieldByName(cboFilterTravel1.LookupField).Value;