Delphi 如何使用非列表值实现TDataSet绑定的组合框

Delphi 如何使用非列表值实现TDataSet绑定的组合框,delphi,combobox,dataset,delphi-xe4,Delphi,Combobox,Dataset,Delphi Xe4,我需要实现一个combobox,它绑定到TDataSet的TpFIBDataSet子体。我以前做过好几次。如果它只包含预定义的值,那就不是什么大事 这一次,我希望有一个组合框,它接受用户输入的自定义值,还允许用户选择一些预定义的值。在发布组合框字段所属的记录之前,应将新输入的值插入数据库的某些表中 在我看来,主要的问题是预定义值在内部表示为整数ID。我使用的组合框是Roy Woll的InfoPower软件包中的TwwDBComboBox,因为它实现了映射列表功能,因为字段是外键,而自定义值可能几

我需要实现一个combobox,它绑定到TDataSet的TpFIBDataSet子体。我以前做过好几次。如果它只包含预定义的值,那就不是什么大事

这一次,我希望有一个组合框,它接受用户输入的自定义值,还允许用户选择一些预定义的值。在发布组合框字段所属的记录之前,应将新输入的值插入数据库的某些表中

在我看来,主要的问题是预定义值在内部表示为整数ID。我使用的组合框是Roy Woll的InfoPower软件包中的TwwDBComboBox,因为它实现了映射列表功能,因为字段是外键,而自定义值可能几乎是仅受掩码限制的所有内容。 例如,如何区分整数ID和整数用户输入

请参见组合框的设置属性:

AComboBox.Style   := csDropDown;
AComboBox.MapList := True;
我不要求解决方案,因为我会接受这段代码并感到高兴。我在寻找其他可能有或有类似问题的人的建议

例如,如何区分整数ID和整数用户输入

你回到数据库。或者直接从id=ComboBoxId的表中选择count*。 或者使用数据集的Locate方法。 或者将缓存放在MyList:TList中,然后执行MyList.BinarySearch以查看该项是否已在数据库中。 显然,只有当数据库是单用户时,缓存才会工作,否则您将无法使其保持最新

如果它不在数据库中,则运行insert查询。
插入后,运行默认的组合框行为,因为现在这些值肯定在数据库中

如果用户输入是一个整数值,它已经在内部用作另一个整数值的ID,该怎么办?