我正在寻找一种提供Delphi中TDBlookupCombobox的列表资源的方法,而没有在数据库服务器上使用实际表格以从列表中绘制该列表。组合框的数据场是一个1个字符字段,其中包含一个编码值,例如'a'='drivers许可证','b'='passport','c'=“库卡”等。该表仅包含A,B或C。该应用程序负责在GUI中显示“驾驶执照”。通常,数据库可能有一个查找表,但是该数据库没有,我不能添加一个。我的想法是,数据库查找控件的数据源和列表源不一定是同一数据库,因此,如果可以在我的表单中定义包含查找数据的小表格,那么我可以使用它不需要真实的数据库表。

有谁知道允许在表单上定义tdataset而没有任何实际数据文件的Delphi组件?

有帮助吗?

解决方案

另一种解决方案是使用Tcombobox而不是TDBlookupCombobox。使用tdictionary定义简单的内存查找。

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;

您可以使用tcombobox.items.addobject代替单独的查找表我认为更简单。

其他提示

我知道有不同的内存数据集。 Delphi带有TCLIENTDATASET,您可以使用所需的方式。您必须使用可执行文件部署MIDAS.DLL才能工作,或者必须将Midaslib包含在您的使用条款中,才能在可执行文件中静态地链接此库(在运行时不需要MIDAS.DLL)。

为了从TCLIENTDATASET获得想要的东西,您可以创建字段,并且:

  • 将记录存储在XML文件中(例如,使用您制作的另一个辅助工具)。在运行时,加载数据使用TCLIENTDATASET的LOADFROMFILE方法。此外,您可以将此XML存储为使用$ R指令的资源,并在运行时操纵此资源,以使用包含的数据为您的客户端喂食您的客户端,以防止使用EXE对XML文件的部署(以及可能的修改)。
  • 使用创建的方法,并在运行时插入/填充记录

代码样本:

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

使用tclientdataset并定义字段,然后连接到数据源。在表单的发行事件中,执行以下操作:执行客户端dataset的创建方法,然后用A,B,C数据填充它。

如果您使用 JVCL, ,如果不涉及数据集,就可以完成您想要的。只需使用tjvdbcombobox,使用项目属性设置您要显示的值,并使用值属性来设置存储在数据库中的实际值。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top