如何将键盘虚拟按钮发送到TDBLookupComboBox或类似按钮?
问题描述:
我必须将许多Excell
文件(转换为CSV
)转换为我的应用程序的数据库布局。如何将键盘虚拟按钮发送到TDBLookupComboBox或类似按钮?
在我的表中有一些字段为其他表列表使用外键,当我的转换代码找到这样的字段时,它没有外部标识符,但在Excell
上键入的简单文本。
我发现目前最好的方法是插入一个新的行,重点是TDBLookupComboBox
字段,然后通过SO发送消息来模拟我输入文本。 ComboBox
autocomplete
功能将在外国列表中选择正确的项目。
如果这是最好的方法,我该怎么做?使用Delphi 2006和Firebird发送这些键盘消息?
答
而不是“模拟”一个用户,你应该做的是组件做的代码。它使用TDataSet.Locate方法来查找部分字符串并将DataSet游标设置为找到的记录。然后它使用查找源来获取值。
var
SearchString: string;
begin
SearchString := 'Dat';
if LookupDataSet.Locate('MySearchField', SearchString, [loCaseInsensitive, loPartialKey]) then
begin
DestDataSet.Edit;
DestDataSet.FieldByName('FLD_ID').AsInteger := LookupDataSet.FieldByName('FLD_ID').AsInteger;
// DestDataSet.Post;
end
else
raise Exception.CreateFmt('Lookup value not found for "%s"', [SearchString]);
end;
为什么您的用户界面与自动导入过程有任何关系?您不应该使用GUI组件的密钥处理来做这种事情 - 您应该自己在查询代码中进行查找。您可能必须在WHERE子句中使用'LIKE',但使用GUI控件的自动完成来找到匹配不是解决方案。 GUI控件应该用于**用户界面**(GUI的* UI *部分),而不是替代实际的查询功能。 – 2012-08-17 04:36:36
史诗不好主意。像这样的东西给了“Delphi程序员”一个坏名字。 – 2012-08-17 12:37:42
我必须同意肯和沃伦。当用作流量控制而不是用户界面时,模拟键击或鼠标点击是一个非常糟糕的解决方案。考虑一种替代设计。 – 2012-08-17 12:49:34