DBExpress URGENTE !!!!!
Olá amigos, eu utilizo SQLDataSet + DataSetProvider + ClientDataSet
e estou com o seguinte problema. Se no commnadtext do SQLDataSet eu tiver um SQL do tipo
SELECT PED.PED_NUMERO, PED.PED_DATA, (SELECT SUM(PI.PEDITENS_PRECO * PI.PEDITENS_QTDE) FROM PEDITENS PI WHERE PI.PEDINTES_NUMERO = PED.PED_NUMERO) TOTAL FROM PEDIDO PED
dá erro na hora de gravar os dados. Eu notei pelo SQLMonitor que ele está tentado dar um INSERT ou UPDATE na tabela PEDITENS e não na PEDIDO, alguém saberia como solucionar este problema ?!? é só propriedade de algum dos componentes ou DBExpress não aceita mesmo ???
Obrigado a todos e sucesso !!!!
e estou com o seguinte problema. Se no commnadtext do SQLDataSet eu tiver um SQL do tipo
SELECT PED.PED_NUMERO, PED.PED_DATA, (SELECT SUM(PI.PEDITENS_PRECO * PI.PEDITENS_QTDE) FROM PEDITENS PI WHERE PI.PEDINTES_NUMERO = PED.PED_NUMERO) TOTAL FROM PEDIDO PED
dá erro na hora de gravar os dados. Eu notei pelo SQLMonitor que ele está tentado dar um INSERT ou UPDATE na tabela PEDITENS e não na PEDIDO, alguém saberia como solucionar este problema ?!? é só propriedade de algum dos componentes ou DBExpress não aceita mesmo ???
Obrigado a todos e sucesso !!!!
Renatobraun
Curtidas 0
Respostas
Fred
07/07/2003
de um duplo clique no sqldataset, acrescente os field se nao tiver feito e mude a propriedade providerflags de todos os field (menos da chave primaria da tabela para==> inwhere = false; agora mude do campo chave inkey = true; e por final mude inupdate = false para os campos que nao pertencem a tabela(portando nao serao atualizados o inseridos)
mude tambem a propriedade updatemode do datasetprovider para upWhereKeyOnly 8)
mude tambem a propriedade updatemode do datasetprovider para upWhereKeyOnly 8)
GOSTEI 0
Renatobraun
07/07/2003
Obrigado pela dicas mas ainda não deu certo. Verifiquei pelo SQL monitor e o comando q continua sendo executado para inclusão e alteração é na tabela detalhe ( tabela que eu utilizo apenas para somar o total ).
Obrigado e sucesso a todos !!!
Obrigado e sucesso a todos !!!
GOSTEI 0
Fred
07/07/2003
Tem que dar certo!
Usando os componentes.
1) fazer o select no sqldaset (mas nao ative-o, ele sempre fechado!!)
2) ligar o datasetprovider no sqldataset e mude a propriedade updatemode como acima
3) ligar a propriedade providername do clientdataset no provider
4) abra o fields editor do sqldataset e acrescente os campos, mude o providerflags dos campos (menos a chave) inwhere = false, mude da chave inkey= true e dos campos que nao pertecen a tabela em questao inupdate = false (nao ative o sqldataset)
5) clique com o botao direito sobre o clientdataset e escolha Fetch Params
6) acrescente os campos no fields editor do cliente dataset (se quiser mude os display label de cada campo)
7) ative o clientdataset e pronto tem que funcionar.
Obs o post, insert, delete, applyupdates deve ser feito no ClientDataset
se nao funcionar talves seu sql esteja causando o problema, eu tenho varios programas aqui usando join para trazer dados de outras tabelas e na hora de gravar esta funcionando perfeitamente 8) .
Usando os componentes.
1) fazer o select no sqldaset (mas nao ative-o, ele sempre fechado!!)
2) ligar o datasetprovider no sqldataset e mude a propriedade updatemode como acima
3) ligar a propriedade providername do clientdataset no provider
4) abra o fields editor do sqldataset e acrescente os campos, mude o providerflags dos campos (menos a chave) inwhere = false, mude da chave inkey= true e dos campos que nao pertecen a tabela em questao inupdate = false (nao ative o sqldataset)
5) clique com o botao direito sobre o clientdataset e escolha Fetch Params
6) acrescente os campos no fields editor do cliente dataset (se quiser mude os display label de cada campo)
7) ative o clientdataset e pronto tem que funcionar.
Obs o post, insert, delete, applyupdates deve ser feito no ClientDataset
se nao funcionar talves seu sql esteja causando o problema, eu tenho varios programas aqui usando join para trazer dados de outras tabelas e na hora de gravar esta funcionando perfeitamente 8) .
GOSTEI 0
Renatobraun
07/07/2003
Agradeço a ajuda e a atenção, mas o problema não está nos join´s e sim no select de soma dos itens detalhes, não sei pq o DataSetProvider tenta atulizar a tabela detalhe e não a mestre.
OBS: Veja o q me disseram em outro site, vou fazer um teste, mas fica o comentário para futuras dúvida:
´No registro mestre vc. quer guardar a soma de valores que estão no
detalhe, certo ?
Como vc. está usando ClientDataSet, vc. deve nesse caso utilizar o
conceito de AggregateField. O campo ´aggregate´ vc. cria e o mesmo
será montado via uma expressão algébrica que vc. define (SUM,AVG,MAX,
etc...).
No seu caso ele será a somatória dos valores dos itens detalhe.
Esse campo ´aggregate´ pode ser utilizado para atualizar o mestre
(sem precisar fazer selects, etc...).
´
OBS: Veja o q me disseram em outro site, vou fazer um teste, mas fica o comentário para futuras dúvida:
´No registro mestre vc. quer guardar a soma de valores que estão no
detalhe, certo ?
Como vc. está usando ClientDataSet, vc. deve nesse caso utilizar o
conceito de AggregateField. O campo ´aggregate´ vc. cria e o mesmo
será montado via uma expressão algébrica que vc. define (SUM,AVG,MAX,
etc...).
No seu caso ele será a somatória dos valores dos itens detalhe.
Esse campo ´aggregate´ pode ser utilizado para atualizar o mestre
(sem precisar fazer selects, etc...).
´
GOSTEI 0