Fórum Duvida como gravar Stored Procedure - Erro List index out of #57684
14/01/2007
0
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
Curtir tópico
+ 0Posts
14/01/2007
Adriano_servitec
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
Gostei + 0
15/01/2007
Emerson Nascimento
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;Gostei + 0
15/01/2007
Adriano_servitec
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;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.
Gostei + 0
17/01/2007
Adriano_servitec
[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.
Gostei + 0
17/01/2007
Adriano_servitec
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
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)