Delphi não deixe-me inserir linhas com colunas em falta, mas com gatilhos e geradores para os campos
-
14-11-2019 - |
Pergunta
O problema é simples:Eu tenho dispara e geradores em meu Firebird 2.1.4 banco de dados para fazer uma coluna de auto incremento em cada pastilha.
A arquitetura do sistema é o seguinte:
TSQLConnection > TSQLDataSet -> TDataSetProvider -> (DataSnap) -> TClientDataSet -> TDataSource
No entanto, se eu tentar Postar atualizações no meu TClientDataSet com alguma falta de coluna, Delphi vai reclamar como este:
Field 'XXX' must have a value
Se eu usar uma instrução SQL insert com os campos em falta, a linha é inserido e o aciona e geradores funciona conforme o esperado.
Como eu faço Delphi (DBX, DataSnap e tal) entender o que eu estou tentando fazer (e permitir)?
EDITAR
O fornecimento de mais informações com base no @mj2008 do comentário:este TClientDataSet está sendo criado em tempo de execução, usando o CloneCursor método.Depois de chamar o CloneCursor, eu definir esta propriedade do campo Necessário para False.Ele não ajuda com esse problema.Exemplo:
myCds.CloneCursor(otherCds, True);
myCds.FieldByName('XXX').Required := False;
Isto resulta na mesma exceção sendo lançada.
Solução
Eu tinha que definir o TSQLDataset propriedade Requerido para Falso também.Isso resolveu o problema.
Outras dicas
Apenas para complementar:quando você fizer uma TClientDataset definição, as atualizações são enviadas para o componente de acesso a dados, neste caso TSQLDataset, então, mesmo se o TClientdataset não exige que o valor do campo, se o componente de acesso de dados requer que o erro é gerado.
Vai ser a mesma, mesmo se os dados vêm de uma TADODataset, TIbDataset, ou seja o que for.