CONSUMO EXCESSIVO DE MEMORIA COM ADO

USUARIO.EXCLUIDOS 04/06/2004 08:58:16
#28084
Bom dia;

Tenho uma rotina simples que basicamente abre uma conexão ADO, faz um select e um update e encerra a conexão.

Este código é executado de 1 em 1 segundo utilizando para isso um timer. Porém, à  medida que o programa é executado a memória vai se sujando.

Segue abaixo o código. Alguém já teve algum problema parecido e sabe como resolver?

Além de utilizar o comando rcsRecord.Open já tentei utilizar o comando rcsRecord = conConexao.Execute e o resultado é o mesmo.

Estou utilizando VB6 + SP6 + MDAC 2.8.

Grato;

Private Sub subFazADO()
Dim rcsRecord As ADODB.Recordset
Dim conConexaoIp21 As ADODB.Connection
Dim bolConectado As Boolean
Dim strServidor As String

tmrAtualiza.Enabled = false

If conConexaoIp21 Is Nothing Then
Set conConexaoIp21 = New ADODB.Connection
End If

If rcsRecord Is Nothing Then
Set rcsRecord = New ADODB.Recordset
End If

strServidor = txtServidor.Text

conConexaoIp21.Open ("DRIVER={AspenTech SQLplus};TIBCO=N; CHARISNULL=Y;CONVERTERRORS=Y;ROWID=N;ALLFIELDS=N;ReadOnly=N;CHARTIME=Y;CHARFLOAT=N;CHARINT=Y;TABLE=;MAXROWS=100000;TIMEOUT=;ADS=" & strServidor & ";Port=10014;HOST=" & strServidor)

rcsRecord.Open "SELECT IP_INPUT_VALUE as intValor FROM " & txtTag.Text, conConexaoIp21, adOpenForwardOnly, adLockReadOnly, adCmdTable

If Not IsNull(rcsRecord!intValor) Then
txtUltimoValor.Text = rcsRecord!intValor
End If

rcsRecord.Close

Set rcsRecord = Nothing

conConexaoIp21.Execute "UPDATE " & txtTag.Text & " SET IP_INPUT_VALUE = ' " & txtNovoValor.Text & "'"

conConexaoIp21.Close

Set conConexaoIp21 = Nothing

tmrAtualiza.Enabled = true

End Sub
ALEXMARCHI 04/06/2004 09:03:17
#28089
Resposta escolhida
BOCHECHA, CADE O CLAUDINHO

Brincadeiras a parte,

a demora está que toda vez que você acessa a rotina você cria uma conexão, cria um recorset, faz o Update e depois os destroi.

a forma mais rápida é criar a conexão e o recordset apenas 1 vez e a cada atualização você apenas abre a tabela, atualiza e a fecha.

ALEXMARCHI 04/06/2004 09:13:23
#28094
Não Bochecha, não estou sugerindo que você crie variaveis globais.

eu estou sugerindo que você declare as variaveis no General Declarations do seu Form, abra as conexões em seu form Load, e abra na rotina apenas a tabela,
ALEXMARCHI 04/06/2004 10:20:55
#28125
BOCHECHA

NO FORM1 SE VOCÃÅ  DECLARAR
 Option Explicit 

Private rcsRecord As ADODB.Recordset
Private conConexaoIp21 As ADODB.Connection

Private Sub Form_Load()

End Sub


ELA SERà UMA VARIAVEL QUE APENAS AS ROTINAS DO FORM1 TERÃO ACESSO, JA SE VOCÃÅ  DECLARAR

Option Explicit 

Public rcsRecord As ADODB.Recordset
Public conConexaoIp21 As ADODB.Connection

Private Sub Form_Load()

End Sub


todos os forms abertos após o form1 terão acesso a está variavel.


Tópico encerrado , respostas não são mais permitidas