LookupSource должен быть подключен к компоненту TTable

Я пытаюсь использовать TDBLookupCombo, но получаю ошибку "EInvalidOperation с сообщением" LookupSource должен быть подключен к компоненту TTable ".

У меня есть TDBLookupCombo.LookupSource, подключенный к TDataSource. TDataSource.Dataset указывает на TClientDataSet, который содержит записи для таблицы поиска (ID полей и описание).

LookupDisplay := 'Description';
LookupField := 'ID';
LookupSource := dsLookup;

Это невозможно сделать, так как TCilentDataSet не является потомком TTable? Если так, то что будет лучшей альтернативой без использования сторонних компонентов.

2 ответа

Решение

TDBLookupCombo является одним из старых элементов управления данными на основе BDE, поэтому он зависит от подключения к TTable.

Кажется, вы должны использовать TDBLookupComboBox вместо этого, который отлично работает, подключенный к TDataSource, который подключен к любому двунаправленному потомку TDataSet (который включает TClientDataSet).

Глядя на код... Нет, вы не можете сделать это, опускается до TDataSet...TClientDataSet -> TCustomClientDataSet -> TDataSet

procedure TDBLookupList.SetLookupSource(Value: TDataSource);
begin
  if (Value <> nil) and ((Value = DataSource) or
    ((Value.DataSet <> nil) and (Value.DataSet = FFieldLink.DataSet))) then
    raise EInvalidOperation.Create(SLookupSourceError);
  if (Value <> nil) and (Value.DataSet <> nil) and
    not (Value.DataSet.InheritsFrom(TTable)) then
    raise EInvalidOperation.Create(SLookupTableError);
  inherited DataSource := Value;
  NewLayout;
end;

хммм... бесплатно... проверить компоненты джедая... может быть TJvDBLookupComboEdit

Другие вопросы по тегам