Fórum Erro ao Deletar o Último Registro #253740

07/10/2004

0

Olá pessoal, tudo bem? Tenho uma aplicação em Delphi 7 + dbExpress + Firebird 1.5..

Tenho uma tela pra visualização de revistas e outra pra cadastro. Na tela de visualização eu tenho o botao Apagar.. quando clicado ele exibe a mensagem perguntando se o usuario quer mesmo deletar o registro ou cancelar..

Bom, a visualizaçao é dividida pro Grupos e SubGrupos.. o Usuário seleciona um grupo, e após selecionar o subgrupo, sao listadas todas as revistas q estejam dentro deles.. ou seja.. eu posso ter 100 revistas na tabela, mas se só tiver 10 revistas naquele grupo e subgrupo, ele só me lista as 10.. até aí tudo certo.. e, se eu for apagar as 10 revistas por exemplo, ele apaga 9.. quando chega a última revista dá o seguinte erro:

Project Proj.exe raised exception class EUIBError with message ´conversion error from string""
Overflow occurred during data type conversion.
Error code: 14´. Process Stopped.


O q pode ser isso???



Allan Elias Ramos :roll:


Aersoftware

Aersoftware

Responder

Posts

08/10/2004

Osocram

provavelmente eh erro d logica... parece q esta passando algum campo ´null´


Responder

Gostei + 0

08/10/2004

Rômulo Barros

:arrow: [color=blue:702a4dfde1][b:702a4dfde1]Se você postar o código, certamente iremos descobrir a causa do erro.[/b:702a4dfde1][/color:702a4dfde1]


Responder

Gostei + 0

08/10/2004

Aersoftware

Vou postar ele certinho quando chegar em casa... é basicamente um If, pro ShowMessage..

Se o botao Sim da Mensagem for clicado, ele deleta e da o ApllyUpdates..

Tanto q funciona pras demais revistas, somente a ultima ele trava..

E eu tenho outro form parecido com esse, q só lista historias dakela revista q funciona perfeitamente.. vou postar os códigos direitinho quando chegar em casa pra melhor entendimento.. :wink:



Allan Elias Ramos :roll:


Responder

Gostei + 0

08/10/2004

Aersoftware

provavelmente eh erro d logica... parece q esta passando algum campo ´null´


Entao acho q tem a ver com o código sql de pesquisa.. pois no evento OnCloseUp do LkUp q eu listo o subgrupo, ele tem o código pra listar todas revistas q tenha as chaves estrangeiras de grupo e subgrupos iguais as chaves primeirias dos mesmos...



Allan Elias Ramos :roll:


Responder

Gostei + 0

08/10/2004

Aersoftware

Como prometido.. o código abaixo é pra listar as revistas..

  if LkUpListaSubGrupos.Text <> ´´ then
    begin
      DmDados.ClientNacionais.Close;
      with DmDados.SqlNacionais do
        begin
          Close;
          CommandText :=
            ´Select * From TbRevNacionais Where FkCod_Grupo =´
            +IntToStr(LkUpListaGrupos.KeyValue)
            + ´And FkCod_SubGrupo= ´ +IntToStr(LkUpListaSubGrupos.KeyValue)
            + ´Order By NomeNumero Asc´;
          Open;
        end;
      DmDados.ClientNacionais.Open;
      StbNacionais.Panels[0].Text := ´Total de Revistas: ´+ IntToStr(DmDados.ClientNacionais.RecordCount);
      if DmDados.ClientNacionais.RecordCount = 0 then
        begin
            BtEditar.Enabled := False;
            BtApagar.Enabled := False;
            BtHistorias.Enabled := False;
            LbEditoras.Visible := False;
            LbMesAno.Visible := False;
        end
      else
        begin
            BtEditar.Enabled := True;
            BtApagar.Enabled := True;
            BtHistorias.Enabled := True;
            LbEditoras.Visible := True;
            LbMesAno.Visible := True;
        end;
    end;
end;


E o seguinte é pra apagar os registros.. o comando ´ListarApagar´ chama um procedimento com o código acima...

  If MessageBox(Handle, ´Tem certeza que deseja excluir esta Revista Nacional?´, ´Confirmar Exclusão´,
  Mb_YesNo + Mb_IconQuestion + Mb_DefButton2) = IdYes Then
    begin
      DmDados.ClientNacionais.Delete;
      DmDados.ClientNacionais.ApplyUpdates(0);
      ListarApagar;
    end
  else
    begin
      DmDados.ClientNacionais.Cancel;
    end;


Como eu falei, tenho outro form assim e funciona a exclusao do último arquivo..



Allan Elias Ramos :roll:


Responder

Gostei + 0

11/10/2004

Aersoftware

ninguém? :cry:



Allan Elias Ramos :wink:


Responder

Gostei + 0

18/10/2004

Aersoftware

Peguei os campos certinhos pra mostrar aki e descobrir o erro q aparece no 1º post.. é o seguinte..

Tenho um form de vizualização de revistas... o usuário tem q selecionar 2 LkUps pra listas a revista.. o 1º LookUp faz o seguinte:

  if LkUpListaGrupos.Text <> ´´ Then //Lista todos os subgrupos de um determinado grupo
    begin
      DbGridLista.Visible := True;
      LkUpListaSubGrupos.KeyValue := Null;
      LkUpListaSubGrupos.Enabled := True;
      DmDados.ClientSubGrupos.Close;
      With DmDados.SqlSubGrupos do
        begin
          Close;
          CommandText :=
            ´Select * From TbSubGrupos Where FkCod_Grupo =´
            +IntToStr(LkUpListaGrupos.KeyValue)
            + ´Order By NomeSubGrupo Asc´;
          Open;
        end;
      DmDados.ClientSubGrupos.Open;
      DmDados.ClientNacionais.Close;
      with DmDados.SqlNacionais do
        begin
          Close;
          CommandText :=
            ´Select * From TbRevNacionais Where FkCod_Grupo =´
            +IntToStr(LkUpListaGrupos.KeyValue)
            + ´And FkCod_SubGrupo = 0´
            + ´Order By NomeNumero´;
          Open;
        end;
      DmDados.ClientNacionais.Open;
    end;

end;


Depois com os SubGrupos ligados akele Grupo listados, no OnCloseUp do SubGrupos ele lista as revistas assim:

  if LkUpListaSubGrupos.Text <> ´´ then
    begin
      DmDados.ClientNacionais.Close;
      with DmDados.SqlNacionais do
        begin
          Close;
          CommandText :=
            ´Select * From TbRevNacionais Where FkCod_Grupo =´
            +IntToStr(LkUpListaGrupos.KeyValue)
            + ´And FkCod_SubGrupo= ´ +IntToStr(LkUpListaSubGrupos.KeyValue)
            + ´Order By NomeNumero´;
          Open;
        end;
      DmDados.ClientNacionais.Open;
      StbNacionais.Panels[0].Text := ´Total de Revistas: ´+ IntToStr(DmDados.ClientNacionais.RecordCount);
      if DmDados.ClientNacionais.RecordCount = 0 then
        begin
            BtEditar.Enabled := False;
            BtApagar.Enabled := False;
            BtHistorias.Enabled := False;
            LbEditoras.Visible := False;
            LbMesAno.Visible := False;
        end
      else
        begin
            BtEditar.Enabled := True;
            BtApagar.Enabled := True;
            BtHistorias.Enabled := True;
            LbEditoras.Visible := True;
            LbMesAno.Visible := True;
        end;
    end;
end;


Esse procedimento eu nomeie da ListarApagar, pq vai ser usado outras vezes.. no botão apagar tem o seguinte código:

  If MessageBox(Handle, ´Tem certeza que deseja excluir esta Revista Nacional? Todas histórias ligadas a ela também serão excluídas!´, ´Confirmar Exclusão´,
  Mb_YesNo + Mb_IconQuestion + Mb_DefButton2) = IdYes Then
    begin
      DmDados.ClientNacionais.Delete;
      DmDados.ClientNacionais.ApplyUpdates(0);
      ListarApagar;
    end
  else
    begin
      DmDados.ClientNacionais.Cancel;
    end;


Pra ele apagar e listar novamente as revistas..

Ele funciona até a última revista de determinado Grupo/SubGrupo.. na última da o erro do 1º post na hora de apagar...

Eu tenho tb um cadastro de histórias ligadas as revistas.. podem ser várias histórias em uma revista.. o processo é o mesmo, de mostrar e apagar.. e nesse cadastro funciona.. nao da erro nenhum ao deletar o último registro.. fica assim os códigos..

Procedimento para mostrar e para apagar.. q eu coloquei no OnShow.. como MostrarApagar..

  DmDados.ClientHistNac.Close;
    With DmDados.SqlHistNac do
      begin
        Close;
        CommandText :=
          ´Select * From TbHistNacionais Where FkCod_RevNac =´
          +QuotedStr(FrmVerNacionais.DbEdtCodRevista.Text)
          + ´Order By Ordem´;
        Open;
      end;
  DmDados.ClientHistNac.Open;
  LbNomeRevista.Caption := FrmVerNacionais.DbNomeNumero.Caption;
  StbHistorias.Panels[0].Text := ´Total de Histórias: ´ + IntToStr(DmDados.ClientHistNac.RecordCount);
  if DmDados.ClientHistNac.RecordCount = 0 then
    begin
      LbOriginal.Visible := False;
      BtEditar.Enabled := False;
      BtApagar.Enabled := False;
    end
  else
    begin
      LbOriginal.Visible := True;
      BtEditar.Enabled := True;
      BtApagar.Enabled := True;
    end;

end;


E no botão Apagar..

  If MessageBox(Handle, ´Tem certeza que deseja excluir esta História Nacional?´, ´Confirmar Exclusão´,
  Mb_YesNo + Mb_IconQuestion + Mb_DefButton2) = IdYes Then
    begin
      DmDados.ClientHistNac.Delete;
      DmDados.ClientHistNac.ApplyUpdates(0);
      MostrarApagar;
    end
  else
    begin
      DmDados.ClientHistNac.Cancel;
    end;


Ou seja, é praticamente a mesma coisa os dois.. na hora de deletar ele lista tudo denovo pra atualizar.. só q no primeiro cadastro, de revistas, ele da erro no último registro, no das histórias nao.. :cry:

Tentei explicar nos mínimos detalhes.. espero q consiga ajuda.. grato..



Allan Elias Ramos :roll:


Responder

Gostei + 0

20/10/2004

Aersoftware

Não posso perder esse tópico, essa dúvida ainda nao consegui resolver :cry:



Allan Elias Ramos :wink:


Responder

Gostei + 0

21/10/2004

Rodolpho123

Cara, acho que só vai dar para resolver o seu caso debugando o seu aplicativo, através do F8. Mas por via das dúvidas, tente dar o ApplyUpdates só no seu DataSet e não pelo seu IBDatabase.


Responder

Gostei + 0

22/10/2004

Aersoftware

Como faço pra debugar usando o F8? Eu não to usando o IbDataSet, to fazendo com o dbExpress... q ta ligado como SQLDataSet+Provider+ClientDataSet+DataSource..

O estranho é q é só no último q registro q da isso.. se eu tiver 10, 9 ele me apaga..



Allan Elias Ramos :cry:


Responder

Gostei + 0

02/11/2004

Aersoftware

Pessoal, estou postando mais uma vez aqui pra dizer q achei o erro e gostaria de compartilhar, caso alguém tenha alguma coisa parecida.. é o seguinte:

Como nesse form eu tenho duas Grids (uma pra exibir as edições das revistas e outra pra exibir as histórias ligadas nela revista), eu tinha o seguinte código no evento OnAfterScrool:

if Assigned(FrmVerNacionais) then //Exibir as Histórias da revista selecionada.. begin [b:f7fbee9cd5]if DmDados.ClientNacionais.RecordCount 0 then[/b:f7fbee9cd5] begin FrmVerNacionais.DbGridVerHistorias.DataSource := DmDados.DsHistNac; DmDados.ClientHistNac.Close; With DmDados.SqlHistNac do begin Close; CommandText := ´Select * From TbHistNacionais Where FkCod_RevNac =´ +QuotedStr(FrmVerNacionais.DbEdtCodRevista.Text) + ´Order By Ordem´; Open; end; DmDados.ClientHistNac.Open; end; end;


O erro esta justamente no if em negrito.. como era o último registro, na hora de listar a história ele não achava o parâmetro passado pra pesquisa, retornando o erro.. o erro seria sem esse if.. como coloquei o if, ele só faz essa pesquisa se o recordcount for diferente de 0, tendo algum registro pra ele procurar.. se não tiver, ele passa por essa pesquisa direto, evitando o erro..

Valeu pela ajuda de todos.. abraços...



Allan Elias Ramos :roll:


Responder

Gostei + 0

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

Aceitar