Erro ao Deletar o Último Registro
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:
O q pode ser isso???
Allan Elias Ramos :roll:
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
Curtidas 0
Respostas
Osocram
07/10/2004
provavelmente eh erro d logica... parece q esta passando algum campo ´null´
GOSTEI 0
Rômulo Barros
07/10/2004
:arrow: [color=blue:702a4dfde1][b:702a4dfde1]Se você postar o código, certamente iremos descobrir a causa do erro.[/b:702a4dfde1][/color:702a4dfde1]
GOSTEI 0
Aersoftware
07/10/2004
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:
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:
GOSTEI 0
Aersoftware
07/10/2004
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:
GOSTEI 0
Aersoftware
07/10/2004
Como prometido.. o código abaixo é pra listar as revistas..
E o seguinte é pra apagar os registros.. o comando ´ListarApagar´ chama um procedimento com o código acima...
Como eu falei, tenho outro form assim e funciona a exclusao do último arquivo..
Allan Elias Ramos :roll:
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:
GOSTEI 0
Aersoftware
07/10/2004
ninguém? :cry:
Allan Elias Ramos :wink:
Allan Elias Ramos :wink:
GOSTEI 0
Aersoftware
07/10/2004
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:
Depois com os SubGrupos ligados akele Grupo listados, no OnCloseUp do SubGrupos ele lista as revistas assim:
Esse procedimento eu nomeie da ListarApagar, pq vai ser usado outras vezes.. no botão apagar tem o seguinte código:
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..
E no botão Apagar..
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:
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:
GOSTEI 0
Aersoftware
07/10/2004
Não posso perder esse tópico, essa dúvida ainda nao consegui resolver :cry:
Allan Elias Ramos :wink:
Allan Elias Ramos :wink:
GOSTEI 0
Rodolpho123
07/10/2004
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.
GOSTEI 0
Aersoftware
07/10/2004
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:
O estranho é q é só no último q registro q da isso.. se eu tiver 10, 9 ele me apaga..
Allan Elias Ramos :cry:
GOSTEI 0
Aersoftware
07/10/2004
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:
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:
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:
GOSTEI 0