我目前正在测试以下内容:
- 一个指向IB数据库的SQLConnection。
- 一个SQLDataset,其SQLConnection字段设置为上述SQLConnection。
- 一个DatasetProvider,其Dataset字段值为(2)中的SQLDataset。
- 一个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仅填充一条记录。然而,当我手动编辑该记录,点击提交(Post),然后尝试使用某种方法提交更改时,
MainDM.ClientDataset1.ApplyUpdates(0); // <<<<<<
它崩溃了,显示“SQLDataset1: Cannot modify a read-only dataset.”(SQLDataset1:无法修改只读数据集)。
我已经检查了提供程序和客户端数据集的ReadOnly属性,并且SQL没有连接查询。
这个错误是什么原因引起的呢?