MaximoAccess

Caro Usuário, antes de postar pela primeira vez, leia as regras do fórum.

Obrigado

Administração do MaximoAccess

Dicas Ms Access, Exemplos Ms Access, Codigos VBA Ms Access, SQL Ms Access

    obj.Close ou SET obj = Nothing?

    Compartilhe

    DaviSilva
    Novato
    Novato

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 26
    Registrado : 26/09/2013

    obj.Close ou SET obj = Nothing?

    Mensagem  DaviSilva em Sex 18 Ago 2017, 19:20

    Boa tarde.

    A um bom tempo estou trabalhando em access 2000 e até mesmo no 2013 com Record source.

    Na verdade faço o seguinte:

    Dim sql as string
    Dim obj as Object

    sql = SELECT * FROM produto
    SET obj = CurrentDb.OpenRecordSource(sql)

    Ai manipulo os registros e tal.
    Mas sempre finalizo o objeto usando: Obj.Close

    Já vi em alguns códigos que outras pessoas fazem usando: SET obj = Nothing

    Minha duvida é a seguinte.

    Posso usar apenas o close?
    ou apenas o Nothing?
    Qual a diferença entre eles?

    Poderia talvez usar os dois juntos da seguinte maneira?

    obj.close
    SET obj = Nothing

    Dessa ultima maneira ja testei e tudo continua funcionando corretamente, mas minhas duvidas sao mesmo de conceitos.
    avatar
    Alexandre Neves
    Moderador Global
    Moderador Global

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 6391
    Registrado : 05/11/2009

    Re: obj.Close ou SET obj = Nothing?

    Mensagem  Alexandre Neves em Sab 19 Ago 2017, 18:37

    Boa tarde,
    close - fecha
    nothing - atribui a inexistência da variável do objecto
    Se o recordset é aberto numa subrotina, a variável do recordset tem âmbito local e desaparece no final da rotina, independentemente de fechar ou eliminar
    Se o âmbito fôr além da subrotina, difere na memória alocada; se fechar, fica com o recordset fechado mas a utilizar memória enquanto se eliminar da memória fca com essa memória disponível para outros processos ou variáveis


    .................................................................................
    Access 2010. Mande bd que dê para testar (indique a versão). Não peça para fazer o que já tem feito. Dê todos os detalhes.
    Não coloquem entraves como senhas, esconder controlos, etc. Disponibilizem o mais limpo possível
    Só respondo a mensagens privadas, se forem de assunto privado; às outras não respondo.
    Quem trabalha e mata a fome não come o pão de ninguém; mas quem não trabalha e come, come sempre o pão de alguém. António Aleixo

    DaviSilva
    Novato
    Novato

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 26
    Registrado : 26/09/2013

    Re: obj.Close ou SET obj = Nothing?

    Mensagem  DaviSilva em Seg 04 Set 2017, 15:00

    Alexandre Neves , muito obrigado pela explicação.

    Agora uma outra duvida envolvendo o RecordSet:

    Tenho um formulario Principal e um Sub acoplado a ele.

    Antes fazia alterações no Principal usando o modulo do Sub com a função [Parent], por exemplo ME.Parent!Data = Date(). Até ai tudo bem,
    depois de um tempo comecei a usar cada vez mais os recordsets, por achar mais facil de filtrar e manipular os registros. Agora eis o problema.

    Criei um RecordSet no SubForm que altera os dados da tabela principal do form Principal. Mas quando mudo o foco do mouse do sub para o principal, aparece aquela mensagem dizendo que outro usuário estava alterando ao mesmo tempo que eu. Mas tenho certeza que não é esse o caso. Pois quando retorno a rotina para usar a função [Parent], ele não mostra mais a menssagem.

    Pergunta -> Tem como evitar que isso aconteça? Pois prefiro usar o recordset do que o parent.
    avatar
    Alexandre Neves
    Moderador Global
    Moderador Global

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 6391
    Registrado : 05/11/2009

    Re: obj.Close ou SET obj = Nothing?

    Mensagem  Alexandre Neves em Seg 04 Set 2017, 16:05

    Boa tarde,
    Também me surgiu e acho dificil de resolver
    Ao tempo que foi, não me lembro como ultrapassei, ou se desisti desse caminho


    .................................................................................
    Access 2010. Mande bd que dê para testar (indique a versão). Não peça para fazer o que já tem feito. Dê todos os detalhes.
    Não coloquem entraves como senhas, esconder controlos, etc. Disponibilizem o mais limpo possível
    Só respondo a mensagens privadas, se forem de assunto privado; às outras não respondo.
    Quem trabalha e mata a fome não come o pão de ninguém; mas quem não trabalha e come, come sempre o pão de alguém. António Aleixo
    avatar
    FabioPaes
    Moderador
    Moderador

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 3334
    Registrado : 14/08/2013

    Re: obj.Close ou SET obj = Nothing?

    Mensagem  FabioPaes em Seg 04 Set 2017, 19:58

    Não sei se é bem o que passei por aqui...
    Mas resolvi da seguinte forma:

    Antes de abrir o recordset que editará o registro, rode um comando para salvar o Registro do Formulário principal:

    DoCmd.RunCommand acCmdSaveRecord

    Agora pode abrir o recorset e editar.... Quando voltar para o Principal, pode rodar um .Requery para buscar novamente os dados...



    Aqui eu resolvi dessa forma. Estava no Formulário Principal, e abria um formulário extra no mesmo registro, para editar alguns campos que eram restritor a certas ocasiões.... e sempre que eu retornava para o Registro que ja estava aberto no formulário principal, ele reclamava da gravação... Então antes de abrir o Segundo formulário eu salvava o Registro Principal. Assim ao voltar ao primeiro formulário nao tinha nada pra salvar e não dava conflito.


    .................................................................................
    _____________________________________________________________________
    Achou a solução para sua dúvida? Não seja Egoísta, Compartilhe com todos!
    A dica do Colega foi útil? Agradeça!

    O importante não saber tudo, mas sim a Onde procurar!

      Data/hora atual: Sab 23 Set 2017, 06:44