Ir para conteúdo
Fórum Script Brasil
  • 0

Consulta insere apenas um valor


nsouza

Pergunta

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

  • 0
mas quando clico no botão esta inserindo apenas um registro.

Faça a alteração no código

procedure 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

Link para o comentário
Compartilhar em outros sites

  • 0
mas quando clico no botão esta inserindo apenas um registro.

Faça a alteração no código

procedure 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

Caro Jhonas,

Funcionou, muito obrigado.

Pra ficar mais melhor eu gostaria de implementar um tratamenteo de erro usando o Try

porque que quando clico no botão da a mensagem de erro que esta com registro duplicado eu gostaria

de 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 mensagem

ao 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 por nsouza
Link para o comentário
Compartilhar em outros sites

  • 0

Principais Exceções

O 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 erro

try
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%F5es

abraço

Link para o comentário
Compartilhar em outros sites

  • 0
Principais Exceções

O 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 erro

try
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%F5es

abraço

Caro Jhonas

fiz 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?

Link para o comentário
Compartilhar em outros sites

  • 0
Caro Jhonas

fiz 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 1

O erro está bem claro ... campos usados como chaves não podem ter valores duplicados

Exemplo .... 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

Link para o comentário
Compartilhar em outros sites

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.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,4k
×
×
  • Criar Novo...