GARANTIR DESCONTO

Fórum Problema com SP? #58697

18/08/2007

0

Pessoal to com um pequeno problema numa SP

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

Adriano_servitec

Responder

Posts

18/08/2007

Adriano_servitec

Pessoal, acho que descobri, nao tenho certeza, mais me parece que o erro esta aqui.
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


Responder

Gostei + 0

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

Aceitar