nsouza Postado Agosto 22, 2009 Denunciar Share Postado Agosto 22, 2009 Colegas,meu problema é que o procedimento abaixo não insere todos os registos na tabela.Ele tem que selecionar todos os registros da tabela morador, no exemplo abaixo a tabela tem 3 registrosmas quando clico no botão esta inserindo apenas um registro.Alguém poderia ajudar, por favor?procedure TF_GerarInadimplente.SpeedButton1Click(Sender: TObject);Var mes_ano:string; VarDate: TDate;begin DM.CDs_Inadimplente.close; DM.Cds_Inadimplente.open; VarDate:= strToDate(mkeDataInicio.text);// Seleciona todos os registros da tabela morador With DM.V_Morador do begin Active:= false; SQL.Clear; SQL.Add('Select * from morador'); Active:= true; end;// Codigo para inserir registros na tabela inadimplencia If DM.V_Morador.fieldbyname('codapt').AsString <> '' then begin DM.Cds_Inadimplente.append; DM.CDs_Inadimplentecodapt.AsString := DM.V_Morador.fieldbyname('codapt').asstring; DM.Cds_InadimplenteCodCondominio.AsString := DM.V_Morador.fieldbyname('codCondominio').asstring; mes_ano:= IntToStr(MonthOf(VarDate)) + '/' + intToStr(YearOf(VarDate)); DM.Cds_InadimplenteMesAno.asstring := mes_ano; DM.Cds_Inadimplente.post; end; DM.Cds_Inadimplente.ApplyUpdates(-1); ShowMessage ('Foi gerada a tabela referente ao mês de ' + mes_ano + ' incluindo todos os inadimplentes');End; Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Jhonas Postado Agosto 22, 2009 Denunciar Share Postado Agosto 22, 2009 mas quando clico no botão esta inserindo apenas um registro.Faça a alteração no códigoprocedure TF_GerarInadimplente.SpeedButton1Click(Sender: TObject); Var mes_ano:string; VarDate: TDate; i : integer; begin DM.CDs_Inadimplente.close; DM.Cds_Inadimplente.open; VarDate:= strToDate(mkeDataInicio.text); // Seleciona todos os registros da tabela morador With DM.V_Morador do begin Active:= false; SQL.Clear; SQL.Add('Select * from morador'); Active:= true; end; For i := 1 to DM.V_Morador.RecordCount do begin // Codigo para inserir registros na tabela inadimplencia If DM.V_Morador.fieldbyname('codapt').AsString <> '' then begin DM.Cds_Inadimplente.append; DM.CDs_Inadimplentecodapt.AsString := DM.V_Morador.fieldbyname('codapt').asstring; DM.Cds_InadimplenteCodCondominio.AsString := DM.V_Morador.fieldbyname('codCondominio').asstring; mes_ano:= IntToStr(MonthOf(VarDate)) + '/' + intToStr(YearOf(VarDate)); DM.Cds_InadimplenteMesAno.asstring := mes_ano; DM.Cds_Inadimplente.post; DM.Cds_Inadimplente.ApplyUpdates(-1); end; DM.V_Morador.Next; end; ShowMessage ('Foi gerada a tabela referente ao mês de ' + mes_ano + ' incluindo todos os inadimplentes'); End;abraço Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 nsouza Postado Agosto 22, 2009 Autor Denunciar Share Postado Agosto 22, 2009 (editado) mas quando clico no botão esta inserindo apenas um registro.Faça a alteração no códigoprocedure TF_GerarInadimplente.SpeedButton1Click(Sender: TObject); Var mes_ano:string; VarDate: TDate; i : integer; begin DM.CDs_Inadimplente.close; DM.Cds_Inadimplente.open; VarDate:= strToDate(mkeDataInicio.text); // Seleciona todos os registros da tabela morador With DM.V_Morador do begin Active:= false; SQL.Clear; SQL.Add('Select * from morador'); Active:= true; end; For i := 1 to DM.V_Morador.RecordCount do begin // Codigo para inserir registros na tabela inadimplencia If DM.V_Morador.fieldbyname('codapt').AsString <> '' then begin DM.Cds_Inadimplente.append; DM.CDs_Inadimplentecodapt.AsString := DM.V_Morador.fieldbyname('codapt').asstring; DM.Cds_InadimplenteCodCondominio.AsString := DM.V_Morador.fieldbyname('codCondominio').asstring; mes_ano:= IntToStr(MonthOf(VarDate)) + '/' + intToStr(YearOf(VarDate)); DM.Cds_InadimplenteMesAno.asstring := mes_ano; DM.Cds_Inadimplente.post; DM.Cds_Inadimplente.ApplyUpdates(-1); end; DM.V_Morador.Next; end; ShowMessage ('Foi gerada a tabela referente ao mês de ' + mes_ano + ' incluindo todos os inadimplentes'); End;abraçoCaro Jhonas,Funcionou, muito obrigado.Pra ficar mais melhor eu gostaria de implementar um tratamenteo de erro usando o Tryporque que quando clico no botão da a mensagem de erro que esta com registro duplicado eu gostariade uma mensagem de erro mais amigavel para o usuario.Tentei fazer mas continuou dando a mensagem em inglês do sistema, e para cada registro disparava uma mensagemao invés de da a mensagem no fim da importação.Poderia analisar para mim por favor?Fiz assim:try DM.Cds_Inadimplente.Post; DM.Cds_Inadimplente.ApplyUpdates(-1);Except on E: Exception do begin MessageDlg('Erro ao salvar o registro.'+#13+#10+E.Message,mtError,[mbOk],0); DM.Cds_Inadimplente.CancelUpdates;end;end; DM.V_Morador.Next;end; ShowMessage ('Foi gerada a tabela referente ao mês de ' + mes_ano + ' incluindo todos os inadimplentes');End; Editado Agosto 23, 2009 por nsouza Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Jhonas Postado Agosto 24, 2009 Denunciar Share Postado Agosto 24, 2009 Principais ExceçõesO Delphi define muitas exceções, para cada erro existe uma exceção correspondente.Classe Descrição Exception Exceção genérica, usada apenas como ancestral de todas as outras exceções EAbort Exceção silenciosa, pode ser gerada pelo procedimento Abort e não mostra nenhuma mensagem EAccessViolation Acesso inválido à memória, geralmente ocorre com objetos não inicializados EConvertError Erro de conversão de tipos EDivByZero Divisão de inteiro por zero EInOutError Erro de Entrada ou Saída reportado pelo sistema operacional EIntOverFlow Resultado de um cálculo inteiro excedeu o limite EInvalidCast TypeCast inválido com o operador as EInvalidOp Operação inválida com número de ponto flutuante EOutOfMemory Memória insuficiente EOverflow Resultado de um cálculo com número real excedeu o limite ERangeError Valor excede o limite do tipo inteiro ao qual foi atribuída EUnderflow Resultado de um cálculo com número real é menor que a faixa válida EVariantError Erro em operação com variant EZeroDivide Divisão de real por zero EDatabaseError Erro genérico de banco de dados, geralmente não é usado diretamente EDBEngineError Erro da BDE, descende de EDatabaseError e traz dados que podem identificar o errotry DM.Cds_Inadimplente.Post; DM.Cds_Inadimplente.ApplyUpdates(-1); [b]Except on E: Exception do[/b] begin MessageDlg('Erro ao salvar o registro.'+#13+#10+E.Message,mtError,[mbOk],0); DM.Cds_Inadimplente.CancelUpdates; end; end; DM.V_Morador.Next; end; ShowMessage ('Foi gerada a tabela referente ao mês de ' + mes_ano + ' incluindo todos os inadimplentes'); End; Veja que voce colocou a classe basica das Exceções e dela são derivadas todas as outras Exception Base class EAbort Abort without dialog EAbstractError Abstract method error AssertionFailed Assert call failed EBitsError Boolean array error ECommonCalendarError Calendar calc error EDateTimeError DateTime calc error EMonthCalError Month calc error EConversionError Raised by Convert EConvertError Object convert error EDatabaseError Database error EExternal Hardware/Windows error EAccessViolation Access violation EControlC User abort occured EExternalException Other Internal error EIntError Integer calc error EDivByZero Integer Divide by zero EIntOverflow Integer overflow ERangeError Out of value range EMathError Floating point error EInvalidArgument Bad argument value EInvalidOp Inappropriate operation EOverflow Value too large EUnderflow Value too small EZeroDivide Floating Divide by zero EStackOverflow Severe Delphi problem EHeapException Dynamic memory problem EInvalidPointer Bad memory pointer EOutOfMemory Cannot allocate memory EInOutError IO error EInvalidCast Object casting error EInvalidOperation Bad component op EMenuError Menu item error EOSError Operating system error EParserError Parsing error EPrinter Printer error EPropertyError Class property error# EPropReadOnly Invalid property access EPropWriteOnly Invalid property access EThread Thread error EVariantError Variant problem Primeiro veja que tipo de exceção esta sendo gerada para poder tratar esse erro try DM.Cds_Inadimplente.Post; DM.Cds_Inadimplente.ApplyUpdates(-1); [b]Except on E: Exception do[/b] begin ShowMessage('Exception class name = '+E.ClassName); ShowMessage('Exception message = '+E.Message); DM.Cds_Inadimplente.CancelUpdates; end; end; DM.V_Morador.Next; end; ShowMessage ('Foi gerada a tabela referente ao mês de ' + mes_ano + ' incluindo todos os inadimplentes'); End;http://scriptbrasil.com.br/forum/index.php...te=exce%E7%F5esabraço Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 nsouza Postado Agosto 25, 2009 Autor Denunciar Share Postado Agosto 25, 2009 Principais ExceçõesO Delphi define muitas exceções, para cada erro existe uma exceção correspondente.Classe Descrição Exception Exceção genérica, usada apenas como ancestral de todas as outras exceções EAbort Exceção silenciosa, pode ser gerada pelo procedimento Abort e não mostra nenhuma mensagem EAccessViolation Acesso inválido à memória, geralmente ocorre com objetos não inicializados EConvertError Erro de conversão de tipos EDivByZero Divisão de inteiro por zero EInOutError Erro de Entrada ou Saída reportado pelo sistema operacional EIntOverFlow Resultado de um cálculo inteiro excedeu o limite EInvalidCast TypeCast inválido com o operador as EInvalidOp Operação inválida com número de ponto flutuante EOutOfMemory Memória insuficiente EOverflow Resultado de um cálculo com número real excedeu o limite ERangeError Valor excede o limite do tipo inteiro ao qual foi atribuída EUnderflow Resultado de um cálculo com número real é menor que a faixa válida EVariantError Erro em operação com variant EZeroDivide Divisão de real por zero EDatabaseError Erro genérico de banco de dados, geralmente não é usado diretamente EDBEngineError Erro da BDE, descende de EDatabaseError e traz dados que podem identificar o errotry DM.Cds_Inadimplente.Post; DM.Cds_Inadimplente.ApplyUpdates(-1); [b]Except on E: Exception do[/b] begin MessageDlg('Erro ao salvar o registro.'+#13+#10+E.Message,mtError,[mbOk],0); DM.Cds_Inadimplente.CancelUpdates; end; end; DM.V_Morador.Next; end; ShowMessage ('Foi gerada a tabela referente ao mês de ' + mes_ano + ' incluindo todos os inadimplentes'); End; Veja que voce colocou a classe basica das Exceções e dela são derivadas todas as outras Exception Base class EAbort Abort without dialog EAbstractError Abstract method error AssertionFailed Assert call failed EBitsError Boolean array error ECommonCalendarError Calendar calc error EDateTimeError DateTime calc error EMonthCalError Month calc error EConversionError Raised by Convert EConvertError Object convert error EDatabaseError Database error EExternal Hardware/Windows error EAccessViolation Access violation EControlC User abort occured EExternalException Other Internal error EIntError Integer calc error EDivByZero Integer Divide by zero EIntOverflow Integer overflow ERangeError Out of value range EMathError Floating point error EInvalidArgument Bad argument value EInvalidOp Inappropriate operation EOverflow Value too large EUnderflow Value too small EZeroDivide Floating Divide by zero EStackOverflow Severe Delphi problem EHeapException Dynamic memory problem EInvalidPointer Bad memory pointer EOutOfMemory Cannot allocate memory EInOutError IO error EInvalidCast Object casting error EInvalidOperation Bad component op EMenuError Menu item error EOSError Operating system error EParserError Parsing error EPrinter Printer error EPropertyError Class property error# EPropReadOnly Invalid property access EPropWriteOnly Invalid property access EThread Thread error EVariantError Variant problem Primeiro veja que tipo de exceção esta sendo gerada para poder tratar esse erro try DM.Cds_Inadimplente.Post; DM.Cds_Inadimplente.ApplyUpdates(-1); [b]Except on E: Exception do[/b] begin ShowMessage('Exception class name = '+E.ClassName); ShowMessage('Exception message = '+E.Message); DM.Cds_Inadimplente.CancelUpdates; end; end; DM.V_Morador.Next; end; ShowMessage ('Foi gerada a tabela referente ao mês de ' + mes_ano + ' incluindo todos os inadimplentes'); End;http://scriptbrasil.com.br/forum/index.php...te=exce%E7%F5esabraçoCaro Jhonasfiz o seu exemplo usando usa explicação da a mensagem EDataBaseError with message 'Duplicate entry '201-8/2009' for key 1.Tentei usar a classe EDataBaseError, mas deu que era desconhecida e continou dando a mesma mensaem em ingles.Qual classe devo aplicar? Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Jhonas Postado Agosto 25, 2009 Denunciar Share Postado Agosto 25, 2009 Caro Jhonasfiz o seu exemplo usando usa explicação da a mensagem EDataBaseError with message 'Duplicate entry '201-8/2009' for key 1.Tentei usar a classe EDataBaseError, mas deu que era desconhecida e continou dando a mesma mensaem em ingles.Qual classe devo aplicar? mensagem EDataBaseError with message 'Duplicate entry '201-8/2009' for key 1.mensagem EDataBaseError with message 'Entrada Duplicada 201-8/2009' para chave 1O erro está bem claro ... campos usados como chaves não podem ter valores duplicadosExemplo .... Seria algo assim:Uses DB; procedure TForm1.btnOkClick(Sender: TObject); var erro : boolean; begin erro := false; try DM.Cds_Inadimplente.Post; on EDatabaseError do Begin MessageDlg ('Erro! Valor Não Permitido!' + , mtError,[mbCancel],0); DM.Cds_Inadimplente.CancelUpdates; erro := true; end; end; //try if not erro then begin DM.Cds_Inadimplente.ApplyUpdates(-1); ShowMessage ('Foi gerada a tabela referente ao mês de ' + mes_ano + ' incluindo todos os inadimplentes'); end;abraço Citar Link para o comentário Compartilhar em outros sites More sharing options...
Pergunta
nsouza
Colegas,
meu problema é que o procedimento abaixo não insere todos os registos na tabela.
Ele tem que selecionar todos os registros da tabela morador, no exemplo abaixo a tabela tem 3 registros
mas quando clico no botão esta inserindo apenas um registro.
Alguém poderia ajudar, por favor?
procedure TF_GerarInadimplente.SpeedButton1Click(Sender: TObject);
Var mes_ano:string;
VarDate: TDate;
begin
DM.CDs_Inadimplente.close;
DM.Cds_Inadimplente.open;
VarDate:= strToDate(mkeDataInicio.text);
// Seleciona todos os registros da tabela morador
With DM.V_Morador do
begin
Active:= false;
SQL.Clear;
SQL.Add('Select * from morador');
Active:= true;
end;
// Codigo para inserir registros na tabela inadimplencia
If DM.V_Morador.fieldbyname('codapt').AsString <> '' then
begin
DM.Cds_Inadimplente.append;
DM.CDs_Inadimplentecodapt.AsString := DM.V_Morador.fieldbyname('codapt').asstring;
DM.Cds_InadimplenteCodCondominio.AsString := DM.V_Morador.fieldbyname('codCondominio').asstring;
mes_ano:= IntToStr(MonthOf(VarDate)) + '/' + intToStr(YearOf(VarDate));
DM.Cds_InadimplenteMesAno.asstring := mes_ano;
DM.Cds_Inadimplente.post;
end;
DM.Cds_Inadimplente.ApplyUpdates(-1);
ShowMessage ('Foi gerada a tabela referente ao mês de ' + mes_ano + ' incluindo todos os inadimplentes');
End;
Link para o comentário
Compartilhar em outros sites
5 respostass a esta questão
Posts Recomendados
Participe da discussão
Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.