Fórum ClientDataSet apontando para IBDataSet com trigger #255621

22/10/2004

0

Olá! Tenho uma tabela com a seguinte estrutura:

CODIGO INTEGER NOT NULL
DESCRICAO VARCHAR(40)
...
CONTRAINT "PK_PROD" PRIMARY KEY("CODIGO")


Tenho um trigger nessa tabela que preenche o campo código pelo valor de um generator. Coloquei um IBDataSet apontando para essa tabela. Como KeyField coloquei o campo código e como UpdatedFields coloquei os outros menos o campo código afinal o trigger vai preenchê-lo para mim. Gerei as SQLs. Depois coloquei um DataSetProvider apontando para o IBDataSet e um ClientDataSet apontando para o DataSetProvider. Acontece que todo o processo de inserção de dados é feito em cima do ClientDataSet e quando eu chamo o ApplyUpdates ele dá erro no ´PK_PROD´.

Observação 1: Depois de Gerar as SQLs no IBDataSet eu adicionei os TFields no FieldsEditor tanto do IBDataSet quanto do ClientDataSet.

Observação 2: Percebi que quando esse tipo de ligação é feita basta chamar o método Open do ClientDataSet que os dados da tabela são carregados (sem precisar chamar o ´Open´ do IBDataSet. Isso é o modo correto de se fazer? Atualmente estou fazendo desse jeito mesmo.

Valeu! Até!


Delphi32

Delphi32

Responder

Posts

22/10/2004

Vinicius2k

Colega,

Em uma camada de acesso usada em conjunto com a Midas (Provider+CDS), o DataSet desta camada só precisa* conter a instrução SELECT, todo o resto é controlado pela própria Midas que interage com o DataSet realizando todas as operações...
* na verdade nem o SELECT é estritamente necessário... se a propriedade Options -> poAllowCommandText for setada para True, a instrução SELECT pode estar no próprio CommandText do CDS. Particularmente, não utilizo-me deste recurso, preferindo a instrução SELECT e manipulação dos parametros no DataSet.

Nesta ligação NADA deve ser realizado diretamente no DataSet, como o Open que vc citou... vc deve restringir a aplicação dos métodos sobre o CDS.

Nunca utilizei, em produção, IBX em conjunto com a Midas, mas se esta regra é válida tanto para dbExpress e ADO (com os quais trabalho com a Midas), não creio que haja diferença em relação ao IBX.

No seu caso específico, quando valor de uma coluna é dado pelo próprio SGBD através de uma trigger, basta que vc configure a propriedade [b:b452d50c63]Required[/b:b452d50c63] do TField (tanto no DataSet quanto no CDS) para [b:b452d50c63]False[/b:b452d50c63].

Espero ter ajudado.
T+


Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar