Fórum Delphi 6 x DBExpress x Firebird 1.5 #243839

20/07/2004

0

Prezados Senhores,

Estou com um problema de um tamanho de um bonde. Tenho uma aplicação de controle de cobrança e a mesma como não poderia deixar de menos, tem uma rotina para gerar o movimento de cobrança de um determinado mês/ano.

O meu problema é: Após os cálculos de cobrança, todos os dados aparecem na tela e quando mando enviar para o servidor, com um bom [color=red:0b14b16ad1]cdsCobranca.ApplyUpdates(0); SQLConection.Commit(Transacao);[/color:0b14b16ad1]
onde:
[color=red:0b14b16ad1]...
var Transacao: TTransactionDesc;
...
with Transacao do begin
TransactionID := 1;
IsolationLevel := xilREADCOMMITTED;
end;
...[/color:0b14b16ad1]

Os dados não são efetivamente gravados em minha tabela COBRANCA. Enquanto que antes do período atual o sistema rodada corretamente.

Será que tem alguma alma que pode me socorrer???


PS: O ProviderFlags do meu TSQLDataSet estão corretos.



:arrow: [color=red:0b14b16ad1]Título alterado pelo Moderador oTTo. Removido: ´Me socorram!!!´[/color:0b14b16ad1]


Tinorj

Tinorj

Responder

Posts

20/07/2004

Vinicius2k

Colega,

Apenas vc poderá entender o que estah acontecendo, mas para isso precisa ver o que está acontecendo...

1 - Não se controla transações no dbExpress quando se faz uso de ClientDataSets... a própria Midas irá abrir a transação, realizar as operações e ´commitar´ a transação... esta transação q vc estah abrindo e commitando não é a mesma envolvida no ApplyUpdates no CDS.

2 - O método ApplyUpdates não gera exceção em caso de problemas... ele retorna o número de erros ocorridos durante a tentativa de aplicar no banco, então o primeiro passo é testar se ocorreu algum erro com :
if CDS.ApplyUpdates(0) = 0 then
    //não houve erro
  else // houve erro chame CDS.CancelUpdates, por exemplo

3 - Para saber qual, ou quais, erro(s) ocorreram no processo vc precisa trabalhar no evento OnReconcileError do CDS, por exemplo:
Action:= raCancel;
ShowMessage(E.Message);

Fazendo isso vc irá descobrir exatamente que erro está ocorrendo, se houver algum, e de posse da mensagem de retorno do banco poderá ajustar sua rotina para solucionar o problema.

Pessoalmente eu não uso métodos do CDS para situações de grande processamento como estas... Na sua posição eu controlaria explicitamente a transação, abrindo-a (como vc está fazendo), executaria diretamente as instruções SQL no servidor e ´commitaria´ se não houvessem exceções ou daria um Rollback em caso de problemas...
Quando vc tem duas operações, por exemplo a geração de uma N.F e seus títulos à receber, vc aplica os updates da N.F e tudo bem, não ocorrem erros, mas durante a aplicação dos títulos houve um erro... vc ficará com uma N.F sem títulos pois são CDS diferentes com transações diferentes... essa é minha opinião...

Espero ter ajudado...
T+


Responder

Gostei + 0

21/07/2004

Tinorj

Nobre Vinícius,

Com relação a criar a rotina diretamente via instruções SQL está transquilo, porém antes de eu realmente efetivar e executar das instruções, meu usuário precisa visualizar os dados e possa fazer modificações que ele ache necessário antes de enviar para o servidor.

O jeito é fazer na mão mesmo... Só que o mais engraçado é que nos dois meses anteriores funcionou perfeitamente, só agora no 3º mês começou a acontecer isso.

Mas mesmo assim valeu pela explicação sobre o funcionamento do MIDAS, pois estou usando essa tecnologia a pouco tempo... Antes eu era viciado em BDE, ninguém é perfeito...

[]´s :wink:

PS: POXA oTTo, por que vc tirou o ´Me socorram!!!´ do meu tópico? Era caso de urgência... Tá 3Kg, mas na próxima vez que isso acontecer, eu conto tudo pra minha mãe... 8)


Responder

Gostei + 0

21/07/2004

Vinicius2k

O jeito é fazer na mão mesmo... Só que o mais engraçado é que nos dois meses anteriores funcionou perfeitamente, só agora no 3º mês começou a acontecer isso.

Bem, não posso precisar o que estah ocorrendo, mas se utilizar o trabalho no OnReconcileError vc mesmo saberá pois estará vendo a mensagem de retorno do banco... eu me arriscaria a dizer que é uma violação de chave primária ou estrangeira, mas é só uma suposição...

T+


Responder

Gostei + 0

21/07/2004

Tinorj

Com certeza não há violação de chave primária... Mas numa outra oportunidade vou experimentar sua idéia...

Valeu Brow!!!


Responder

Gostei + 0

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

Aceitar