Fórum Access Violation Misterioso #364786
08/10/2008
0
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
Curtir tópico
+ 0Posts
08/10/2008
Prgdelphi
Gostei + 0
09/10/2008
Fajo
Gostei + 0
09/10/2008
Discorpio
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.
Gostei + 0
09/10/2008
Fajo
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
Gostei + 0
09/10/2008
Emerson Nascimento
Gostei + 0
09/10/2008
Fajo
label1.caption := inttostr(ContaRegistros(´SELECT COUNT(ID) FROM TABELA´));
Gostei + 0
09/10/2008
Fajo
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
Gostei + 0
09/10/2008
Emerson Nascimento
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;
Gostei + 0
09/10/2008
Fajo
Mensagem Original:
Access violation at address 00404580 in module ´ Programa.exe´. Read of address FFFFFFDD.
Gostei + 0
09/10/2008
Discorpio
O erro está na SQL.
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.
Gostei + 0
09/10/2008
Fajo
Obrigado
Gostei + 0
09/10/2008
Discorpio
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.
Gostei + 0
21/10/2008
Dgsfilho
Gostei + 0
22/10/2008
Pestana_
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.
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)