NEW OU IF

JACKSONVB 13/12/2006 09:25:32
#189638
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... ?
RODRIGOGBGOMES 13/12/2006 09:30:54
#189641
eu uso bem proximo de vc...
if rs.state = 1 then set rs = nothing

agora ql usa menos memoria... nao sei te falar...
USUARIO.EXCLUIDOS 13/12/2006 14:30:18
#189726
Resposta escolhida
Eu uso exatamente igua a vc jacksonvb !

tbm naum sei qual usa menos memoria...
vo dar uma pesuqisada !
LIONHEART 13/12/2006 14:40:45
#189731
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..
LUIS.FLAVIO 13/12/2006 14:59:15
#189734
Amigo eu uso o New na variável assim

Dim RS as New ADODB.Recordset

e não dá problema agum
HUGOSSOUZA 13/12/2006 15:23:53
#189737
vi isso em um outro tópico.. http://www.vbmania.com.br/vbmania/vbmforum.php?varMethod=Abrir&varID=170220
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.


USUARIO.EXCLUIDOS 13/12/2006 15:30:03
#189741
Cara, eu recomendo que use uma função pra facilitar:

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