ActiveDelphi - Índice do Fórum ActiveDelphi
.: O site do programador Delphi! :.
 
 FAQFAQ   PesquisarPesquisar   MembrosMembros   GruposGrupos   RegistrarRegistrar 
 PerfilPerfil   Entrar e ver Mensagens ParticularesEntrar e ver Mensagens Particulares   EntrarEntrar 

Ajuda com Update

 
Novo Tópico   Responder Mensagem    ActiveDelphi - Índice do Fórum -> Banco de Dados
Exibir mensagem anterior :: Exibir próxima mensagem  
Autor Mensagem
Victor_Pinguim
Novato
Novato


Registrado: Segunda-Feira, 3 de Mai de 2010
Mensagens: 1

MensagemEnviada: Seg Mai 03, 2010 2:58 pm    Assunto: Ajuda com Update Responder com Citação

OLÁ GALERA!!! BLZ??

Estou com um problema em relação à sintaxe de um update.

No banco de Dados que estou trabalhando (utilizo o Apollo) existe a tabela B_MOV. Entre seus campos estão:
N_DOCTO --- STRING [Chave Primária]
ORDEM --- STRING [este campo é utilizado como integer, portanto quando for chamado será utilizado o CAST para convertê-lo]
DATA --- DATE
SALDO --- NUMERIC
VALOR --- NUMERIC

Antes de falar do update em si, é preciso entender o funcionamento dos campos DATA e ORDEM:
O campo DATA com o mesmo registro repete-se indefinidamente (ou seja, pode – e provavelmente haverá – datas iguais). ORDEM é configurado a partir do campo DATA; assim sendo, caso existam dez datas iguais ORDEM terá valores variando de 1 a 10 (para esta data). Caso o número de datas seja 1, ORDEM terá apenas o valor 1 (para esta data). Portanto os campos DATA + ORDEM formam registros sem repetição (semelhante a uma PK).

No update, o SALDO deve ser calculado utilizando a seguinte expressão:
SALDO = SALDO {dia anterior*} – VALOR {dia de hoje}
*Saldo anterior deve obedecer a seguinte condição:
Se max(ORDEM) – 1 = 0 então
SALDO = SALDO onde DATA = (DATA – 1) e Max(ORDEM) \\\ sendo este ordem o máximo do dia anterior
Senão
SALDO = SALDO onde ORDEM = (ORDEM – 1)

E é esse carinha que eu não consigo fazer... Já tentei de várias formas, busquei ajuda na net e falei com colegas de trabalho, mas ninguém soube me dar uma resposta

É um código complexo. Pelo o que testei será necessário utilizar a condição IF no where e select dentro do update (update b_mov set [campo] = (SELECT...)).
Se alguém souber de algo por favor me dá uma mãozinha.

Vlw povo! Abraços!
Very Happy Very Happy Very Happy
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular Enviar E-mail
BrunoMoreyra
Colaborador
Colaborador


Registrado: Quinta-Feira, 26 de Novembro de 2009
Mensagens: 1398
Localização: Goiânia - GO / Brasília - DF

MensagemEnviada: Ter Mai 04, 2010 6:40 pm    Assunto: Re: Ajuda com Update Responder com Citação

Boa noite,

Creio que fique mais ou menos assim.

Buscando um registro, e caso não retorne nada (NULO), preencherá com 0 (zero).

Código:

UPDATE B_MOV B1 SET SALDO = NVL(SELECT SALDO
                                                           FROM B_MOV B2
                                                         WHERE B1.DATA = B2.DATA
                                                             AND B1.ORDEM = (B2.ORDEM - 1),0) - VALOR
 WHERE DATA = :DATA
     AND ORDEM = :ORDEM                                                     


Victor_Pinguim escreveu:
OLÁ GALERA!!! BLZ??

Estou com um problema em relação à sintaxe de um update.

No banco de Dados que estou trabalhando (utilizo o Apollo) existe a tabela B_MOV. Entre seus campos estão:
N_DOCTO --- STRING [Chave Primária]
ORDEM --- STRING [este campo é utilizado como integer, portanto quando for chamado será utilizado o CAST para convertê-lo]
DATA --- DATE
SALDO --- NUMERIC
VALOR --- NUMERIC

Antes de falar do update em si, é preciso entender o funcionamento dos campos DATA e ORDEM:
O campo DATA com o mesmo registro repete-se indefinidamente (ou seja, pode – e provavelmente haverá – datas iguais). ORDEM é configurado a partir do campo DATA; assim sendo, caso existam dez datas iguais ORDEM terá valores variando de 1 a 10 (para esta data). Caso o número de datas seja 1, ORDEM terá apenas o valor 1 (para esta data). Portanto os campos DATA + ORDEM formam registros sem repetição (semelhante a uma PK).

No update, o SALDO deve ser calculado utilizando a seguinte expressão:
SALDO = SALDO {dia anterior*} – VALOR {dia de hoje}
*Saldo anterior deve obedecer a seguinte condição:
Se max(ORDEM) – 1 = 0 então
SALDO = SALDO onde DATA = (DATA – 1) e Max(ORDEM) \\\ sendo este ordem o máximo do dia anterior
Senão
SALDO = SALDO onde ORDEM = (ORDEM – 1)

E é esse carinha que eu não consigo fazer... Já tentei de várias formas, busquei ajuda na net e falei com colegas de trabalho, mas ninguém soube me dar uma resposta

É um código complexo. Pelo o que testei será necessário utilizar a condição IF no where e select dentro do update (update b_mov set [campo] = (SELECT...)).
Se alguém souber de algo por favor me dá uma mãozinha.

Vlw povo! Abraços!
Very Happy Very Happy Very Happy

_________________
Atencisamente,

Bruno Moreira Batista.
http://www.kawek.com.br/BrunoBatista
Skype: Bruno_Batysta
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
Mostrar os tópicos anteriores:   
Novo Tópico   Responder Mensagem    ActiveDelphi - Índice do Fórum -> Banco de Dados Todos os horários são GMT - 3 Horas
Página 1 de 1

 
Ir para:  
Enviar Mensagens Novas: Proibido.
Responder Tópicos Proibido
Editar Mensagens: Proibido.
Excluir Mensagens: Proibido.
Votar em Enquetes: Proibido.


Powered by phpBB © 2001, 2005 phpBB Group
Traduzido por: Suporte phpBB