Fórum Duvida como gravar Stored Procedure - Erro List index out of #57684

14/01/2007

0

Olah pessoal eh o sequinte criei uma SP e preciso passar os valores para ela, mais esta gerando o sequinte erro [size=14:55c6c1f03c][color=red:55c6c1f03c]´List index out of bounds(31)´[/color:55c6c1f03c][/size:55c6c1f03c]

Estou tentando gravar assim num button
procedure TFTodoMes.btnGravarClick(Sender: TObject);
var i, n: SmallInt;
VMES : INTEGER;
begin
{VMES:=dm.IBQtodomes.fieldbyname(´mes´).value + 1;
label4.caption:=FLOATTOSTR(VMES);}
//***********começando a gravar na Stored Procedure*********
  N := ComponentCount;

  for I := 0 to N-1 do
  begin
      if (Components[I] is TEdit) AND ((Components[I] as TEdit).Tag > 0) AND ((Components[I] as TEdit).Text <> ´´) then
      begin
      if application.messagebox(PChar(´Deseja Gravar os Dados Cadastrados?´), PChar(´Gravar Dados´+Self.Caption),MB_IConquestion +MB_YesNo)=IDYES then
      begin
        with dm.QSP_Todomes do
           begin
           close;
           SQL.clear;
           {Chama a Stored procedure no IBQuery para gravar}
           sql.add(´EXECUTE PROCEDURE SP_TodoMes (:sequencia, :ano,:conta_d, :conta_c, :mes,  :valor, :historico, :contap_d, :contap_c, :nomenclatura1, :nomenclatura2, :mesvar)´);
           {passando dos edits para o paramentro do Stored Procedure}
           ParamByName(´ano´).AsString            :=edtAno.text;
           ParamByName(´conta_D´).AsString        :=edtDebito.text;
           ParamByName(´conta_C´).AsString        :=edtCredito.Text;
           ParambyName(´historico´).AsString      :=edtHistorico.Text;
           ParamByName(´contap_d´).AsString       :=et1.text;
           ParamByName(´contap_c´).asString       :=et2.text;
           ParamByName(´nomenclatura1´).AsString  :=Label12.caption;
           ParamByName(´nomenclatura2´).AsString  :=Label13.caption;
           ParamByname(´mes´).asInteger           := (Components[I] as TEdit).Tag;

          Case (Components[I] as TEdit).Tag of

            1: ParamByName(´Valor´).Value     := StrToCurr((Components[I] as TEdit).Text);
            2: ParamByName(´Valor´).Value     := StrToCurr((Components[I] as TEdit).Text);
            3: ParamByName(´Valor´).Value     := StrToCurr((Components[I] as TEdit).Text);
            4: ParamByName(´Valor´).Value     := StrToCurr((Components[I] as TEdit).Text);
            5: ParamByName(´Valor´).Value     := StrToCurr((Components[I] as TEdit).Text);
            6: ParamByName(´Valor´).Value     := StrToCurr((Components[I] as TEdit).Text);
            7: ParamByName(´Valor´).Value     := StrToCurr((Components[I] as TEdit).Text);
            8: ParamByName(´Valor´).Value     := StrToCurr((Components[I] as TEdit).Text);
            9: ParamByName(´Valor´).Value     := StrToCurr((Components[I] as TEdit).Text);
           10: ParamByName(´Valor´).Value     := StrToCurr((Components[I] as TEdit).Text);
           11: ParamByName(´Valor´).Value     := StrToCurr((Components[I] as TEdit).Text);
           12: ParamByName(´Valor´).Value     := StrToCurr((Components[I] as TEdit).Text);
        end;
   try
        ExecSQL;
        dm.TlConta.Active:=true;
        dm.TlConta.Commit;
       {Para abir a tabela e atualizar o dbgrid}
        DM.IBQTODOMES.Close;
        DM.IBQTODOMES.Sql.Clear;
        DM.IBQTODOMES.Sql.Add(´select * from todomesconta´);
        DM.IBQTODOMES.Open;
   except
        on E:Exception do
    begin
       dm.TlConta.RollBack;
       ShowMessage(´Falha na Inclusão dos Dados!´#1310´ Mensagem: ´+E.Message);
    end;
   end;
  end;
 end;
end;
end;
end;


Nao sei se precisa, mais tambem vou postar a SPorc
SET TERM ^ ;

CREATE PROCEDURE SP_TODOMES (
    SEQUENCIA INTEGER,
    ANO VARCHAR(4),
    CONTA_D VARCHAR(15),
    CONTA_C VARCHAR(15),
    MES INTEGER,
    VALOR NUMERIC(15,2),
    HISTORICO VARCHAR(100),
    CONTAP_D VARCHAR(15),
    CONTAP_C VARCHAR(15),
    NOMENCLATURA1 VARCHAR(50),
    NOMENCLATURA2 VARCHAR(50),
    MESVAR VARCHAR(2))
AS
begin
if ( not exists(select sequencia from todomesconta where sequencia = :sequencia) )
  then
   Insert Into todomesconta (sequencia, ano, conta_d, conta_c, mes,  valor, historico, contap_d, contap_c, nomenclatura1, nomenclatura2, mesvar)
   Values (:sequencia, :ano, :conta_d, :conta_c, :mes,  :valor, :historico, :contap_d, :contap_c, :nomenclatura1, :nomenclatura2, :mesvar);

   Insert Into debitotmes (sequencia, ano, conta_d, conta_c, mes,  valor, historico, contap_d, contap_c, nomenclatura1, nomenclatura2, mesvar)
   Values (:sequencia, :ano, :conta_d, :conta_c, :mes,  :valor, :historico, :contap_d, :contap_c, :nomenclatura1, :nomenclatura2, :mesvar);

   Insert Into creditomes (sequencia, ano, conta_d, conta_c, mes,  valor, historico, contap_d, contap_c, nomenclatura1, nomenclatura2, mesvar)
   Values (:sequencia, :ano, :conta_d, :conta_c, :mes,  :valor, :historico, :contap_d, :contap_c, :nomenclatura1, :nomenclatura2, :mesvar);

 end^

SET TERM ; ^

GRANT SELECT,INSERT ON TODOMESCONTA TO PROCEDURE SP_TODOMES;

GRANT INSERT ON DEBITOTMES TO PROCEDURE SP_TODOMES;

GRANT INSERT ON CREDITOMES TO PROCEDURE SP_TODOMES;

GRANT EXECUTE ON PROCEDURE SP_TODOMES TO SYSDBA;


Grato a ajuda de todos


Adriano_servitec

Adriano_servitec

Responder

Posts

14/01/2007

Adriano_servitec

E o problema esta somente quando tento passar por query
N := ComponentCount;

  for I := 0 to N-1 do
  begin
      if (Components[I] is TEdit) AND ((Components[I] as TEdit).Tag > 0) AND ((Components[I] as TEdit).Text <> ´´) then
      begin
      with {dm.QSP_Todomes} DM.IBQTODOMES do
      begin
           close;
           SQL.clear;
           //Chama a Stored procedure no IBQuery para gravar
           //sql.add(´EXECUTE PROCEDURE SP_TodoMes (:sequencia, :ano,:conta_d, :conta_c, :mes, :valor, :historico, :contap_d, :contap_c, :nomenclatura1, :nomenclatura2, :mesvar)´);
           sql.add(´ Insert Into todomesconta (ano, conta_d, conta_c, mes, valor, historico, contap_d, contap_c, nomenclatura1, nomenclatura2, mesvar)´);
           sql.add(´ Values (:ano,:conta_d, :conta_c, :mes, :valor, :historico, :contap_d, :contap_c, :nomenclatura1, :nomenclatura2, :mesvar)´);
           //{passando dos edits para o paramentro do Stored Procedure
           ParamByName(´ano´).AsString            :=edtAno.text;
           ParamByName(´conta_D´).AsString        :=edtDebito.text;
           ParamByName(´conta_C´).AsString        :=edtCredito.Text;
           ParambyName(´historico´).AsString      :=edtHistorico.Text;
           ParamByName(´contap_d´).AsString       :=et1.text;
           ParamByName(´contap_c´).asString       :=et2.text;
           ParamByName(´nomenclatura1´).AsString  :=Label12.caption;
           ParamByName(´nomenclatura2´).AsString  :=Label13.caption;
           ParamByname(´mes´).Value               := (Components[I] as TEdit).Tag;

          Case (Components[I] as TEdit).Tag of

            1: ParamByName(´Valor´).Value     := StrToCurr((Components[I] as TEdit).Text);
            2: ParamByName(´Valor´).Value     := StrToCurr((Components[I] as TEdit).Text);
            3: ParamByName(´Valor´).Value     := StrToCurr((Components[I] as TEdit).Text);
            4: ParamByName(´Valor´).Value     := StrToCurr((Components[I] as TEdit).Text);
            5: ParamByName(´Valor´).Value     := StrToCurr((Components[I] as TEdit).Text);
            6: ParamByName(´Valor´).Value     := StrToCurr((Components[I] as TEdit).Text);
            7: ParamByName(´Valor´).Value     := StrToCurr((Components[I] as TEdit).Text);
            8: ParamByName(´Valor´).Value     := StrToCurr((Components[I] as TEdit).Text);
            9: ParamByName(´Valor´).Value     := StrToCurr((Components[I] as TEdit).Text);
           10: ParamByName(´Valor´).Value     := StrToCurr((Components[I] as TEdit).Text);
           11: ParamByName(´Valor´).Value     := StrToCurr((Components[I] as TEdit).Text);
           12: ParamByName(´Valor´).Value     := StrToCurr((Components[I] as TEdit).Text);
        end;
         execSQL;
      end;
    end;
  end;
  dm.TlConta.Active:=true;
  dm.TlConta.Commit;
  {Para abir a tabela e atualizar o dbgrid}
  DM.IBQTODOMES.Close;
  DM.IBQTODOMES.Sql.Clear;
  DM.IBQTODOMES.Sql.Add(´select * from todomesconta´);
  DM.IBQTODOMES.Open;
end;


Por IBTable nao tem problema
N := ComponentCount;

  for I := 0 to N-1 do
  begin
      if (Components[I] is TEdit) AND ((Components[I] as TEdit).Tag > 0) AND ((Components[I] as TEdit).Text <> ´´) then
      begin
      dm.IBTodoMes.Append; {para incluir na Tabela usando um DataSet}
        {passando os dados do edit para o DataSet}
        dm.IBTodoMesano.Value         := edtAno.Text;
        VMES:=(Components[I] as TEdit).Tag-1;

        dm.IBTodoMesHistorico.Value   := edtHistorico.Text;

        // +´ ´+ FLOATTOSTR(VMES) +´/´+ EDTANO.TEXT;

        dm.IBTodoMesConta_D.Value     := edtDebito.Text;
        dm.IBTodoMesConta_C.Value     := edtCredito.Text;

        dm.IBTodoMesContaP_D.Value     := et1.Text;
        dm.IBTodoMesContaP_C.Value     := et2.Text;

        dm.IBTodoMesNOMENCLATURA1.Value     := LABEL12.CAPTION;
        dm.IBTodoMesNOMENCLATURA2.Value     := LABEL13.CAPTION;

        dm.IBTodoMesMes.Value         := (Components[I] as TEdit).Tag;
        Case (Components[I] as TEdit).Tag of

          1: DM.IBTodoMesValor.Value     := StrToCurr((Components[I] as TEdit).Text);
          2: DM.IBTodoMesValor.Value     := StrToCurr((Components[I] as TEdit).Text);
          3: DM.IBTodoMesValor.Value     := StrToCurr((Components[I] as TEdit).Text);
          4: DM.IBTodoMesValor.Value     := StrToCurr((Components[I] as TEdit).Text);
          5: DM.IBTodoMesValor.Value     := StrToCurr((Components[I] as TEdit).Text);
          6: DM.IBTodoMesValor.Value     := StrToCurr((Components[I] as TEdit).Text);
          7: DM.IBTodoMesValor.Value     := StrToCurr((Components[I] as TEdit).Text);
          8: DM.IBTodoMesValor.Value     := StrToCurr((Components[I] as TEdit).Text);
          9: DM.IBTodoMesValor.Value     := StrToCurr((Components[I] as TEdit).Text);
          10: DM.IBTodoMesValor.Value    := StrToCurr((Components[I] as TEdit).Text);
          11: DM.IBTodoMesValor.Value    := StrToCurr((Components[I] as TEdit).Text);
          12: DM.IBTodoMesValor.Value    := StrToCurr((Components[I] as TEdit).Text);
        end;
       dm.IBTodoMes.Post; {para gravar na tabela}
      end;
  end;
  dm.TlConta.Active:=true;
  dm.TlConta.Commit;
  {Para abir a tabela e atualizar o dbgrid}
  DM.IBQTODOMES.Close;
  DM.IBQTODOMES.Sql.Clear;
  DM.IBQTODOMES.Sql.Add(´select * from todomesconta´);
  DM.IBQTODOMES.Open;
end;


Tambem nao da erro usando [b:ca03ab789d]CDS[/b:ca03ab789d]

E eu preciso passar esses dados por uma Stored Procedure

Falando na Stored Procedure, essa que eu mostrei acima ja esta feita o probelma foi quando quis joga-la para um IBQuery de o sequinte erro na hora de ativa-la

[b:ca03ab789d]Validation error for column, ANO ´***null***´ at Procedure ´SP_TodoMes´[/b:ca03ab789d]

Grato a ajuda de todos
Adriano.

Grato pela ajuda de todos


Responder

Gostei + 0

15/01/2007

Emerson Nascimento

1o. Você criou o parâmetro [i:28f58fceb5]:sequencia[/i:28f58fceb5], mas não passou valor para ele;

2o. Por que esse case ? deveria ser somente uma linha, ao invés de 1o linhas.

procedure TFTodoMes.btnGravarClick(Sender: TObject); 
var
  i, n: SmallInt; 
  VMES : INTEGER; 
begin 
  {VMES:=dm.IBQtodomes.fieldbyname(´mes´).value + 1; 
  label4.caption:=FLOATTOSTR(VMES);} 
  //***********começando a gravar na Stored Procedure********* 
  N := ComponentCount; 

  for I := 0 to N-1 do 
    if (Components[I] is TEdit) AND
       (TEdit(Components[I]).Tag > 0) AND
       (TEdit(Components[I]).Text <> ´´) AND
       (application.messagebox(PChar(´Deseja Gravar os Dados Cadastrados?´),
         PChar(´Gravar Dados´+Self.Caption),MB_IConquestion +MB_YesNo)=IDYES) then
    begin 
      with dm.QSP_Todomes do
      begin 
        close; 
        {Chama a Stored procedure no IBQuery para gravar} 
        SQL.Text :=
          ´EXECUTE PROCEDURE SP_TodoMes ´+
          ´  (:sequencia, :ano, :conta_d, :conta_c, :mes, ´+
          ´   :valor, :historico, :contap_d, :contap_c, ´+
          ´   :nomenclatura1, :nomenclatura2, :mesvar)´;
        {passando dos edits para o paramentro do Stored Procedure} 
        // **** CADÊ A PASSAGEM DO PARÂMETRO :SEQUENCIA ???
        ParamByName(´ano´).AsString := edtAno.text; 
        ParamByName(´conta_D´).AsString := edtDebito.text; 
        ParamByName(´conta_C´).AsString := edtCredito.Text; 
        ParambyName(´historico´).AsString := edtHistorico.Text; 
        ParamByName(´contap_d´).AsString := et1.text; 
        ParamByName(´contap_c´).asString := et2.text; 
        ParamByName(´nomenclatura1´).AsString := Label12.caption; 
        ParamByName(´nomenclatura2´).AsString := Label13.caption; 
        ParamByname(´mes´).asInteger := (Components[I] as TEdit).Tag; 

        // QUAL A RAZÃO DO CASE ??? NÃO É NECESSÁRIO
        ParamByName(´Valor´).Value := StrToCurr((Components[I] as TEdit).Text); 
        try 
          ExecSQL; 
          dm.TlConta.Active:=true;
          dm.TlConta.Commit;
          {Para abir a tabela e atualizar o dbgrid}
          DM.IBQTODOMES.Close;
          DM.IBQTODOMES.Sql.Clear;
          DM.IBQTODOMES.Sql.Add(´select * from todomesconta´);
          DM.IBQTODOMES.Open;
        except
          on E:Exception do
          begin
            dm.TlConta.RollBack;
            ShowMessage(´Falha na Inclusão dos Dados!´1310´ Mensagem: ´+E.Message);
          end;
        end; 
      end; 
    end; 
end;



Responder

Gostei + 0

15/01/2007

Adriano_servitec

1o. Você criou o parâmetro [i:c7570ce7e5]:sequencia[/i:c7570ce7e5], mas não passou valor para ele; 2o. Por que esse case ? deveria ser somente uma linha, ao invés de 1o linhas.
procedure TFTodoMes.btnGravarClick(Sender: TObject); 
var
  i, n: SmallInt; 
  VMES : INTEGER; 
begin 
  {VMES:=dm.IBQtodomes.fieldbyname(´mes´).value + 1; 
  label4.caption:=FLOATTOSTR(VMES);} 
  //***********começando a gravar na Stored Procedure********* 
  N := ComponentCount; 

  for I := 0 to N-1 do 
    if (Components[I] is TEdit) AND
       (TEdit(Components[I]).Tag > 0) AND
       (TEdit(Components[I]).Text <> ´´) AND
       (application.messagebox(PChar(´Deseja Gravar os Dados Cadastrados?´),
         PChar(´Gravar Dados´+Self.Caption),MB_IConquestion +MB_YesNo)=IDYES) then
    begin 
      with dm.QSP_Todomes do
      begin 
        close; 
        {Chama a Stored procedure no IBQuery para gravar} 
        SQL.Text :=
          ´EXECUTE PROCEDURE SP_TodoMes ´+
          ´  (:sequencia, :ano, :conta_d, :conta_c, :mes, ´+
          ´   :valor, :historico, :contap_d, :contap_c, ´+
          ´   :nomenclatura1, :nomenclatura2, :mesvar)´;
        {passando dos edits para o paramentro do Stored Procedure} 
        // **** CADÊ A PASSAGEM DO PARÂMETRO :SEQUENCIA ???
        ParamByName(´ano´).AsString := edtAno.text; 
        ParamByName(´conta_D´).AsString := edtDebito.text; 
        ParamByName(´conta_C´).AsString := edtCredito.Text; 
        ParambyName(´historico´).AsString := edtHistorico.Text; 
        ParamByName(´contap_d´).AsString := et1.text; 
        ParamByName(´contap_c´).asString := et2.text; 
        ParamByName(´nomenclatura1´).AsString := Label12.caption; 
        ParamByName(´nomenclatura2´).AsString := Label13.caption; 
        ParamByname(´mes´).asInteger := (Components[I] as TEdit).Tag; 

        // QUAL A RAZÃO DO CASE ??? NÃO É NECESSÁRIO
        ParamByName(´Valor´).Value := StrToCurr((Components[I] as TEdit).Text); 
        try 
          ExecSQL; 
          dm.TlConta.Active:=true;
          dm.TlConta.Commit;
          {Para abir a tabela e atualizar o dbgrid}
          DM.IBQTODOMES.Close;
          DM.IBQTODOMES.Sql.Clear;
          DM.IBQTODOMES.Sql.Add(´select * from todomesconta´);
          DM.IBQTODOMES.Open;
        except
          on E:Exception do
          begin
            dm.TlConta.RollBack;
            ShowMessage(´Falha na Inclusão dos Dados!´1310´ Mensagem: ´+E.Message);
          end;
        end; 
      end; 
    end; 
end;


Olah Emerson

Respondendo
1ª - A sequencia nao coloquei pq. ela ja sai um autoincremento pela trigger, pr isso nao vi necessidade de passa-lo pelo parametro.

2ª O case se refere ao TAG de cada edit, note que tem 12 edits e o if la em cima soh passa cfe o valor preenchido na tag

Olhe como estou fazendo (Mais eh com Table)
if (Components[I] is TEdit) AND ((Components[I] as TEdit).Tag > 0) AND ((Components[I] as TEdit).Text <> ´´) then
      begin

        dm.IBTodoMes.Append; {para incluir na Tabela usando um DataSet}
        {passando os dados do edit para o DataSet}
        dm.IBTodoMesano.Value         := edtAno.Text;
        dm.IBTodoMesConta_D.Value     := edtDebito.Text;
        dm.IBTodoMesConta_C.Value     := edtCredito.Text;

        dm.IBTodoMesMes.Value         := (Components[I] as TEdit).Tag;
        if RadioButton1.checked = true then begin
        Case (Components[I] as TEdit).Tag of
          1: DM.IBTodoMesHistorico.Value     := edtHistorico.Text + ´ ´+ Edit2.Text;
          2: DM.IBTodoMesHistorico.Value     := edtHistorico.Text + ´ ´+ Edit3.Text;
          3: DM.IBTodoMesHistorico.Value     := edtHistorico.Text + ´ ´+ Edit4.Text;
          4: DM.IBTodoMesHistorico.Value     := edtHistorico.Text + ´ ´+ Edit5.Text;
          5: DM.IBTodoMesHistorico.Value     := edtHistorico.Text + ´ ´+ Edit6.Text;
          6: DM.IBTodoMesHistorico.Value     := edtHistorico.Text + ´ ´+ Edit7.Text;
          7: DM.IBTodoMesHistorico.Value     := edtHistorico.Text + ´ ´+ Edit8.Text;
          8: DM.IBTodoMesHistorico.Value     := edtHistorico.Text + ´ ´+ Edit9.Text;
          9: DM.IBTodoMesHistorico.Value     := edtHistorico.Text + ´ ´+ Edit10.Text;
          10: DM.IBTodoMesHistorico.Value    := edtHistorico.Text + ´ ´+ Edit11.Text;
          11: DM.IBTodoMesHistorico.Value    := edtHistorico.Text + ´ ´+ Edit12.Text;
          12: DM.IBTodoMesHistorico.Value    := edtHistorico.Text + ´ ´+ Edit13.Text;
        end; //pertence ao case
        end else begin//pertence ao radiobutton
           dm.IBTodoMesHistorico.Value   := edtHistorico.Text;
        end; // final do if

        Case (Components[I] as TEdit).Tag of
          1: DM.IBTodoMesValor.Value     := StrToFloat((Components[I] as TEdit).Text);
          2: DM.IBTodoMesValor.Value     := StrToCurr((Components[I] as TEdit).Text);
          3: DM.IBTodoMesValor.Value     := StrToCurr((Components[I] as TEdit).Text);
          4: DM.IBTodoMesValor.Value     := StrToCurr((Components[I] as TEdit).Text);
          5: DM.IBTodoMesValor.Value     := StrToCurr((Components[I] as TEdit).Text);
          6: DM.IBTodoMesValor.Value     := StrToCurr((Components[I] as TEdit).Text);
          7: DM.IBTodoMesValor.Value     := StrToCurr((Components[I] as TEdit).Text);
          8: DM.IBTodoMesValor.Value     := StrToCurr((Components[I] as TEdit).Text);
          9: DM.IBTodoMesValor.Value     := StrToCurr((Components[I] as TEdit).Text);
          10: DM.IBTodoMesValor.Value    := StrToCurr((Components[I] as TEdit).Text);
          11: DM.IBTodoMesValor.Value    := StrToCurr((Components[I] as TEdit).Text);
          12: DM.IBTodoMesValor.Value    := StrToCurr((Components[I] as TEdit).Text);
        end;

        Case (Components[I] as TEdit).Tag of
          1: DM.IBTodoMesdatalcto.Value     :=strtodate( ´31/01/´+edtAno.Text );
          2: DM.IBTodoMesdatalcto.Value     :=strtodate( ´28/02/´+edtAno.Text );
          3: DM.IBTodoMesdatalcto.Value     :=strtodate( ´31/03/´+edtAno.Text );
          4: DM.IBTodoMesdatalcto.Value     :=strtodate( ´30/04/´+edtAno.Text );
          5: DM.IBTodoMesdatalcto.Value     :=strtodate( ´31/05/´+edtAno.Text );
          6: DM.IBTodoMesdatalcto.Value     :=strtodate( ´30/06/´+edtAno.Text );
          7: DM.IBTodoMesdatalcto.Value     :=strtodate( ´31/07/´+edtAno.Text );
          8: DM.IBTodoMesdatalcto.Value     :=strtodate( ´31/08/´+edtAno.Text );
          9: DM.IBTodoMesdatalcto.Value     :=strtodate( ´30/09/´+edtAno.Text );
          10: DM.IBTodoMesdatalcto.Value    :=strtodate( ´31/10/´+edtAno.Text );
          11: DM.IBTodoMesdatalcto.Value    :=strtodate( ´30/11/´+edtAno.Text );
          12: DM.IBTodoMesdatalcto.Value    :=strtodate( ´31/12/´+edtAno.Text );
        end;
        dm.IBTodoMes.Post; {para gravar na tabela}

      end;

  end;
Assim funciona dessa forma: se eu gravar somente o mes 12, 07, 04 ele vai pegar o resultado destes edits, ou seja nao vai gravar necessariamente todos os doze meses de uma soh vez, pode ser que num desses edits tenham valores diferentes, assim como tambem estou querendo fazer para o historico.(Eh a melhor maneira? Nao sei, mais como vai ser tudo parametrizado em outro form inclusive o historico, e as datas nao soube como fazer de outro jeito para gravar no banco, pq vao ser as datas do final de cada mes gravadas tambem)

Quero fazer com a Stored Procedure o mesmo que faço com a Table

Se nao precisar de usar o case melhor ainda :D

Obrigado mais uma vez pela atençao.
Adriano.


Responder

Gostei + 0

17/01/2007

Adriano_servitec

Olah pessoal, nao sei se vcs nao entenderam a minha divida o que eu queria era passar esses valores que fiz no componente ibTable, mais como Stored Procedure, e nao estou conseguindo, bom com o ibTable fiz assim e funciona
[b:56440ba3e9]Codigo final usando tag dos edits para passar para o banco cfe.o edit selecionado[/b:56440ba3e9]
procedure TFTodoMes.btnGravarClick(Sender: TObject);
var i, n: SmallInt;
begin
  N := ComponentCount;

  for I := 0 to N-1 do
  begin
     if (Components[I] is TEdit) AND ((Components[I] as TEdit).Tag > 0) AND ((Components[I] as TEdit).Tag < 19) and ((Components[I] as TEdit).Text <> ´´) then
      begin

        dm.IBTodoMes.Append; {para incluir na Tabela usando um DataSet}
        {passando os dados do edit para o DataSet}
        dm.IBTodoMesano.Value            := edtAno.Text;
        dm.IBTodoMesConta_D.Value        := edtDebito.Text;
        dm.IBTodoMesContap_D.Value       := et1.Text;
        dm.IBTodoMesNOMENCLATURA1.Value  := label12.Caption;
        dm.IBTodoMesContap_C.Value       := et2.Text;
        dm.IBTodoMesNOMENCLATURA2.Value  := label13.Caption;
        dm.IBTodoMesConta_C.Value        := edtCredito.Text;

        dm.IBTodoMesMes.Value         := (Components[I] as TEdit).Tag;
        if RadioButton1.checked = true then begin
        Case (Components[I] as TEdit).Tag of
          1: DM.IBTodoMesHistorico.Value     := edtHistorico.Text + ´ ´+ Edit2.Text;
          2: DM.IBTodoMesHistorico.Value     := edtHistorico.Text + ´ ´+ Edit3.Text;
          3: DM.IBTodoMesHistorico.Value     := edtHistorico.Text + ´ ´+ Edit4.Text;
          4: DM.IBTodoMesHistorico.Value     := edtHistorico.Text + ´ ´+ Edit5.Text;
          5: DM.IBTodoMesHistorico.Value     := edtHistorico.Text + ´ ´+ Edit6.Text;
          6: DM.IBTodoMesHistorico.Value     := edtHistorico.Text + ´ ´+ Edit7.Text;
          7: DM.IBTodoMesHistorico.Value     := edtHistorico.Text + ´ ´+ Edit8.Text;
          8: DM.IBTodoMesHistorico.Value     := edtHistorico.Text + ´ ´+ Edit9.Text;
          9: DM.IBTodoMesHistorico.Value     := edtHistorico.Text + ´ ´+ Edit10.Text;
          10: DM.IBTodoMesHistorico.Value    := edtHistorico.Text + ´ ´+ Edit11.Text;
          11: DM.IBTodoMesHistorico.Value    := edtHistorico.Text + ´ ´+ Edit12.Text;
          12: DM.IBTodoMesHistorico.Value    := edtHistorico.Text + ´ ´+ Edit13.Text;
        end; //pertence ao case
        end else begin//pertence ao radiobutton
           dm.IBTodoMesHistorico.Value   := edtHistorico.Text;
        end; // final do if
         {SValor deixei como variavel Global - Variavel sValor recebendo o valor que contem no componente edtValorPadrao}
         sValor := edtValorPadrao.Text;
         {transforma a variavel sValor para receber valores com ponto e virgula tipo 1.000,00}
         sValor := stringreplace(sValor, ´.´, ´´, [rfReplaceAll]);
        {Case recebendo a variavel sValor}
        Case (Components[I] as TEdit).Tag of
          1: DM.IBTodoMesValor.Value     := StrToCurr( sValor );
          2: DM.IBTodoMesValor.Value     := StrToCurr( sValor );
          3: DM.IBTodoMesValor.Value     := StrToCurr( sValor );
          4: DM.IBTodoMesValor.Value     := StrToCurr( sValor );
          5: DM.IBTodoMesValor.Value     := StrToCurr( sValor );
          6: DM.IBTodoMesValor.Value     := StrToCurr( sValor );
          7: DM.IBTodoMesValor.Value     := StrToCurr( sValor );
          8: DM.IBTodoMesValor.Value     := StrToCurr( sValor );
          9: DM.IBTodoMesValor.Value     := StrToCurr( sValor );
          10: DM.IBTodoMesValor.Value    := StrToCurr( sValor );
          11: DM.IBTodoMesValor.Value    := StrToCurr( sValor );
          12: DM.IBTodoMesValor.Value    := StrToCurr( sValor );
        end;

        Case (Components[I] as TEdit).Tag of
          1: DM.IBTodoMesdatalcto.Value     :=strtodate( ´31/01/´+edtAno.Text );
          2: DM.IBTodoMesdatalcto.Value     :=strtodate( ´28/02/´+edtAno.Text );
          3: DM.IBTodoMesdatalcto.Value     :=strtodate( ´31/03/´+edtAno.Text );
          4: DM.IBTodoMesdatalcto.Value     :=strtodate( ´30/04/´+edtAno.Text );
          5: DM.IBTodoMesdatalcto.Value     :=strtodate( ´31/05/´+edtAno.Text );
          6: DM.IBTodoMesdatalcto.Value     :=strtodate( ´30/06/´+edtAno.Text );
          7: DM.IBTodoMesdatalcto.Value     :=strtodate( ´31/07/´+edtAno.Text );
          8: DM.IBTodoMesdatalcto.Value     :=strtodate( ´31/08/´+edtAno.Text );
          9: DM.IBTodoMesdatalcto.Value     :=strtodate( ´30/09/´+edtAno.Text );
          10: DM.IBTodoMesdatalcto.Value    :=strtodate( ´31/10/´+edtAno.Text );
          11: DM.IBTodoMesdatalcto.Value    :=strtodate( ´30/11/´+edtAno.Text );
          12: DM.IBTodoMesdatalcto.Value    :=strtodate( ´31/12/´+edtAno.Text );
        end;
      try
      
        dm.IBTodoMes.Post; {para gravar na tabela}
        dm.IBTodoMes.ApplyUpdates;
        if not dm.tLConta.InTransaction then dm.tLConta.StartTransaction; // Reinicia o transaction
        //dm.tLConta.Commit; //comitar o transaction
        dm.tLConta.CommitRetaining;
        DM.IBQTODOMES.Close;
        DM.IBQTODOMES.Sql.Clear;
        DM.IBQTODOMES.Sql.Add(´select * from todomesconta order by sequencia desc´);
        DM.IBQTODOMES.Open;
      except
        on E:Exception do
        begin
           dm.TLConta.RollBackRetaining; //Rollback no Trasaction
           ShowMessage(´Falha na Inclusão dos Dados!´#1310´ Mensagem: ´+E.Message);
           {DM.IBQTODOMES.close;
           DM.IBQTODOMES.Sql.Clear;
           DM.IBQTODOMES.Sql.Add(´select * from todomesconta order by sequencia desc´);
           DM.IBQTODOMES.Open;
           dm.ibtodomes.active:=false;
           dm.ibtodomes.active:=TRUE;}
        end;
      end;
     end;
     dm.ibqtodomes.active:=true;
  end;
   {Para abir a tabela e atualizar o dbgrid}
        DM.IBQTODOMES.Close;
        DM.IBQTODOMES.Sql.Clear;
        DM.IBQTODOMES.Sql.Add(´select * from todomesconta order by sequencia desc´);
        DM.IBQTODOMES.Open;
end;

Entao pessoal, desejo passar por parametros em vez de usar o ibTable. Pois tenho uma Stored Procedure que vai receber esses valores.

Alguem pode me ajudar?
Obrigado
Adriano.


Responder

Gostei + 0

17/01/2007

Adriano_servitec

Bom pessoal, como nao consegui passar por Stored Procedure, a unica saida que eu achei foi criar duas tabelas com chaves estrangeiras fazendo referencia tipo update e delete em cascata, criei 3 trigger sequencial, para assim ao deletar ou fazer update fazer nas tres tabelas, com a chave primaria da tabela aonde tem o movimento.

Entao o codigo final ficou assim:
procedure TFTodoMes.btnGravarClick(Sender: TObject);
var i, n: SmallInt;
begin
  N := ComponentCount;

  for I := 0 to N-1 do
  begin
     if (Components[I] is TEdit) AND ((Components[I] as TEdit).Tag > 0) AND ((Components[I] as TEdit).Tag < 19) and ((Components[I] as TEdit).Text <> ´´) then
      begin
//***********************************movimentaçoes************************************
        dm.IBTodoMes.Append; {para incluir na Tabela usando um DataSet}
        {passando os dados do edit para o DataSet}
        dm.IBTodoMesano.Value            := edtAno.Text;
        dm.IBTodoMesConta_D.Value        := edtDebito.Text;
        dm.IBTodoMesContap_D.Value       := et1.Text;
        dm.IBTodoMesNOMENCLATURA1.Value  := label12.Caption;
        dm.IBTodoMesContap_C.Value       := et2.Text;
        dm.IBTodoMesNOMENCLATURA2.Value  := label13.Caption;
        dm.IBTodoMesConta_C.Value        := edtCredito.Text;

        dm.IBTodoMesMes.Value         := (Components[I] as TEdit).Tag;
        if RadioButton1.checked = true then begin
        Case (Components[I] as TEdit).Tag of
          1: DM.IBTodoMesHistorico.Value     := edtHistorico.Text + ´ ´+ Edit2.Text;
          2: DM.IBTodoMesHistorico.Value     := edtHistorico.Text + ´ ´+ Edit3.Text;
          3: DM.IBTodoMesHistorico.Value     := edtHistorico.Text + ´ ´+ Edit4.Text;
          4: DM.IBTodoMesHistorico.Value     := edtHistorico.Text + ´ ´+ Edit5.Text;
          5: DM.IBTodoMesHistorico.Value     := edtHistorico.Text + ´ ´+ Edit6.Text;
          6: DM.IBTodoMesHistorico.Value     := edtHistorico.Text + ´ ´+ Edit7.Text;
          7: DM.IBTodoMesHistorico.Value     := edtHistorico.Text + ´ ´+ Edit8.Text;
          8: DM.IBTodoMesHistorico.Value     := edtHistorico.Text + ´ ´+ Edit9.Text;
          9: DM.IBTodoMesHistorico.Value     := edtHistorico.Text + ´ ´+ Edit10.Text;
          10: DM.IBTodoMesHistorico.Value    := edtHistorico.Text + ´ ´+ Edit11.Text;
          11: DM.IBTodoMesHistorico.Value    := edtHistorico.Text + ´ ´+ Edit12.Text;
          12: DM.IBTodoMesHistorico.Value    := edtHistorico.Text + ´ ´+ Edit13.Text;
        end; //pertence ao case
        end else begin//pertence ao radiobutton
           dm.IBTodoMesHistorico.Value   := edtHistorico.Text;
        end; // final do if
         {SValor deixei como variavel Global - Variavel sValor recebendo o valor que contem no componente edtValorPadrao}
         sValor := edtValorPadrao.Text;
         {transforma a variavel sValor para receber valores com ponto e virgula tipo 1.000,00}
         sValor := stringreplace(sValor, ´.´, ´´, [rfReplaceAll]);
        {Case recebendo a variavel sValor}
        Case (Components[I] as TEdit).Tag of
          1: DM.IBTodoMesValor.Value     := StrToCurr( sValor );
          2: DM.IBTodoMesValor.Value     := StrToCurr( sValor );
          3: DM.IBTodoMesValor.Value     := StrToCurr( sValor );
          4: DM.IBTodoMesValor.Value     := StrToCurr( sValor );
          5: DM.IBTodoMesValor.Value     := StrToCurr( sValor );
          6: DM.IBTodoMesValor.Value     := StrToCurr( sValor );
          7: DM.IBTodoMesValor.Value     := StrToCurr( sValor );
          8: DM.IBTodoMesValor.Value     := StrToCurr( sValor );
          9: DM.IBTodoMesValor.Value     := StrToCurr( sValor );
          10: DM.IBTodoMesValor.Value    := StrToCurr( sValor );
          11: DM.IBTodoMesValor.Value    := StrToCurr( sValor );
          12: DM.IBTodoMesValor.Value    := StrToCurr( sValor );
        end;

        Case (Components[I] as TEdit).Tag of
          1: DM.IBTodoMesdatalcto.Value     :=strtodate( ´31/01/´+edtAno.Text );
          2: DM.IBTodoMesdatalcto.Value     :=strtodate( ´28/02/´+edtAno.Text );
          3: DM.IBTodoMesdatalcto.Value     :=strtodate( ´31/03/´+edtAno.Text );
          4: DM.IBTodoMesdatalcto.Value     :=strtodate( ´30/04/´+edtAno.Text );
          5: DM.IBTodoMesdatalcto.Value     :=strtodate( ´31/05/´+edtAno.Text );
          6: DM.IBTodoMesdatalcto.Value     :=strtodate( ´30/06/´+edtAno.Text );
          7: DM.IBTodoMesdatalcto.Value     :=strtodate( ´31/07/´+edtAno.Text );
          8: DM.IBTodoMesdatalcto.Value     :=strtodate( ´31/08/´+edtAno.Text );
          9: DM.IBTodoMesdatalcto.Value     :=strtodate( ´30/09/´+edtAno.Text );
          10: DM.IBTodoMesdatalcto.Value    :=strtodate( ´31/10/´+edtAno.Text );
          11: DM.IBTodoMesdatalcto.Value    :=strtodate( ´30/11/´+edtAno.Text );
          12: DM.IBTodoMesdatalcto.Value    :=strtodate( ´31/12/´+edtAno.Text );
        end;
//****************************************debitos***********************************
        {Passando para a Tabela Debito - IBDebito_MesTotal}
        dm.IBDebito_MesTotal.Append; {para incluir na Tabela usando um DataSet}
        {passando os dados do edit para o DataSet}
        dm.IBDebito_MesTotalano.Value            := edtAno.Text;
        dm.IBDebito_MesTotalConta_D.Value        := edtDebito.Text;
        dm.IBDebito_MesTotalContap_D.Value       := et1.Text;
        dm.IBDebito_MesTotalNOMENCLATURA1.Value  := label12.Caption;
        dm.IBDebito_MesTotalDC.Value             := ´D´;
        dm.IBDebito_MesTotalMes.Value            := (Components[I] as TEdit).Tag;
        if RadioButton1.checked = true then begin
        Case (Components[I] as TEdit).Tag of
          1: DM.IBDebito_MesTotalHistorico.Value     := edtHistorico.Text + ´ ´+ Edit2.Text;
          2: DM.IBDebito_MesTotalHistorico.Value     := edtHistorico.Text + ´ ´+ Edit3.Text;
          3: DM.IBDebito_MesTotalHistorico.Value     := edtHistorico.Text + ´ ´+ Edit4.Text;
          4: DM.IBDebito_MesTotalHistorico.Value     := edtHistorico.Text + ´ ´+ Edit5.Text;
          5: DM.IBDebito_MesTotalHistorico.Value     := edtHistorico.Text + ´ ´+ Edit6.Text;
          6: DM.IBDebito_MesTotalHistorico.Value     := edtHistorico.Text + ´ ´+ Edit7.Text;
          7: DM.IBDebito_MesTotalHistorico.Value     := edtHistorico.Text + ´ ´+ Edit8.Text;
          8: DM.IBDebito_MesTotalHistorico.Value     := edtHistorico.Text + ´ ´+ Edit9.Text;
          9: DM.IBDebito_MesTotalHistorico.Value     := edtHistorico.Text + ´ ´+ Edit10.Text;
         10: DM.IBDebito_MesTotalHistorico.Value     := edtHistorico.Text + ´ ´+ Edit11.Text;
         11: DM.IBDebito_MesTotalHistorico.Value     := edtHistorico.Text + ´ ´+ Edit12.Text;
         12: DM.IBDebito_MesTotalHistorico.Value     := edtHistorico.Text + ´ ´+ Edit13.Text;
        end; //pertence ao case
        end else begin//pertence ao radiobutton
           dm.IBDebito_MesTotalHistorico.Value   := edtHistorico.Text;
        end; // final do if
         {SValor deixei como variavel Global - Variavel sValor recebendo o valor que contem no componente edtValorPadrao}
         sValor := edtValorPadrao.Text;
         {transforma a variavel sValor para receber valores com ponto e virgula tipo 1.000,00}
         sValor := stringreplace(sValor, ´.´, ´´, [rfReplaceAll]);
        {Case recebendo a variavel sValor}
        Case (Components[I] as TEdit).Tag of
          1: DM.IBDebito_MesTotalValor.Value     := StrToCurr( sValor );
          2: DM.IBDebito_MesTotalValor.Value     := StrToCurr( sValor );
          3: DM.IBDebito_MesTotalValor.Value     := StrToCurr( sValor );
          4: DM.IBDebito_MesTotalValor.Value     := StrToCurr( sValor );
          5: DM.IBDebito_MesTotalValor.Value     := StrToCurr( sValor );
          6: DM.IBDebito_MesTotalValor.Value     := StrToCurr( sValor );
          7: DM.IBDebito_MesTotalValor.Value     := StrToCurr( sValor );
          8: DM.IBDebito_MesTotalValor.Value     := StrToCurr( sValor );
          9: DM.IBDebito_MesTotalValor.Value     := StrToCurr( sValor );
         10: DM.IBDebito_MesTotalValor.Value     := StrToCurr( sValor );
         11: DM.IBDebito_MesTotalValor.Value     := StrToCurr( sValor );
         12: DM.IBDebito_MesTotalValor.Value     := StrToCurr( sValor );
        end;

        Case (Components[I] as TEdit).Tag of
          1: DM.IBDebito_MesTotaldatalcto.Value     :=strtodate( ´31/01/´+edtAno.Text );
          2: DM.IBDebito_MesTotaldatalcto.Value     :=strtodate( ´28/02/´+edtAno.Text );
          3: DM.IBDebito_MesTotaldatalcto.Value     :=strtodate( ´31/03/´+edtAno.Text );
          4: DM.IBDebito_MesTotaldatalcto.Value     :=strtodate( ´30/04/´+edtAno.Text );
          5: DM.IBDebito_MesTotaldatalcto.Value     :=strtodate( ´31/05/´+edtAno.Text );
          6: DM.IBDebito_MesTotaldatalcto.Value     :=strtodate( ´30/06/´+edtAno.Text );
          7: DM.IBDebito_MesTotaldatalcto.Value     :=strtodate( ´31/07/´+edtAno.Text );
          8: DM.IBDebito_MesTotaldatalcto.Value     :=strtodate( ´31/08/´+edtAno.Text );
          9: DM.IBDebito_MesTotaldatalcto.Value     :=strtodate( ´30/09/´+edtAno.Text );
         10: DM.IBDebito_MesTotaldatalcto.Value     :=strtodate( ´31/10/´+edtAno.Text );
         11: DM.IBDebito_MesTotaldatalcto.Value     :=strtodate( ´30/11/´+edtAno.Text );
         12: DM.IBDebito_MesTotaldatalcto.Value     :=strtodate( ´31/12/´+edtAno.Text );
        end;
//****************************************************creditos*****************************
        {Passando para a Tabela Debito - IBDebito_MesTotal}
        dm.IBCredito_MesTotal.Append; {para incluir na Tabela usando um DataSet}
        {passando os dados do edit para o DataSet}
        dm.IBCredito_MesTotalano.Value            := edtAno.Text;
        dm.IBCredito_MesTotalConta_C.Value        := edtCredito.Text;
        dm.IBCredito_MesTotalContap_C.Value       := et2.Text;
        dm.IBCredito_MesTotalNOMENCLATURA2.Value  := label13.Caption;
        dm.IBCredito_MesTotalDC.Value             := ´C´;
        dm.IBCredito_MesTotalMes.Value            := (Components[I] as TEdit).Tag;
        if RadioButton1.checked = true then begin
        Case (Components[I] as TEdit).Tag of
          1: DM.IBCredito_MesTotalHistorico.Value     := edtHistorico.Text + ´ ´+ Edit2.Text;
          2: DM.IBCredito_MesTotalHistorico.Value     := edtHistorico.Text + ´ ´+ Edit3.Text;
          3: DM.IBCredito_MesTotalHistorico.Value     := edtHistorico.Text + ´ ´+ Edit4.Text;
          4: DM.IBCredito_MesTotalHistorico.Value     := edtHistorico.Text + ´ ´+ Edit5.Text;
          5: DM.IBCredito_MesTotalHistorico.Value     := edtHistorico.Text + ´ ´+ Edit6.Text;
          6: DM.IBCredito_MesTotalHistorico.Value     := edtHistorico.Text + ´ ´+ Edit7.Text;
          7: DM.IBCredito_MesTotalHistorico.Value     := edtHistorico.Text + ´ ´+ Edit8.Text;
          8: DM.IBCredito_MesTotalHistorico.Value     := edtHistorico.Text + ´ ´+ Edit9.Text;
          9: DM.IBCredito_MesTotalHistorico.Value     := edtHistorico.Text + ´ ´+ Edit10.Text;
         10: DM.IBCredito_MesTotalHistorico.Value     := edtHistorico.Text + ´ ´+ Edit11.Text;
         11: DM.IBCredito_MesTotalHistorico.Value     := edtHistorico.Text + ´ ´+ Edit12.Text;
         12: DM.IBCredito_MesTotalHistorico.Value     := edtHistorico.Text + ´ ´+ Edit13.Text;
        end; //pertence ao case
        end else begin//pertence ao radiobutton
           dm.IBCredito_MesTotalHistorico.Value   := edtHistorico.Text;
        end; // final do if
         {SValor deixei como variavel Global - Variavel sValor recebendo o valor que contem no componente edtValorPadrao}
         sValor := edtValorPadrao.Text;
         {transforma a variavel sValor para receber valores com ponto e virgula tipo 1.000,00}
         sValor := stringreplace(sValor, ´.´, ´´, [rfReplaceAll]);
        {Case recebendo a variavel sValor}
        Case (Components[I] as TEdit).Tag of
          1: DM.IBCredito_MesTotalValor.Value     := StrToCurr( sValor );
          2: DM.IBCredito_MesTotalValor.Value     := StrToCurr( sValor );
          3: DM.IBCredito_MesTotalValor.Value     := StrToCurr( sValor );
          4: DM.IBCredito_MesTotalValor.Value     := StrToCurr( sValor );
          5: DM.IBCredito_MesTotalValor.Value     := StrToCurr( sValor );
          6: DM.IBCredito_MesTotalValor.Value     := StrToCurr( sValor );
          7: DM.IBCredito_MesTotalValor.Value     := StrToCurr( sValor );
          8: DM.IBCredito_MesTotalValor.Value     := StrToCurr( sValor );
          9: DM.IBCredito_MesTotalValor.Value     := StrToCurr( sValor );
         10: DM.IBCredito_MesTotalValor.Value     := StrToCurr( sValor );
         11: DM.IBCredito_MesTotalValor.Value     := StrToCurr( sValor );
         12: DM.IBCredito_MesTotalValor.Value     := StrToCurr( sValor );
        end;

        Case (Components[I] as TEdit).Tag of
          1: DM.IBCredito_MesTotaldatalcto.Value     :=strtodate( ´31/01/´+edtAno.Text );
          2: DM.IBCredito_MesTotaldatalcto.Value     :=strtodate( ´28/02/´+edtAno.Text );
          3: DM.IBCredito_MesTotaldatalcto.Value     :=strtodate( ´31/03/´+edtAno.Text );
          4: DM.IBCredito_MesTotaldatalcto.Value     :=strtodate( ´30/04/´+edtAno.Text );
          5: DM.IBCredito_MesTotaldatalcto.Value     :=strtodate( ´31/05/´+edtAno.Text );
          6: DM.IBCredito_MesTotaldatalcto.Value     :=strtodate( ´30/06/´+edtAno.Text );
          7: DM.IBCredito_MesTotaldatalcto.Value     :=strtodate( ´31/07/´+edtAno.Text );
          8: DM.IBCredito_MesTotaldatalcto.Value     :=strtodate( ´31/08/´+edtAno.Text );
          9: DM.IBCredito_MesTotaldatalcto.Value     :=strtodate( ´30/09/´+edtAno.Text );
         10: DM.IBCredito_MesTotaldatalcto.Value     :=strtodate( ´31/10/´+edtAno.Text );
         11: DM.IBCredito_MesTotaldatalcto.Value     :=strtodate( ´30/11/´+edtAno.Text );
         12: DM.IBCredito_MesTotaldatalcto.Value     :=strtodate( ´31/12/´+edtAno.Text );
        end;
        //começo do try/except
      try
        dm.IBTodoMes.Post; {para gravar na tabela}
        dm.IBTodoMes.ApplyUpdates;
        dm.IBDebito_MesTotal.Post; {para gravar na tabela IBDebito_MesTotal}
        dm.IBDebito_MesTotal.ApplyUpdates;
        dm.IBCredito_MesTotal.Post; {para gravar na tabela IBCredito_MesTotal}
        dm.IBCredito_MesTotal.ApplyUpdates;
        if not dm.tLConta.InTransaction then dm.tLConta.StartTransaction; // Reinicia o transaction
        //dm.tLConta.Commit; //comitar o transaction
        dm.tLConta.CommitRetaining;
        DM.IBQTODOMES.Close;
        DM.IBQTODOMES.Sql.Clear;
        DM.IBQTODOMES.Sql.Add(´select * from todomesconta order by sequencia desc´);
        DM.IBQTODOMES.Open;
      except
        on E:Exception do
        begin
           dm.TLConta.RollBackRetaining; //Rollback no Trasaction
           ShowMessage(´Falha na Inclusão dos Dados!´#1310´ Mensagem: ´+E.Message);
        end;
      end;//final do try/except
     end;
  end;
   {Para abir a tabela e atualizar o dbgrid}
        DM.IBQTODOMES.Close;
        DM.IBQTODOMES.Sql.Clear;
        DM.IBQTODOMES.Sql.Add(´select * from todomesconta order by sequencia desc´);
        DM.IBQTODOMES.Open;
end;


Soh gostaria de saber se essa eh a maneira correta de se jogar os valores nas tres tabelas?

Grato
adriano


Responder

Gostei + 0

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

Aceitar