1

我正在尝试使用 TDBLookupCombo,但收到错误消息“带有消息‘LookupSource 必须连接到 TTable 组件’的 EInvalidOperation。

我将 TDBLookupCombo.LookupSource 连接到 TDataSource。TDataSource.Dataset 指向一个 TClientDataSet,其中包含查找表的记录(字段 ID 和描述)。

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

由于 TClentDataSet 不是 TTable 的后代,这是不可能的吗?如果是这样,那么不使用 3rd 方组件的最佳选择是什么。

4

2 回答 2

5

TDBLookupCombo是旧的基于 BDE 的数据控件之一,这就是它依赖于连接到TTable的原因。

看来您应该TDBLookupComboBox改用它,它可以很好地连接到连接到任何双向TDataSet后代(包括TClientDataSet)的TDataSource 。

于 2016-01-27T23:39:25.537 回答
1

查看代码...不,您不能这样做,下降到 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

于 2016-01-27T23:28:42.850 回答