Je teste actuellement avec:Delphi ClientDataSet en lecture seule
- Un SQLConnection qui est dirigée vers une base de données IB.
- Un jeu de données SQL dont le champ SQLConnection est défini sur celui défini ci-dessus.
- DatasetProvider dont le champ SQLDataset figure dans (2) en tant que valeur de champ Dataset.
- ClientDataset, avec le champ ProviderName pointant vers le fournisseur dans (3).
J'utilise la méthode suivante (empruntée à Alister Christie) pour obtenir les données ...
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;
Ce qui renseigne le DBGrid avec un seul enregistrement. Cependant, quand je modifier manuellement l'enregistrement, cliquez sur Post, puis essayez de valider les modifications, en utilisant
MainDM.ClientDataset1.ApplyUpdates(0); // <<<<<<
Il bombes, avec le message « SQLDataSet1: Impossible de modifier un ensemble de données en lecture seule. »
J'ai vérifié la propriété ReadOnly du fournisseur et de ClientDataset, et le SQL n'a pas de jointures.
Quelle pourrait être l'origine de l'erreur?
Comment ouvrir le ClientDataSet? La méthode GetCurrEmployee utilise uniquement le SQLDataSet. – mjn
En réponse à mjustin, lorsque la propriété Data d'un DataSetProvider est assignée à ClientDataSet, le ClientDataSet sera actif (il aura des métadonnées en plus des données contenues dans la propriété Data). Un ClientDataSet actif est ouvert. –