我正在尝试使用 TDBLookupCombo,但收到错误"EInvalidOperation",并显示消息"LookupSource 必须连接到 TTable 组件"。
我有 TDBLookupCombo.LookupSource 连接到 TDataSource。TDataSource.Dataset指向一个TClientDataSet,其中包含查找表的记录(字段ID和说明)。
LookupDisplay := 'Description';
LookupField := 'ID';
LookupSource := dsLookup;
这是不可能的,因为 TCilentDataSet 不是 TTable 的后代吗?如果是这样,那么不使用 3rd 方组件的最佳选择是什么。
TDBLookupCombo 是基于 BDE 的旧数据控件之一,这就是为什么它依赖于连接到 TTable。
似乎您应该改用TDBLookupComboBox
,它可以很好地连接到连接到任何双向 TDataSet 后代(包括 TClientDataSet)的 TDataSource。
查看代码...不,你不能那样做,下降到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