Fórum Violação de Acesso usando ADOquery #322145

25/05/2006

0

estou tendo o seguinte problema ao re-executar uma query via ado:

executo a query pela primeira vez com uma string sql q é passada como parametro, até aí, tudo bem...
quando vou re-executar a query com uma nova string sql, ele me diz q houve uma violação de acesso!
não estou conseguindo imaginar como está ocorrendo tal violação.


alguém teria como me ajudar nesse prob?


grato, e abraço à todos !


Henry Schutz

Henry Schutz

Responder

Posts

25/05/2006

Massuda

Erros de Access Violation geralmente estão associados a tentar usar um objeto que ou não foi criado ainda ou já foi destruído.

No seu caso, pode ser que algum objeto, por exemplo o TQuery (ou o equivalente), tenha sido destruído entre uma execução e outra da query.


Responder

Gostei + 0

25/05/2006

Henry Schutz

Fala, Massuda!

Não sei como isso está acontecendo...

O problema é justamente quando, após eu executar uma adoquery pela primeira vez, na segunda vez q tento executa-la com uma nova string sql, ele dá um erro de violação de acesso.

veja o código à seguir:

function sql_servico(sqlstring:string):string;
begin
dt_modulo.adoquery_servicos.close;
dt_modulo.adoquery_servicos.sql.clear;
dt_modulo.adoquery_servicos.sql.add(sqlstring);
dt_modulo.adoquery_servicos.execsql;
dt_modulo.adoquery_servicos.open;

end;

na primeira execução, tudo corre as mil maravilhas, mas quando chamo a função p executar uma nova query,ele dá o erro de violação de acesso! Já estou ficando fulo com isso, pois não consigo dar continuídade no sistema.

teria alguma sugestão?

Abraço!


Responder

Gostei + 0

25/05/2006

Rjun

Por que você dá um EXECSQL e um OPEN? Em qual momento o erro é disparado?


Responder

Gostei + 0

26/05/2006

Henry Schutz

Rjun... eu uso execsql e open, pq só conheço esses métodos... tem algum outro q possa me sugerir?

o erro ocorre na segunda vez q executo a querry. Ex:
rodo o prog. executo a query pela primeira vez, até aí, tudo ok... continuo executando o prog, aí rodo uma nova string sql dentro desse compontente adoquerry, aí o erro ocorre logo após o execsql.

tá foda....

Abraço!


Responder

Gostei + 0

26/05/2006

Massuda

Quais comandos SQL você executa/tenta executar na primeira e na segunda vez? (Provavelmente não são os mesmos comandos).

Você deve usar ExecSQL para executar comandos que [b:5192071358]não[/b:5192071358] resultam em um dataset; use Open quando o comando retorna um dataset. Que eu saiba, não faz sentido usar os dois métodos juntos.

Exemplo de comandos SQL que [b:5192071358]não[/b:5192071358] resultam em um dataset: UPDATE, DELETE.

Exemplo de comando SQL que resulta em um dataset: SELECT.


Responder

Gostei + 0

26/05/2006

Henry Schutz

a sql resulta em um dataset sim, uso praticamente a mesma linha, só mudo o valor de 2 variaveis q são definidas de acordo com a escolha do usuário. Mas nem cheguei a usa-las ainda, estou tento o prob com a mesma string sql. ex: executo uma query, depois repito a mesma query, e dá o erro de violação de acesso.

Abraço!


Responder

Gostei + 0

26/05/2006

Rjun

Se seu SQL retorna um DATASET então utilize somente o OPEN.


Responder

Gostei + 0

26/05/2006

Henry Schutz

Rjun, vc sugeriu q eu não fechasse a query, foi iso?
bem... eu tentei sem usar a opção close, e continuou dando erro..
o simples fato de eu re-executar a query, já dá erro de violação de acesso no módulo msado15.dll.
tá dificil isso....


Responder

Gostei + 0

26/05/2006

Rjun

Não. Sugeri que você não utilizasse o EXECSQL.

function sql_servico(sqlstring:string):string; 
begin 
  dt_modulo.adoquery_servicos.close; 
  dt_modulo.adoquery_servicos.sql.clear; 
  dt_modulo.adoquery_servicos.sql.add(sqlstring); 
  dt_modulo.adoquery_servicos.open; 
end; 



Responder

Gostei + 0

26/05/2006

Henry Schutz

Funcionou, cara!!!
valeu mesmo!!!
vc sabe dizer o pq do erro com execsql?

Um grande abraço, e valeu pela ajuda!!!


Responder

Gostei + 0

26/05/2006

Rjun

EXECSQL você só deve usar quando a instrução é por exemplo INSERT/UPDATE/DELETE. Sinceramente não sei pq esse erro ocorria somente na segunda vez.


Responder

Gostei + 0

26/05/2006

Paullsoftware

[quote:9d52b1c090=´Henry Schutz´]Funcionou, cara!!!
valeu mesmo!!!
vc sabe dizer o pq do erro com execsql?

Um grande abraço, e valeu pela ajuda!!![/quote:9d52b1c090]

Vou entrar na discursão..

O comando ExexSQL somente deve ser usado em caso de instruções de Inserção, Delete e UpDate...
já o Open você deve usar sempre que usar o Select, deu pra entender...
espero ter ajudado :wink:


Responder

Gostei + 0

26/05/2006

Henry Schutz

Gente, obrigado pelo auxílio!
esse prob. tava me enchendo, agora vou conseguir tocar o sistema!

O engraçado é q conseguia executar a sql via ´execsql´ na primeira tentativa ,sem erros! Assim ficava dificil imaginar o q poderia ser!

Não sabia q era apenas p manipulação de dados!

Novamente, um grande abraço à todos, e obrigado pela ajuda!!!


Responder

Gostei + 0

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

Aceitar