Question

Je cherche un moyen de fournir un ListSource à un TDBLookupComboBox en delphi sans avoir une table réelle sur le serveur de base de données pour établir cette liste à partir. DataField pour la zone de liste déroulante est un champ 1 caractère qui contient une valeur codée comme « A » = « Permis de conduire », « B » = « Passeport », « C » = « Bibliothèque Carte », etc. C'est-à-dire que la table ne contient que A, B ou C. l'application est responsable de l'affichage « permis de conduire » dans l'interface graphique. Normalement, une base de données pourrait avoir une table, mais cette base de données ne fonctionne pas et je ne peux pas en ajouter un. Mon idée est que le DataSource et ListSource pour un contrôle DB Look-up ne doivent pas être la même base de données, donc s'il était possible de définir une petite table dans ma forme qui contient les données de consultation alors je pourrais utiliser qu'une pas besoin d'une vraie table de base de données.

Quelqu'un sait-il d'un composant delphi qui permet à un TDataSet à définir sur un formulaire sans avoir des fichiers de données réelles derrière elle?

Était-ce utile?

La solution

Une autre solution consiste à utiliser TComboBox plutôt que TDBLookupComboBox. Utilisez un TDictionary pour définir une simple recherche de la mémoire.

type
  TMyForm = class(TForm)
    MyComboBox: TComboBox;
    MyDataset: TSimpleDataSet;
    procedure MyComboBoxChange(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  private
    ComboLookup: TDictionary<string, Char>;
  end;

implementation

{$R *.dfm}

procedure TMyForm.FormCreate(Sender: TObject);
var
  Key: string;
begin
  ComboLookup := TDictionary<string, Char>.Create;
  ComboLookup.Add('Drivers License', 'A');
  ComboLookup.Add('Passport', 'B');
  ComboLookup.Add('Library Card', 'C');
  for Key in ComboLookup.Keys do
  begin
    MyComboBox.Items.Add(Key);
  end;
end;

procedure TMyForm.MyComboBoxChange(Sender: TObject);
begin
  // This may be wrong didn't bother to look
  //up the correct way to change a field's value in code.
  MyDataset.Fields.FieldByName('IDCard').AsString := ComboLookup[MyComboBox.Text];
end;

Vous pouvez utiliser TComboBox.Items.AddObject au lieu d'une table de recherche distincte mais vous devez créer une classe d'emballage pour stocker un char comme un TObject ou utiliser Chr pour le convertir en un entier puis jeté à TObject mais ce qui précède est plus simple à mon avis.

Autres conseils

Je sais qu'il est différent ensemble de données en mémoire. Delphi est livré avec TClientDataSet, que vous pouvez utiliser comme vous le souhaitez. Vous devez déployer le midas.dll avec votre exécutable pour travailler, ou vous devez inclure la MidasLib dans votre clause uses afin de lier statiquement cette bibliothèque dans votre exécutable (pas midas.dll nécessaire à l'exécution).

Pour obtenir ce que vous voulez du TClientDataSet, vous pouvez créer des champs et:

  • stocker les enregistrements dans un fichier xml (par exemple avec un autre outil auxiliaire que vous avez fait). À la charge d'exécution des données avec la méthode LoadFromFile du TClientDataSet. En outre, vous pouvez stocker ce xml comme ressource avec la directive R $ et de manipuler cette ressource lors de l'exécution pour nourrir votre ClientDataSet avec les données contenues, pour empêcher le déploiement (et la modification possible) du fichier xml avec votre exe.
  • utilisez la méthode CreateDataSet et insérer / remplir des dossiers avec ce que vous voulez à l'exécution
code

Exemple:

procedure TFrom1.Init;
begin
  cdsIDType.CreateDataSet;
  cdsIDType.InsertRecord('A', 'Drivers License');
  cdsIDType.InsertRecord('B', 'Passport');
  //etcetera.
end;

Utiliser un TClientDataset et définir les champs, puis se connecter à une source de données. En cas oncreate du formulaire faire: exécuter la méthode CreateDataSet du ClientDataSet puis remplir avec l'A, B, C des données.

Si vous utilisez le JVCL , ce que vous voulez peut être accompli sans faire intervenir un ensemble de données. Il suffit d'utiliser un TjvDBComboBox, utilisez la propriété Items pour définir les valeurs que vous souhaitez que l'interface utilisateur à afficher et d'utiliser la propriété des valeurs pour définir les valeurs réelles stockées dans la base de données.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top