Я в настоящее время тестирования с:Delphi ClientDataSet только для чтения
- SQLConnection, который направлен в сторону базы данных IB.
- SQLDataset, который имеет поле SQLConnection, установленное выше.
- DatasetProvider, который имеет SQLDataset в (2) в качестве значения поля Dataset.
- ClientDataset с полем ProviderName, указывающим на провайдера в (3).
Я использую следующий метод (заимствованный из Алистера Кристи), чтобы получить данные ...
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); // <<<<<<
It бомбы, с сообщением «SQLDataset1: Невозможно изменить только для чтения набора данных.»
Я проверил свойство ReadOnly Провайдера и ClientDataset, а SQL не имеет объединений.
Что может быть причиной ошибки?
Как открыть ClientDataSet? Метод GetCurrEmployee использует только SQLDataSet. – mjn
В ответ на mjustin, когда свойство DataSetProvider назначено ClientDataSet, ClientDataSet будет активным (он будет иметь метаданные в дополнение к любым данным, содержащимся в свойстве Data). Активный ClientDataSet открыт. –