|
Postada em 02/06/2011 15:49 hs
Olá Pessoal.
existem vários batchs em VB com Banco de dados Oracle, rodando 24h para cada cliente. Utilizamos uma DLL construída na própria empresa para lidar com a conexão de dados, retorno de recordsets e execução de procedures, etc. A mesma é utilizada por todas as aplicações em VB.
Em apenas um desses batchs está acontecendo um erro ao tentar recuperar o recordset de uma consulta qualquer realizada. Suponha que este batch faça uma média de 8 a 10 consultas por execução, fora as atualizações e inserts.
O problema é que ao tentar recuperar um recordset, é retornado um erro de "object variable not set". Mas NUNCA na mesma query. Acontece de maneira esporádica em várias queries diferentes. As vezes ocorrem 3 a 5 execuções antes de acontecer um erro desses em algum select executado.
Mais estranho ainda é que, rodando a aplicação do VB, o erro acontece e se continuar o debug normalmente e do mesmo ponto onde ocorreu o erro sem alterar o apontador, a query é executada sem nenhum problema.
Ex. Tendo a linha: Set meuRecordSet = objBanco.GetRecordSet("SELECT * FROM CLIENTE WHERE COD_CLIENTE = 10")
Dá erro nesta linha e logo após continuar o debug, o recordset é retornado normalmente. Eu outras execuções, este mesmo trecho de código não dá erro. Mas pode acontecer de novo, como já ocorreu.
Pontos importantes: A conexão com o BD é aberta ao iniciar o processamento e finalizada ao término da rotina. NUNCA é fechado ou commitado/rollback até o seu final.
Alguma sugestão?
|
|
|
|
Treze
|
SÃO VICENTE SP - BRASIL
|
|
ENUNCIADA !
|
|
|
Postada em 02/06/2011 18:27 hs
Estes procedimentos ficam dentro de algum LOOP?
|
|
|
|
Postada em 03/06/2011 09:23 hs
Existe um select que fica dentro de um timer. Se este retornar algum registro vai ser iniciado um processamento completo da rotina e enquanto estiver rodando o processamento, o timer fica inativo.
Mas um processo dentro de um loop mesmo nao existe.
|
|
|
J.Carlos
|
PRESIDENTE PRUDENTE SP - BRASIL
|
|
ENUNCIADA !
|
|
|
Postada em 03/06/2011 09:40 hs
Não sei se é o caso, mas se numa stored procedure vc fizer uma atualizção e em seguida fazer uma query na mesma stored, o recorset voltará vazio.
|
TÓPICO EDITADO
|
|
|
|
Treze
não registrado
|
|
ENUNCIADA !
|
|
|
Postada em 03/06/2011 11:50 hs
tem como vc postar o código deste timer?
|
|
|
|
Postada em 03/06/2011 17:17 hs
esse recordset esta sendo fechado e limpando apos dar update ou insert ou delete para depois consultar novamente: meuRecordSet.close set meuRecordSet =Nothing vc esta usando eof e not eof se quiser pegar um valor do recordset? poste o codigo
|
|
|