CONSUMO EXCESSIVO DE MEMORIA COM ADO
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
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
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.
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.
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,
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,
BOCHECHA
NO FORM1 SE VOCÃÅ DECLARAR
ELA SERà  UMA VARIAVEL QUE APENAS AS ROTINAS DO FORM1 TERÃO ACESSO, JA SE VOCÃÅ DECLARAR
todos os forms abertos após o form1 terão acesso a está variavel.
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