LookupSource 必须连接到 TTable 组件

LookupSource must be connected to TTable component

我正在尝试使用 TDBLookupCombo,但收到错误消息“EInvalidOperation with message 'LookupSource must be connected to TTable component'。

我已将 TDBLookupCombo.LookupSource 连接到 TDataSource。 TDataSource.Dataset 指向包含查找记录的 TClientDataSet table(字段 ID 和描述)。

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

这不可能吗,因为 TCilentDataSet 不是 TTable 的后代?如果是这样,那么不使用第 3 方组件的最佳替代方案是什么。

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

嗯...免费...查看 Jedi 组件...也许是 TJvDBLookupComboEdit

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

看来您应该改用 TDBLookupComboBox,它可以很好地连接到 TDataSource,后者附加到任何 bi-directional TDataSet 后代(包括 TClientDataSet)。