Violação de Acesso usando ADOquery
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 !
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
Curtidas 0
Respostas
Massuda
25/05/2006
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.
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.
GOSTEI 0
Henry Schutz
25/05/2006
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!
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!
GOSTEI 0
Rjun
25/05/2006
Por que você dá um EXECSQL e um OPEN? Em qual momento o erro é disparado?
GOSTEI 0
Henry Schutz
25/05/2006
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!
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!
GOSTEI 0
Massuda
25/05/2006
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.
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.
GOSTEI 0
Henry Schutz
25/05/2006
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!
Abraço!
GOSTEI 0
Rjun
25/05/2006
Se seu SQL retorna um DATASET então utilize somente o OPEN.
GOSTEI 0
Henry Schutz
25/05/2006
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....
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....
GOSTEI 0
Rjun
25/05/2006
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;
GOSTEI 0
Henry Schutz
25/05/2006
Funcionou, cara!!!
valeu mesmo!!!
vc sabe dizer o pq do erro com execsql?
Um grande abraço, e valeu pela ajuda!!!
valeu mesmo!!!
vc sabe dizer o pq do erro com execsql?
Um grande abraço, e valeu pela ajuda!!!
GOSTEI 0
Rjun
25/05/2006
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.
GOSTEI 0
Paullsoftware
25/05/2006
[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:
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:
GOSTEI 0
Henry Schutz
25/05/2006
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!!!
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!!!
GOSTEI 0