Как отправить виртуальное нажатие кнопки клавиатуры на TDBLookupComboBox или подобное?
Я должен преобразовать много Excell
файлы (преобразованы в CSV
) к макету базы данных моего приложения.
В моей таблице есть некоторые поля, которые используют внешние ключи для списков других таблиц, и когда мой код преобразования находит такое поле, у него нет внешнего идентификатора, но простой текст, напечатанный на Excell
,
Я считаю, что на данный момент лучший подход - это вставить новую строку, TDBLookupComboBox
поле, а затем отправлять сообщения через SO, чтобы имитировать, что я набираю текст. ComboBox
autocomplete
Функция затем выберет правильный пункт в списке иностранных.
Если это лучший способ, как мне это сделать? Чтобы отправить эти сообщения с клавиатуры с помощью Delphi 2006 и Firebird?
1 ответ
Вместо того, чтобы "эмулировать" пользователя, вы должны делать то, что компонент делает с помощью кода. Он использует метод 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;