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