Fórum Access Violation Misterioso #364786

08/10/2008

0

Oi Galera,

hj tive q abrir um sistema feito há dois anos para fazer algumas modificações, tudo estava funcionando perfeitamente até então, quando executei o projeto no D2007 apresentou o um erro de Access Violation na seguinte rotina:

function TDMPrincipal.ContaRegistros(Descricao: String): Integer;
var Qr: TSQLQuery;
begin
Qr := TSQLQuery.Create(nil);
with Qr do
try
SQLConnection := Conexao;
[b:3b272e2933] SQL.Add(Descricao);[/b:3b272e2933]
Open;
Result := Fields[0].Value;
finally
free;
end;
end;

e o pior, na linha negritada, faz algum sentido?


Fajo

Fajo

Responder

Posts

08/10/2008

Prgdelphi

no lugar de SQL.add, tenta usar SQL.text := Descricao;


Responder

Gostei + 0

09/10/2008

Fajo

Tentei, mesmo erro!! Incrível isso. Será q bug do Delphi?


Responder

Gostei + 0

09/10/2008

Discorpio

Bom dia a todos.

Olha eu testei aqui com o meu Delphi 2007, e a sua função funcionou corretamente.

Entretanto, possa ser que eu esteja enganado, porém na hora de destruir o componente TSQuery criado dinamicamente, voce está utilizando o método Free lá no final da instrução, isto porque voce esta utilizando ´Width´. Acontece que o Form onde está situado essa função possui o mesmo método, onde acredito que o sistema não esteja identificando qual componente deverá ser destruído (O TSQLQuery ou o Form).

Assim sendo, substitua ´Free´ por ´FreeAndNil(Qr)´ e testa ai se vai funcionar.


Responder

Gostei + 0

09/10/2008

Fajo

Oi Discorpio, blz

bom, fiz o q vc me pediu e continua a mesma mensagem, o pior é que possuo a mesma rotina em outros projetos e funciona normalmente, num sei pq q nesse tá dando esse erro;

Obrigado


Responder

Gostei + 0

09/10/2008

Emerson Nascimento

pra desencargo de consciência, qual é o conteúdo de [i:b55a707b7c]descricao[/i:b55a707b7c]?


Responder

Gostei + 0

09/10/2008

Fajo

a função é chamada e o retorno associado a um label:

label1.caption := inttostr(ContaRegistros(´SELECT COUNT(ID) FROM TABELA´));


Responder

Gostei + 0

09/10/2008

Fajo

Acabei nesse instante de instalar o Delphi 2009 e o projeto funcionou normalmente, acreditam? Incrível.

Só q já vi outro problema, quando inserimos um SqlConnection num form e damos um Clique Duplo se abre uma janela com as conexões existentes e opções para criarmos nova num é isso?! Pois, aqui no D2009 num acontece nada quando dou clique duplo no sqlconnection, alguém já tá usando o D2009?

Obrigado


Responder

Gostei + 0

09/10/2008

Emerson Nascimento

certo... então vamos fazer diferente... o erro deve estar acontecendo no retorno da função, no momento do inttostr().

vamos tentar descobrir qual é o erro:
function TDMPrincipal.ContaRegistros(Descricao: String): Integer;
var
  Qr: TSQLQuery;
begin
  Qr := TSQLQuery.Create(nil);
  with Qr do
    try
      SQLConnection := Conexao;
      SQL.Add(Descricao);
      Open;
      Result := Fields[0].AsString;
    except
      on E:Exception do
      begin
        ShowMessage(´Erro!!!´1313´Mensagem original: ´13+E.Message);
        Result := -1;
      end;
    end;

  Qr.Free; // ou FreeAndNil(Qr);
end;



Responder

Gostei + 0

09/10/2008

Fajo

Erro!!!

Mensagem Original:
Access violation at address 00404580 in module ´ Programa.exe´. Read of address FFFFFFDD.


Responder

Gostei + 0

09/10/2008

Discorpio

Boa tarde a todos.

O erro está na SQL.

// Erro SELECT COUNT(ID) FROM TABELA // Certo SELECT COUNT(ID) [color=red:1bb755fc9a]AS TOTREG[/color:1bb755fc9a] FROM TABELA


Voce estava fazendo uma SQL de agrupamento, só que se esqueceu de renomear o campo e criá-lo virtualmente dentro da instrução como AS TOTREG, AS TOTAL, e ai o que era retornado da contagem estava se perdendo e a instrução Select não estava retornando nenhum campo. A consequência disto, o método Fields[0] estava nulo.


Responder

Gostei + 0

09/10/2008

Fajo

O erro continua, mas, como já falei, vou partir pro D2009.

Obrigado


Responder

Gostei + 0

09/10/2008

Discorpio

Boa tarde Fajo.

Este erro pode ser um monte de suposições, então ai la vai algumas.

Voce verficou lá dentro do seu banco se o nome da tabela está correto :?: O nome campo também :?:

Já tentou usar a SQL ´Select Count(*) as TotReg From NomeTabela´ ao invés de ´Select Count(ID)......´

Já tentou instanciar o objeto TSQLQuery como o proprietário igual o Formulário assim: ´Qr := TSQLQuery.Create(Self);

Enfim, não sei o por que no seu Delphi 2007 não funciona, porque no meu aqui funcionou.


Responder

Gostei + 0

21/10/2008

Dgsfilho

Comigo está acontecendo a mesma coisa, tinha um projeto no D2006 e quando abri no D2009 começou a dar esse mesmo erro de access violation at address 00409281 in module ´ Programa.exe´. Read of address FFFFFFDD. Estou dividindo os componentes Dataset em outros DMs, pois quando estou depurando o erro ocorre na criação do DMPrincipal. Caso funcione eu posto para informar o resultado. Estou usando o Firebird 2.0.1, antes usava o driver UIBfire15.dll para conexão, só que no D2009 não funciona, então vou tentar usar o do interbase.


Responder

Gostei + 0

22/10/2008

Pestana_

Oi Galera, hj tive q abrir um sistema feito há dois anos para fazer algumas modificações, tudo estava funcionando perfeitamente até então, quando executei o projeto no D2007 apresentou o um erro de Access Violation na seguinte rotina: function TDMPrincipal.ContaRegistros(Descricao: String): Integer; var Qr: TSQLQuery; begin Qr := TSQLQuery.Create(nil); with Qr do try SQLConnection := Conexao; [b:a7c1164def] SQL.Add(Descricao);[/b:a7c1164def] Open; Result := Fields[0].Value; finally free; end; end; e o pior, na linha negritada, faz algum sentido?


o dataModule que contem esta query foi criado antes de você utilizar esta função, porque esta parecendo que você esta tentando acessar algum objeto que não foi criado (instanciado) na memoria.


Responder

Gostei + 0

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

Aceitar