6
votes

Comment puis-je obtenir l'élément approprié dans un Delphi dbLookupCombobox à sélectionner

J'ai un dbLookupcombobox câblé à une requête de base de données. Cette partie fonctionne bien. Lorsque j'exécute le programme, le dbLookupCombobox est peuplé avec les résultats de la requête. J'aimerais voir la dbLookupcombobox peuplée avec le premier élément "Veuillez sélectionner" lorsque le programme est d'abord exécuté ou quand un Une nouvelle action d'article est initiée . (Voir ci-dessous image)

Entrez la description de l'image ici

Également, si je charge un enregistrement de base de données précédemment enregistré qui avait sélectionné «Strong> Index 2« Élimination rapide » Comment obtiendrai-je la dbLookupcombobox pour afficher cette entrée sélectionnée?

oui, "Veuillez sélectionner" est index 0 et il est retraité dans le cadre de la requête.


0 commentaires

5 Réponses :


1
votes

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!


1 commentaires

Ensuite, vous devez vous assurer que les champs d'un nouvel enregistrement sont initialisés à la valeur 0 et non NULL.



1
votes

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.

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.

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 ...


3 commentaires

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.



1
votes

Le dbLookupcombobox Affiche par défaut le (s) listfield (s) dont Keyfield dans le listSource correspond au Datafield dans le DataSource . Donc, pour vous assurer d'afficher une certaine valeur pour le datafield étant NULL, vous devez fournir un Keyfield de NULL dans le listSource . Mais on pourrait imaginer ne pas vouloir une valeur nulle dans la table de sous-couche associée au listSource .

Un moyen de contourner cela consiste à ajouter la valeur null à l'ensemble de données derrière le listSource avec un "code> Union SELECT . Cela devrait fonctionner très bien, puisque cet ensemble de données n'a pas besoin d'être éditable.

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 , gérez la requête pour listSource.dataset datasource.onstatechange . Lorsque datasource.state = dsinsert , puis mettez à jour listSource.dataset .


0 commentaires

9
votes

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;


0 commentaires

0
votes

Modification pour Steve Childs Répondre dans TwwdblookUpombo, composant InfoPower

cboFilterTravel1.LookupValue := cboFilterTravel1.LookupTable.FieldByName(cboFilterTravel1.LookupField).Value;


0 commentaires