Como zerar totalmente um objeto

Projeto [x]Harbour - Compilador de código aberto compatível com o Clipper.

Moderador: Moderadores

Avatar do usuário
Vlademiro
Usuário Nível 4
Usuário Nível 4
Mensagens: 752
Registrado em: 11 Jul 2005 02:46

Como zerar totalmente um objeto

Mensagem por Vlademiro »

Pessoal, estou com uma dúvida na finalização de um objeto.

Por exemplo : O código abaixo é responsável por abrir um arquivo. Primeiro eu instanciei a classe passando o nome do arquivo, depois eu instanciei sem passar parâmetros. Porém ele repete o nome do arquivo, no caso "test.dbf". Ou seja, na segunda vez que eu instancio a classe ele pega as configurações da primeira vez.

Código: Selecionar todos


      oDbf := TVladDBF():New( "test.dbf" )
      oDbf:TestOn()
      oDbf:Open()
      // Abre o arquivo test.dbf

      oTest:H1("Open without any parameter" )
      oDbf := TVladDBF():New()
      oDbf:TestOn()
      oDbf:Open()
      // Abre o arquivo test.dbf, mas está errado. Era para dar um erro pois eu instanciei sem passar parâmetros.

Eu acho que eu devo destruir as variáveis, mas como fazer isso de dentro de um método ? Por exemplo

Código: Selecionar todos

METHOD Destroy() CLASS TVladDBF

     // Tem como zerar as variáveis sem ter que passar uma a uma ?

RETURN Self
Valeu galera!
Avatar do usuário
Vlademiro
Usuário Nível 4
Usuário Nível 4
Mensagens: 752
Registrado em: 11 Jul 2005 02:46

Como zerar totalmente um objeto

Mensagem por Vlademiro »

Tem algo muito estranho e eerrado no meu código. :-[

Vou descansar um pouco e depois vou analisar ele melhor.

Depois eu refaço a pergunta melhor. :%
Avatar do usuário
jairfab
Usuário Nível 3
Usuário Nível 3
Mensagens: 252
Registrado em: 21 Mai 2007 09:43
Localização: São Paulo, Região Leste - Suzano

Como zerar totalmente um objeto

Mensagem por jairfab »

oDbf := TVladDBF():New( "test.dbf" )
oDbf:TestOn()
oDbf:Open()

Observe que o objeto está sendo zerado, porem ao instanciar a classe voce ja está passando o metodo new que recebe como parametro no nome da tabela test.dbf.

Duvida, o próprio metodo New( "test.dbf" ) não já esta abrindo a tabela dbf.

Eu faria o contrario

oDbf := TVladDBF():New( )
oDbf:Tabela:="test.dbf"
oDbf:TestOn()
oDbf:Open()

Porem tem que verificar se a classe permite fazer isto, caso contrario voc deve alterar a class para permitir esta forma
Delpji 7, harbour 3.2, xharbour 1.2.3, Bcc7, Minigw, Minigui 19.11, hwgui 2.20, FiveWin 19.05 Gtwvw, Gtwvg, C# VS 2017
Avatar do usuário
Vlademiro
Usuário Nível 4
Usuário Nível 4
Mensagens: 752
Registrado em: 11 Jul 2005 02:46

Como zerar totalmente um objeto

Mensagem por Vlademiro »

Obrigado pelo retorno, colega.

O problema era eu mesmo. :D

Eu estou criando umas classes para facilitar meu trabalho, mas quando fui alterar acabei me atrapalhando. Fui descansar, relaxar com a família um pouco e agora resolvi em poucos minutos o fantasma.

Li o que vc escreveu e já estou fazendo + ou - assim como vc citou. O método new pega o nome da tabela mas não abre. O método open abre a tabela. Entre o new e o open eu posso habilitar ou não o modo de teste.
O problema era na classe que eu havia modificado, não no teste.

O meu teste ficou assim :

Código: Selecionar todos


STATIC FUNCTION TVladDBF_Test_OpenFile()
LOCAL oDbf, oDbf2
LOCAL oTest := TVladTest():New( "Open DBF File / TVladDBF " )
LOCAL aNew := { { "CODIGO" , "C" , 5 , 0 } , { "NUMBER" , "N" , 10 , 2 } }


      dbCreate( "test.dbf" , aNew )
      oTest:H1("Open with first parameter : 'test.dbf'" )
      oDbf := TVladDBF():New( "test.dbf" )
      oDbf:TestOn()
      oDbf:Open()
      oDbf:Close()

      oTest:H1("Open without any parameter" )
      oDbf2 := TVladDBF():New( )
      oDbf2:TestOn()
      oDbf2:Open()
      oDbf2:Close()

      oTest:H1("Open without extension" )
      oDbf := TVladDBF():New( "test"  )
      oDbf:TestOn()
      oDbf:Open()

      oDbf:Close()


      oTest:Close()

RETURN NIL


Valeu !
Ruben Dario
Usuário Nível 3
Usuário Nível 3
Mensagens: 127
Registrado em: 14 Jun 2015 23:19
Localização: Colombia

Como zerar totalmente um objeto

Mensagem por Ruben Dario »

Saludos al Forum

TVladDBF():New( "test.dbf" )
LA clase TVladDBF():New() es de Un tercero.
Avatar do usuário
Vlademiro
Usuário Nível 4
Usuário Nível 4
Mensagens: 752
Registrado em: 11 Jul 2005 02:46

Como zerar totalmente um objeto

Mensagem por Vlademiro »

Essa classe TVladDBF foi eu mesmo que criei. Tenho outras também, como TVladSQL, TVladSQLBrowse, TVladHttpd, etc. Sempre coloco minhas iniciais para não sobrepor alguma classe existente.
Responder