Как отправить виртуальное нажатие кнопки клавиатуры на TDBLookupComboBox или подобное?

Я должен преобразовать много Excell файлы (преобразованы в CSV) к макету базы данных моего приложения.

В моей таблице есть некоторые поля, которые используют внешние ключи для списков других таблиц, и когда мой код преобразования находит такое поле, у него нет внешнего идентификатора, но простой текст, напечатанный на Excell,

Я считаю, что на данный момент лучший подход - это вставить новую строку, TDBLookupComboBox поле, а затем отправлять сообщения через SO, чтобы имитировать, что я набираю текст. ComboBoxautocomplete Функция затем выберет правильный пункт в списке иностранных.

Если это лучший способ, как мне это сделать? Чтобы отправить эти сообщения с клавиатуры с помощью 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;
Другие вопросы по тегам