Problema com SP?
Pessoal to com um pequeno problema numa SP
Eh o seguinte, tenho uma tabela chamada ´corrente´ aonde incluo alguns dados, a estrutura eh esta
E tenho outra tabela chamada ´FluxoCaixa´ E gostaria de disparar uma SP quando gravo os dados na tabela ´Corrente´, mais vi que tem um erro na SP
A estrutura da tabela ´FluxoCaixa´ esta assim
E a SP que fiz foi assim
Bom, como disse percebi um erro na SP
Supondo que eu grave uma data na tabela ´Corrente´ assim
matricula----0001
mespgto-----30/04/2007
valor---------5.000,00
Bom neste caso a SP mostra o resultado corretamente
Mais depois se eu quiser lançar assim na tabela ´Corrente´
matricula----0001
mespgto-----31/03/2007
valor---------5.000,00
Ai ja nao apareçe
Resumindo, se eu lançar da data menor para maior fica certo, agora se eu lançar da data maior para a data menor nao ativa a SP
Nao sei se tem algo haver pq no Delphi tenho um form que mostra os lançamentos em um dbgrid e fiz um ´order by DES no campo MesPgto´, pois o cliente pediu para mostrar o lançamento com data maior para menor, ou seja sempre ficar no topo a dta mais atual.
Bom quando eu gravo faço assim (Uso um StoredProcedure para gravar a SP e um Query para a tabela ´Corrente´)
Bom eh isso ai pessoal, meu problema.
Grato pela ajuda de todos
Adriano
Eh o seguinte, tenho uma tabela chamada ´corrente´ aonde incluo alguns dados, a estrutura eh esta
CREATE TABLE CORRENTE ( MATRICULA VARCHAR(6) NOT NULL, SEQUENCIA INTEGER NOT NULL, ASSOCIADO VARCHAR(80) COLLATE WIN_PTBR, DTMATR DATE, MESPGTO DATE NOT NULL, MESREFINI DATE, MESREFFIM DATE, VALORPG NUMERIC(15,2) NOT NULL, TOTAL NUMERIC(15,2), SEQUENCIA2 INTEGER, VALOR DECIMAL(15,2), ANO VARCHAR(4), DC VARCHAR(1), MES INTEGER, CONTAD VARCHAR(6), HISTORICO VARCHAR(50), DATALCTO DATE );
E tenho outra tabela chamada ´FluxoCaixa´ E gostaria de disparar uma SP quando gravo os dados na tabela ´Corrente´, mais vi que tem um erro na SP
A estrutura da tabela ´FluxoCaixa´ esta assim
CREATE TABLE FLUXOCAIXA ( SEQUENCIA INTEGER NOT NULL, MATRICULA VARCHAR(6), ASSOCIADO VARCHAR(80), MESPGTO DATE, VALORPG NUMERIC(15,2), HISTORICO VARCHAR(80), E_S CHAR(1), ID_CORRENTE INTEGER );
E a SP que fiz foi assim
CREATE PROCEDURE INCFLUXOCAIXA ( matricula varchar(6), associado varchar(80), mespgto date, valorpg numeric(15,2), historico varchar(80), e_s char(1), id_corrente integer) as begin if (exists(select matricula, mespgto from fluxocaixa where (matricula = :matricula and mespgto =:mespgto))) then --modalidade update da stored procedure conforme o select acima update fluxocaixa set matricula = :matricula, associado = :associado, mespgto = :mespgto, valorpg = :valorpg, id_corrente = :id_corrente where (matricula = :matricula and mespgto =:mespgto); else --modalidade inster da procedure conforme o select acima insert into fluxocaixa (matricula, associado, mespgto, valorpg, historico, e_s, id_corrente) values (:matricula, :associado, :mespgto, :valorpg, :historico, :e_s, :id_corrente); end
Bom, como disse percebi um erro na SP
Supondo que eu grave uma data na tabela ´Corrente´ assim
matricula----0001
mespgto-----30/04/2007
valor---------5.000,00
Bom neste caso a SP mostra o resultado corretamente
Mais depois se eu quiser lançar assim na tabela ´Corrente´
matricula----0001
mespgto-----31/03/2007
valor---------5.000,00
Ai ja nao apareçe
Resumindo, se eu lançar da data menor para maior fica certo, agora se eu lançar da data maior para a data menor nao ativa a SP
Nao sei se tem algo haver pq no Delphi tenho um form que mostra os lançamentos em um dbgrid e fiz um ´order by DES no campo MesPgto´, pois o cliente pediu para mostrar o lançamento com data maior para menor, ou seja sempre ficar no topo a dta mais atual.
Bom quando eu gravo faço assim (Uso um StoredProcedure para gravar a SP e um Query para a tabela ´Corrente´)
procedure TFMensal.btGravarClick(Sender: TObject); begin With dm.zqMensal2 do begin if State in [dsEdit, dsInsert] then Try FieldByName(´matricula´).AsString:=dm.zqMensal.FieldByName(´matricula´).AsString; FieldByName(´associado´).AsString:=dm.zqMensal.FieldByName(´associado´).AsString; Post; ApplyUpdates; Refresh; MensalSum; // -- Procedure soma //--passando para a SP fluxo caixa dm.zspFluxoCaixa.Close; dm.zspFluxoCaixa.Params[0].Value := dm.zqMensal2.FieldByName(´matricula´).value; dm.zspFluxoCaixa.Params[1].Value := dm.zqMensal2.FieldByName(´associado´).Value; dm.zspFluxoCaixa.Params[2].Value := DBEdit1.Text; dm.zspFluxoCaixa.Params[3].Value := DBEdit4.Text; dm.zspFluxoCaixa.Params[4].Value := ´Recebimento Mensalidade´+´ - ´+dm.zqMensal2.FieldByName(´associado´).Value; dm.zspFluxoCaixa.Params[5].Value := ´E´; dm.zspFluxoCaixa.Params[6].Value := dm.zqMensal2.FieldByName(´sequencia´).value; dm.zspFluxoCaixa.ExecProc; //executando a Stored Procedure (Proventos) dm.zspFluxoCaixa.ApplyUpdates; //--final sp fluxo caixa ShowMessage(´Dados gravados com sucesso!´); except on E: Exception do begin MessageDlg(´Erro ao gravar dados,´+13+´Verifique se as Datas de Pagamento´+13+´já não foram lançadas!´, mtError, [mbOK], 0); dm.zqMensal2.Close; dm.zqMensal2.SQL.Text:=´Select * from corrente order by mespgto desc´; dm.zqMensal2.Open; MensalSum; // -- Procedure soma exit; end; end; end;//--final do bloco gravar geral end;
Bom eh isso ai pessoal, meu problema.
Grato pela ajuda de todos
Adriano
Adriano_servitec
Curtidas 0
Respostas
Adriano_servitec
18/08/2007
Pessoal, acho que descobri, nao tenho certeza, mais me parece que o erro esta aqui.
Antes
Depois
Espero que seja isso, pois agora me pareçe que esta gravando certo :D
Antes
procedure TFMensal.btGravarClick(Sender: TObject);
begin
With dm.zqMensal2 do
begin
if State in [dsEdit, dsInsert] then
Try
FieldByName(´matricula´).AsString:=dm.zqMensal.FieldByName(´matricula´).AsString;
FieldByName(´associado´).AsString:=dm.zqMensal.FieldByName(´associado´).AsString;
Post;
[color=red:c893b2a800]ApplyUpdates;
Refresh;
MensalSum; // -- Procedure soma
//--passando para a SP fluxo caixa
dm.zspFluxoCaixa.Close;
dm.zspFluxoCaixa.Params[0].Value := dm.zqMensal2.FieldByName(´matricula´).value;
dm.zspFluxoCaixa.Params[1].Value := dm.zqMensal2.FieldByName(´associado´).Value;
dm.zspFluxoCaixa.Params[2].Value := DBEdit1.Text;
dm.zspFluxoCaixa.Params[3].Value := DBEdit4.Text;
dm.zspFluxoCaixa.Params[4].Value := ´Recebimento Mensalidade´+´ - ´+dm.zqMensal2.FieldByName(´associado´).Value;
dm.zspFluxoCaixa.Params[5].Value := ´E´;
dm.zspFluxoCaixa.Params[6].Value := dm.zqMensal2.FieldByName(´sequencia´).value;
dm.zspFluxoCaixa.ExecProc; //executando a Stored Procedure (Proventos)
dm.zspFluxoCaixa.ApplyUpdates;
//--final sp fluxo caixa
ShowMessage(´Dados gravados com sucesso!´);[/color:c893b2a800]
except
on E: Exception do
begin
MessageDlg(´Erro ao gravar dados,´+#13+´Verifique se as Datas de Pagamento´+13+´já não foram lançadas!´, mtError, [mbOK], 0);
dm.zqMensal2.Close;
dm.zqMensal2.SQL.Text:=´Select * from corrente order by mespgto desc´;
dm.zqMensal2.Open;
MensalSum; // -- Procedure soma
exit;
end;
end;
end;//--final do bloco gravar geral
end;
Depois
procedure TFMensal.btGravarClick(Sender: TObject);
begin
With dm.zqMensal2 do
begin
if State in [dsEdit, dsInsert] then
Try
FieldByName(´matricula´).AsString:=dm.zqMensal.FieldByName(´matricula´).AsString;
FieldByName(´associado´).AsString:=dm.zqMensal.FieldByName(´associado´).AsString;
[color=blue:c893b2a800]Post;
//--passando para a SP fluxo caixa
dm.zspFluxoCaixa.Close;
dm.zspFluxoCaixa.Params[0].Value := dm.zqMensal2.FieldByName(´matricula´).value;
dm.zspFluxoCaixa.Params[1].Value := dm.zqMensal2.FieldByName(´associado´).Value;
dm.zspFluxoCaixa.Params[2].Value := DBEdit1.Text;
dm.zspFluxoCaixa.Params[3].Value := DBEdit4.Text;
dm.zspFluxoCaixa.Params[4].Value := ´Recebimento Mensalidade´+´ - ´+dm.zqMensal2.FieldByName(´associado´).Value;
dm.zspFluxoCaixa.Params[5].Value := ´E´;
dm.zspFluxoCaixa.Params[6].Value := dm.zqMensal2.FieldByName(´sequencia´).value;
dm.zspFluxoCaixa.ExecProc; //executando a Stored Procedure (Proventos)
dm.zspFluxoCaixa.ApplyUpdates;
//--final sp fluxo caixa
ApplyUpdates;
Refresh;
MensalSum; // -- Procedure soma
ShowMessage(´Dados gravados com sucesso!´);[/color:c893b2a800]
except
on E: Exception do
begin
MessageDlg(´Erro ao gravar dados,´+#13+´Verifique se as Datas de Pagamento´+13+´já não foram lançadas!´, mtError, [mbOK], 0);
dm.zqMensal2.Close;
dm.zqMensal2.SQL.Text:=´Select * from corrente order by mespgto desc´;
dm.zqMensal2.Open;
MensalSum; // -- Procedure soma
exit;
end;
end;
end;//--final do bloco gravar geral
end;
Espero que seja isso, pois agora me pareçe que esta gravando certo :D
GOSTEI 0