Página 1 de 1
Criar Array de Objetos
Enviado: 15 Out 2010 11:38
por gralak
Iai galera blz
recentemente me deparei com uma duvida que preciso da ajuda de vcs
Comecei fazer a criação de Classes e acontece o seguinte.
Exemplo: Tenho duas tabelas VENDA E ITENS
para pegar a VENDA que é somente uma linha ta traquilo
mas e ai quando tenho que pegar os itens que são varias linhas?
Eu estive pesando em algo com
MATRIZ[1]:nomeProduto

??
Bom existe algo assim ou algo que eu possa fazer para agilizar essa situação
tendo que fazer o loop somente na Classe ...
vlw galera até+++
Re: Criar Array de Objetos
Enviado: 15 Out 2010 12:11
por alxsts
Olá!
Posso sugerir que você crie um método que recupere os itens de uma venda (através do código da nota, por exemplo) e armazene internamente na classe. Crie outro(s) métodos que percorram estes itens e os devolva.
Re: Criar Array de Objetos
Enviado: 15 Out 2010 15:14
por gralak
Então mas como eu faria pra armazer esses dados na classe e recupera-los, posteriormente de uma só vez ??
Re: Criar Array de Objetos
Enviado: 15 Out 2010 15:18
por alxsts
Olá!
Crie uma variável exportavel interna da classe, do tipo array ou hash onde o método que lê os itens da nota possa armazená-los. Depois, em outro método, você poderia recuperar esta variável de instância e exportar para o programa que instanciou a classe.
Re: Criar Array de Objetos
Enviado: 18 Out 2010 09:59
por sambomb
Código: Selecionar todos
DATA aItens AS ARRAY INIT {}
Method AddItem( aInfoItem ) CLASS TVENDA
aAdd(::aItens,aInfoItem)
Return Len(::aItens)
Re: Criar Array de Objetos
Enviado: 18 Out 2010 10:03
por sambomb
Para importar e exportar poderia usar arquivo INI
Poderia usar arquivo INI e zipar ele com uma senha e mudar o nome do arquivo final:
C:\SuaPasta\000001.venda
[Geral]
NumeroDaVenda=000001
NumerosDeItens=X (2 no exemplo)
[Itens]
Codigo001=123456
Preco001=10.00
Descricao001=PRODUTO DE TESTE
Codigo002=000001
Preco002=125.00
Descricao002=PRODUTO DE R$125.00
Re: Criar Array de Objetos
Enviado: 18 Out 2010 10:15
por gralak
Ok Companheiro valeu mesmo... Vou implementar a idéia até+++
Re: Criar Array de Objetos
Enviado: 18 Out 2010 19:19
por clrod
Olá
O Harbour tem como serializar e salvar em arquivo diretmente. É uma extensão do antigo formato .mem, porém mais poderoso. Estou tentando achar onde tem informação sobre ele mas tá difícil.
T+
Re: Criar Array de Objetos
Enviado: 19 Out 2010 09:34
por rochinha
Amiguinhos,
No caso de arquivos .MEM ao utilizar o salvamento de variaveis nele ele irá levar todas as variaveis ativas na memoria, no seu caso para facilitar, crie as variaveis com referencia direta a tabela manipulada, ex:
Código: Selecionar todos
...
CLIENTES_NOME := "ROCHINHA"
CLIENTES_FONE := "(011)3534-3099"
...
Use o comando
SAVE TO clientes ALL LIKE CLIENTES_*
Para auxiliar na sua empreitada analise o trecho abaixo:
Código: Selecionar todos
#include "hbclass.ch" // cabeçalho para uso de classe
CLASS Tnfwh
DATA cTitle
DATA aTables
DATA aFields
METHOD New( cTitle, aTables ) CONSTRUCTOR
METHOD AddReg()
METHOD recuperarPorCodigo( cCod )
METHOD incluir()
ENDCLASS
METHOD New( cTitle, aTables ) CLASS Tnfwh
::cTitle := Tnfwh
::aTables := aTables
::aFields := {}
return nil
METHOD AddReg() CLASS Tnfwh
LOCAL field_cnt := fcount()
LOCAL counter := 0
private field_name
field_cnt = fcount()
for counter = 1 to field_cnt
field_name = lower(field(counter))
::aFields
public &field_name
next
RETURN Self
METHOD recuperarPorCodigo( cCod ) CLASS TCliente
local lRet
use clientes shared new
index on codigo to i_cod
seek cCod
if found()
::codigo := allTrim( clientes->codigo )
::nome := allTrim( clientes->nome )
lRet := .t.
else
lRet := .f.
endif
close clientes
return lRet
METHOD incluir() CLASS TCliente
local cNovoCod
use clientes shared new
dbGoBottom()
cNovoCod = strZero( val(clientes->codigo)+1, 5 )
if ( alltrim( ::nome ) == "" )
alert( "Campo NOME não pode ser vazio no método de inclusão!" )
close clientes
return .f.
endif
dbAppend()
clientes->codigo := cNovoCod
::codigo := cNovoCod
clientes->nome := upper( ::nome )
dbCommit()
close clientes
return .t.
FUNCTION InitVars()
local field_cnt := fcount(), counter := 0
private field_name
field_cnt = fcount()
for counter = 1 to field_cnt
field_name = lower(field(counter))
public &field_name
next
return(.t.)
FUNCTION initObjs
local field_cnt := fcount(), counter := 0
private field_name, retorno := {}
field_cnt = fcount()
for counter = 1 to field_cnt
field_name = "o" + lower(field(counter))
field_reto = AADD( retorno, "o" + lower(field(counter)) )
public &field_name
next
return retorno
FUNCTION RefreshObjs
local field_cnt := fcount(), counter := 0
private field_name, retorno := {}
field_cnt = fcount()
for counter = 1 to field_cnt
field_name = "o"+alltrim(lower(field(counter)))+":Refresh()"
eval( {|| &field_name })
next
return retorno
FUNCTION EqualVars
local field_cnt := fcount(), counter := 0
private field_name, retorno := {}
field_cnt = fcount()
for counter = 1 to field_cnt
field_name = LOWER(FIELD(counter))
M->&field_name := _FIELD->&field_name
next
return retorno
FUNCTION ReplaceVars
local field_cnt := fcount(), counter := 0
private field_name, retorno := {}
field_cnt = fcount()
for counter = 1 to field_cnt
field_name = LOWER(FIELD(counter))
_FIELD->&field_name := m->&field_name
next
return retorno
FUNCTION ReleaseVars
local field_cnt := fcount(), counter := 0
private field_name, retorno := {}
field_cnt = fcount()
for counter = 1 to field_cnt
field_name = LOWER(FIELD(counter))
RELEASE m->&field_name
next
return retorno
Este é um código puramente academico e não foi testado.