Fórum SP com problema na atualização #53673

29/10/2005

0

begin
saldo = 0;
for select data_mov, historico,entrada, saida
from mov_caixa
into :data_mov, :historico, :entrada, :saida do begin
saldo = saldo + entrada-saida;
suspend;
end
end

Se eu dou um select * from sp, beleza, funciona como eu quero, mas se eu dou um select * from sp where data_mov between :data1 and :data2, o select vem, mas o saldo que deveria ser somente no periodo selecionado não vem, vem o saldo total, de toda a tabela. Sei que eu deveria reescrever minha SP, mas não sei como.


Paulo

Paulo

Responder

Posts

31/10/2005

Firekiller

Colega, posso estar enganado (na verdade nem sei se dará certo, pois nunca fiz e não testei), mas se você criar uma view, que traga os dados da procedure e filtrar essa view, você não precisa reescrever sua procedure. Ficaria algo assim:

1. Sua SP ficaria a mesma.

2. Você criaria uma view assim:
CREATE VIEW MYVIEW (data_mov, historico,entrada, saida, saldo)
as
SELECT data_mov, historico,entrada, saida, saldo from sp;

3. Utilizaria a view em seus SQL´s:
select * from MYVIEW where data_mov between :data1 and :data2


Responder

Gostei + 0

31/10/2005

Paulo

Fire, pelo que eu sei, as view não podem ser chamadas de uma SP, mas de uma tabela.


Responder

Gostei + 0

31/10/2005

Firekiller

realmente... depois fui testar e não funcionou mesmo!

Mas sendo assim, creio eu que não será o suficiente você alterar sua procedure, pois o valor de saldo inicia zerado, portanto creio eu que ele não irá bater ao tentar pegar esse valor. O que poderia ser feito, pelo menos na minha opinião, é aproveitarmos a idéia que eu tinha utilizado anteriormente, só que, ao invés de criar uma view, criar uma outra procedure, e então fazer o filtro nessa procedure. Não sei se irá funcionar. Mas qualquer coisa, entra em contato com o AFarias, que ele manja muito de IB/FB.


Responder

Gostei + 0

31/10/2005

Gandalf.nho

Em vez de SP, veja se essa simples SQL funciona como vc quer

select historico, (sum(entrada) - sum(saida)) as saldo 
from mov_caixa where data_mov between :data1 and :data2
group by historico



Responder

Gostei + 0

01/11/2005

Paulo

gandalf.nho, eu prefiro SP. Ele já está funcionando sem SP. Eu como estou mudando a minha aplicação para rodar todas as consultas em SP, então é por isso que eu estou tentando via SP. Fora da SP, ela já está funcionando. O problema é com SP. O programa está funcionando de uma forma, via IBX. O que eu estou é passando tudo para DBEXpress, claro aproveitando e fazendo umas mudanças e tal. A minha opção foi em trabalhar com SP, Views, Triggers e etc... Mas obrigado pela ajuda de qualquer forma.


Responder

Gostei + 0

01/11/2005

Gandalf.nho

Se vc quiser usar como SP, basta vc declarar as duas datas que serão usadas como intervalo da consulta como parâmetros de entrada da SP.


Responder

Gostei + 0

01/11/2005

Paulo

Já fiz assim, e está vindo o saldo total. O escopo da minha SP, está na primeira pergunta, suprimi apenas o cabeçalho da SP. Aquela é a minha SP. Eu sei q tenho que reescrevê-la, mas nãom sei como, pois não gostaria de fazer 3,4 SP, para o mesmo fim. Gostaria de reaproveitar a que tenho, ou seja, alterando a sua SQL. Porem se não tiver outra forma, terei que criar uma SP, para inserção, outra para atualizar Saldo(Atual) e outra para fazer consultas por período, tudo isso na mesma tabela, multiplicado por 10, terei umas 30 SP sómente para Inseri,atualizar e pesquisar em 10 tabelas. Acho um contra-censo terrível.


Responder

Gostei + 0

01/11/2005

Firekiller

O saldo continuará vindo o total, porque, a coluna saldo de sua procedure, é um valor acumulativo, ou seja, para ser calculado ele depende do valor do registro anterior. Por isso eu disse pra usar uma outra SP.
Uma forma de você sair desse problema, sem ter que usar uma segunda procedure, seria você ter um campo na tabela chamado saldo. E utilizar uma trigger (before insert or update), para calcular esse valor. Dessa forma você não terá que ficar criando 2, 3, 4 ou 30 procedures.


Responder

Gostei + 0

02/11/2005

Paulo

Valeu killer, não vejo outra opção a não ser essas postadas aí.


Responder

Gostei + 0

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

Aceitar