【发布时间】:2009-03-17 08:01:31
【问题描述】:
我目前正在测试:
- 指向 IB 数据库的 SQLConnection。
- SQLConnection 字段设置为上述字段的 SQLDataset。
- 以 (2) 中的 SQLDataset 作为其 Dataset 字段值的 DatasetProvider。
- 一个 ClientDataset,其中 ProviderName 字段指向 (3) 中的提供者。
我使用下面的方法(借自Alister Christie)来获取数据...
function TForm1.GetCurrEmployee(const IEmployeeID: integer): OleVariant;
const
SQLSELEMP = 'SELECT E.* FROM EMPLOYEE E WHERE E.EMPLOYEEID = %s';
begin
MainDM.SQLDataset1.CommandText := Format(SQLSELEMP, [Edit1.Text]);
Result := MainDM.DataSetProvider1.Data;
end;
仅使用一条记录填充 DBGrid。但是,当我手动编辑记录时,单击发布,然后尝试提交更改,使用
MainDM.ClientDataset1.ApplyUpdates(0); // <<<<<<
它会爆炸,并显示消息“SQLDataset1:无法修改只读数据集。”
我检查了 Provider 和 ClientDataset 的 ReadOnly 属性,并且 SQL 没有连接。
什么可能导致错误?
【问题讨论】:
-
如何打开ClientDataSet? GetCurrEmployee 方法只使用 SQLDataSet。
-
响应 mjustin,当将 DataSetProvider 的 Data 属性分配给 ClientDataSet 时,ClientDataSet 将处于活动状态(除了 Data 属性中包含的任何数据之外,它还将具有元数据)。一个活动的 ClientDataSet 已打开。
标签: delphi delphi-2007 readonly