NEW OU IF
gurisada...
estamos num impasse aki na empresa...
temos variaveis RecordSets...
eu digo q antes de abrir ela temos q fazer a condicão
If Rs.state = 1 Then Rs.Close
otro colega meu diz q é melhor usa o
Set Rs = New ADODB.Recordset
qual q é melhor, q use o minimo d recurso da memoria etc... ?
estamos num impasse aki na empresa...
temos variaveis RecordSets...
eu digo q antes de abrir ela temos q fazer a condicão
If Rs.state = 1 Then Rs.Close
otro colega meu diz q é melhor usa o
Set Rs = New ADODB.Recordset
qual q é melhor, q use o minimo d recurso da memoria etc... ?
eu uso bem proximo de vc...
if rs.state = 1 then set rs = nothing
agora ql usa menos memoria... nao sei te falar...
if rs.state = 1 then set rs = nothing
agora ql usa menos memoria... nao sei te falar...
Eu uso exatamente igua a vc jacksonvb !
tbm naum sei qual usa menos memoria...
vo dar uma pesuqisada !
tbm naum sei qual usa menos memoria...
vo dar uma pesuqisada !
Eu faço os dois.
Eu sempre abro com NEW adodb.recordset e sempre termino a rotina com um set rs = nothing
isso garante que eu sempre vou começar um recordset novo e sempre limpo a memória depois que não preciso mais dele.
de outra maneira, vc pode correr o risco de tentar reabrir o recordset e dar pau, ou então carregar demais a memória a toa..
Eu sempre abro com NEW adodb.recordset e sempre termino a rotina com um set rs = nothing
isso garante que eu sempre vou começar um recordset novo e sempre limpo a memória depois que não preciso mais dele.
de outra maneira, vc pode correr o risco de tentar reabrir o recordset e dar pau, ou então carregar demais a memória a toa..
Amigo eu uso o New na variável assim
Dim RS as New ADODB.Recordset
e não dá problema agum
Dim RS as New ADODB.Recordset
e não dá problema agum
vi isso em um outro tópico.. http://www.vbmania.com.br/vbmania/vbmforum.php?varMethod=Abrir&varID=170220
o usuario Professor que escreveu
o usuario Professor que escreveu
Citação:
...para encerrar uma conexão ADO você deve fechar explicitamente os objetos Connection e Recordset instanciados, antes de remover a instà ¢ncia.
De outra forma, os objetos em sà não existirão mais, mas a conexão ainda estará "pendurada" no Windows e no banco de dados. O "menos errado" seria, portanto:...
'Para fechar
rsClientes.Close
adoConnection.Close
Set rsClientes = nothing
Set adoConnection = nothing
Uma sugestão: Evite dimensionar e instanciar objetos ao mesmo tempo, isso prejudica o desempenho. Assim, evite sempre fazer algo como:Dim objRecordset As New ADODB.Recordset
Em seu lugar, faça:Dim objRecordset As ADODB.Recordset
Set objRecordset = New ADODB.Recordset
é uma linha á mais, sim, quase igual também, mas o processamento será mais rápido nessa segunda forma. E explico o motivo:
Na primeira forma, o VB encontra um "New" antes de encontrar a classe. Como ainda não sabe a classe, ele varre todas as classes que estão referenciadas, montando essa estrutura em memória. Em seguida, ele abre um ponteiro para a variável, que será do tipo Variant (object), mas sem definir o espaço ocupado por não conhecer a classe, invariavelmente esse ponteiro irá referenciar um bloco de memória maior do que o necessário. E só depois disso é que o VB lê a descrição da classe, varrendo a estrutura que montou na memória, encontrando a classe adequada, redimensionando o espaço reservado ao ponteiro e realizando a instà ¢ncia (criando o objeto).
Na segunda forma, o VB não encontra nenhum "New", mas sim a descrição da classe. O que ele faz, então? Apenas abre um ponteiro para a variável, já com o tamanho adequado para o objeto que será instanciado, pois a classe já foi indicada. Em seguida, já na segunda linha, ele realiza a instà ¢ncia, sem precisar mais nenhum processo.
Assim, você perde mais tempo em escrever duas linhas, uma vez, mas o seu aplicativo ganha mais tempo todas as vezes em que for executado.
Cara, eu recomendo que use uma função pra facilitar:
Dessa forma eu sempre chamo a função antes de abrir um recordset, ela além de fechar, mata ele e cria novamente, trazendo pra vc um recordset limpinho:
Caso queira apenas fechar (sem reabrir):
A mesma função pode ser usada para fechar uma conexão:
Qualquer dúvida poste aÃ...flw
Public Sub Fecha(ByVal Obj As Object, Optional ByVal Recria As String = "")
If Not Obj Is Nothing Then
If Obj.State <> adStateClosed Then Obj.Close
Set Obj = Nothing
End If
If Recria = "RST" Then Set Obj = New ADODB.Recordset
If Recria = "CN" Then Set Obj = New ADODB.Connection
End Sub
Dessa forma eu sempre chamo a função antes de abrir um recordset, ela além de fechar, mata ele e cria novamente, trazendo pra vc um recordset limpinho:
Fecha rst, "RST"
rst.Open "SELECT * FROM ...."
Caso queira apenas fechar (sem reabrir):
Fecha rst
A mesma função pode ser usada para fechar uma conexão:
Fech Cn
Qualquer dúvida poste aÃ...flw
Tópico encerrado , respostas não são mais permitidas