Delphi ne me laissera pas insérer des rangées avec des colonnes manquantes, mais avec des déclencheurs et des générateurs pour ces champs
-
14-11-2019 - |
Question
Le problème est simple: j'ai des déclencheurs et des générateurs dans ma base de données Firebird 2.1.4 pour effectuer une augmentation de la colonne automatique de chaque insert.
L'architecture du système est la suivante:
TSQLConnection > TSQLDataSet -> TDataSetProvider -> (DataSnap) -> TClientDataSet -> TDataSource
Cependant, si j'essaie de poster des mises à jour dans mon TCLientDataSet avec une colonne manquante, Delphi se plaindre comme ceci:
Field 'XXX' must have a value
Si j'utilise une instruction d'insertion SQL avec ces champs manquants, la ligne est insérée et les déclencheurs et les générateurs fonctionnent comme prévu.
Comment puis-je faire de Delphi (dbx, datasnap et telle) comprendre ce que j'essaie de le faire (et de le permettre)?
Fournir plus d'informations basées sur le commentaire de @ MJ2008: Ce TClientDaTaset est créé au moment de l'exécution, à l'aide de la méthode Clonecursor.Après avoir appelé le clonecursor, j'ai défini la propriété requise de ce champ sur FALSE.Cela n'aide pas avec ce problème.Exemple:
myCds.CloneCursor(otherCds, True);
myCds.FieldByName('XXX').Required := False;
Il en résulte la même exception étant lancée.
La solution
I had to set the TSQLDataset's Required property to False too. That solved the issue.
Autres conseils
Just to complement: when you do a TClientDataset setting, the updates are in the end sent to the data access component, in this case TSQLDataset, so even if the TClientdataset doesn't require the field's value, if the data access component requires it the error is raised.
It'll be the same even if data come from a TADODataset, TIbDataset, or whatever.