Página 1 de 1

Como zerar totalmente um objeto

Enviado: 12 Jun 2016 17:21
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!

Como zerar totalmente um objeto

Enviado: 12 Jun 2016 17:33
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. :%

Como zerar totalmente um objeto

Enviado: 12 Jun 2016 20:08
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

Como zerar totalmente um objeto

Enviado: 12 Jun 2016 21:14
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 !

Como zerar totalmente um objeto

Enviado: 16 Jun 2016 20:56
por Ruben Dario
Saludos al Forum

TVladDBF():New( "test.dbf" )
LA clase TVladDBF():New() es de Un tercero.

Como zerar totalmente um objeto

Enviado: 17 Jun 2016 10:28
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.