Criar Tags no CDX

Fórum sobre a linguagem CA-Clipper.

Moderador: Moderadores

Avatar do usuário
rubens
Colaborador
Colaborador
Mensagens: 1520
Registrado em: 16 Ago 2003 09:05
Localização: Nova Xavantina - MT

Criar Tags no CDX

Mensagem por rubens »

Olá pessoal...

Estou tentando migrar do ntx para CDX..

Tenho esta rotina:

Código: Selecionar todos

REQUEST DBFCDX
RDDSETDEFAULT('DBFCDX')
DBSETDRIVER('DBFCDX')

USE FORNECE ALIAS FORN NEW

cNTX:=INDEXEXT()
aArq := {}

AADD( aArq, { ;
				{"FORNECE","Arquivo de Fornecedores" },;  // Arquivo DBF
				{"FORNECE" }					  ,;  // Arquivo CDX
				{"DELETADO+NOME","CODIGO","CGC"}	  ,;  // Campos
				"FORN"						   ,;  // Alias
				})


// CRIA O CDX
For nArq = 1 to len( aArq )
	FOR nI:=1 TO LEN(aArq[nArq,3])  // contas os campos
		ordCreate((aArq[nArq,2,1]+cNTX),,(aArq[nArq,3,nI]),{||&(aArq[nArq,3,nI])},)
	NEXT
NEXT
dbSetIndex((aArq[1,2,1]+cNTX))
DBSETORDER(2)
DBGOTOP()
BROWSE()
Só que quando debugo e pressiono F6 para verificar os arquivos e indices, só aparece a ordem do CGC.
Não deveria criar tres ordens aí... ?
1 - DELETADO+NOME
2 - CODIGO
3 - CGC

Obrigado
Rubens

Tags: RDDSETDEFAULT DBFCDX DBSETDRIVER
Editado pela última vez por Toledo em 11 Set 2014 07:34, em um total de 2 vezes.
Razão: O presente tópico foi movido da seção Legislação Fiscal e Tributária, uma vez que seu conteúdo não tem relação com os objetivos daquela seção.
"Eu e minha casa servimos ao Senhor e você ???"
alxsts
Colaborador
Colaborador
Mensagens: 3092
Registrado em: 12 Ago 2008 15:50
Localização: São Paulo-SP-Brasil

Criar Tags no CDX

Mensagem por alxsts »

Olá!

Acho que é porque não tem o nome de cada TAG a ser criada dentro do CDX. Mexi no código mas não testei. Veja se funciona:

Código: Selecionar todos

FUNCTION CdxCreate()

REQUEST DBFCDX
RDDSETDEFAULT('DBFCDX')
// DBSETDRIVER('DBFCDX')  --> desnecessário                                        

SET AUTOPEN ON     // --> Se os nomes do arquivo DBF e do CDX forem iguais, abre o CDX automaticamente no USE
SET AUTORDER TO 1  // --> Se AUTOPEN estiver ON, faz o set order no USE

LOCAL nFile
LOCAL nFileCount
LOCAL nTag
LOCAL nTagCount
LOCAL nIndex
LOCAL cNTX:=INDEXEXT()
LOCAL aArq := {}

AADD( aArq, { ;
            {"FORNECE","Arquivo de Fornecedores" },;  // Arquivo DBF
            {"FORNECE" }                 ,;  // Arquivo CDX
            {"DELETADO+NOME","CODIGO","CGC"}     ,;  // Campos
            {"Ativo","Codigo","CGC"}  // Nomes das TAGS
            "FORN"                     ,;  // Alias
            })

// CRIA O CDX
nFileCount := Len( aArq )

For nFile := 1 TO nFileCount
   USE aArq[ nFile, 1, 1] EXCLUSIVE NEW ALIAS aArq[ nFile, 5] // ABRIR EM MODO EXCLUSIVO
   FErase( aArq[ nFile, 2] + cNTX )
   nTagCount := LEN(aArq[ nFile,3])  // conta os campos (as ordens ou tags)
   FOR nTag := 1 TO nTagCount
     //ORDCREATE(<cOrderBagName>,[<cOrderName>],<cExpKey>, <bExpKey>, [<lUnique>]) --> NIL		     
     OrdCreate( aArq[ nFile, 2], aArq[ nFile, 4, nTag], aArq[ nFile, 3, nTag], &( "{ || " + aArq[ nFile, 3, nTag + " }" ), .F. )
   NEXT
   DbCloseArea( aArq[ nFile, 5] )
NEXT

USE FORNECE SHARED NEW ALIAS FORN

/*
dbSetIndex((aArq[1,2,1]+cNTX))        // --> Se Autopen estiver ON, não precisa abrir os arquivo estrutural de índice (,CDX)
DbSetOrder( aArq)
DBSETORDER(2)
*/

FORN->( OrdSetFocus (2 ), DBGOTOP(), BROWSE() )  // Ou OrdSetFocus( "Codigo" )

QUIT
Tem algumas informações importantes sobre esta migração no tópico Criação de índices CDX no xHarbour
[]´s
Alexandre Santos (AlxSts)
Avatar do usuário
rubens
Colaborador
Colaborador
Mensagens: 1520
Registrado em: 16 Ago 2003 09:05
Localização: Nova Xavantina - MT

Criar Tags no CDX

Mensagem por rubens »

Caro Alxsts,

Certinho realmente tava faltando a tag.. precisou de umas correções mas funcionou blz.
Como é para clipper tive que remover umas linhas do harbour.

Ficou a seguinte dúvida: Pro harbour vai haver mudanças na forma de usar o cdx?

Olha como ficou o código.

Teve alguns pontos que dava erro na compilação daí tive que atribuir variáveis.. como o nome do arquivo e o alias.. ele não buscava direto da matriz, dava erro...

Código: Selecionar todos

LOCAL nFile
LOCAL nFileCount
LOCAL nTag
LOCAL nTagCount
LOCAL nIndex
LOCAL aArq := {}

REQUEST DBFCDX
RDDSETDEFAULT('DBFCDX')
cNTX:=INDEXEXT()

* SET AUTOPEN ON  // --> Se os nomes do arquivo DBF e do CDX forem iguais, abre o CDX automaticamente no USE
* SET AUTORDER TO 1 // --> Se AUTOPEN estiver ON, faz o set order no USE

AADD( aArq, { ;
	 {"FORNECE","Arquivo de Fornecedores" },; // Arquivo DBF
	 {"FORNECE" }									,; // Arquivo CDX
	 {"DELETADO+NOME","CODIGO","CGC"}		,; // Campos
	 {"Ativo","Codigo","CGC"}					,; // Nomes das TAGS
	 "FORN" })								   	// Alias

// CRIA O CDX
nFileCount	:= Len( aArq )

For nFile = 1 TO nFileCount
   cFILEDBF	:= AARQ[nFILE,1,1]
   cALIAS	:= aArq[nFile,5]
   USE &cFILEDBF EXCLUSIVE NEW ALIAS &cALIAS // ABRIR EM MODO EXCLUSIVO
   * cARQCDX	:= aArq[nFile,2,1]+cNTX
   FErase( "&cARQCDX" )
   nTagCount := LEN(aArq[nFile,3]) // conta os campos (as ordens ou tags)
   FOR nTag := 1 TO nTagCount
	 //ORDCREATE(<cOrderBagName>,[<cOrderName>]		,<cExpKey>		   , <bExpKey>							  , [<lUnique>]) --> NIL
	 * OrdCreate( aArq[ nFile,2,1], aArq[ nFile, 4, nTag], aArq[ nFile, 3, nTag], &( "{ || " + aArq[nFile,3,nTag] + " }" ), .F. )
	 OrdCreate( aArq[ nFile,2,1], aArq[ nFile, 4, nTag], aArq[ nFile, 3, nTag],&( "{ || " + aArq[nFile,3,nTag] + " }" ) , .F. )
   NEXT
   DbCloseArea( aArq[ nFile, 5] )
NEXT

USE FORNECE SHARED NEW ALIAS FORN

/*
dbSetIndex((aArq[1,2,1]+cNTX))    // --> Se Autopen estiver ON, não precisa abrir os arquivo estrutural de índice (,CDX)
DbSetOrder( aArq)
DBSETORDER(2)
*/

FORN->( OrdSetFocus (1), DBGOTOP(), BROWSE() ) // Ou OrdSetFocus( "Codigo" )
QUIT
Aos moderadores peço desculpa por ter colocado o post nessa área.. quando criei o tópico tinha quase certeza de ter criado na Área clipper... sintam-se a vontade para movê-lo para a área correta...

Obrigado
Rubens
"Eu e minha casa servimos ao Senhor e você ???"
Avatar do usuário
rochinha
Administrador
Administrador
Mensagens: 4664
Registrado em: 18 Ago 2003 20:43
Localização: São Paulo - Brasil
Contato:

Criar Tags no CDX

Mensagem por rochinha »

Amiguinho,
Ficou a seguinte dúvida: Pro harbour vai haver mudanças na forma de usar o cdx?
Mudança nenhuma precisará.

Mas se você tiver alguns erros do tipo dbcreate ou erros esquisitos, você precisará criar as estruturas da tabela afetada dentro de seu aplicativo Harbour.
OPS! LINK QUEBRADO? Veja ESTE TOPICO antes e caso não encontre ENVIE seu email com link do tópico para [url=mailto://fivolution@hotmail.com]fivolution@hotmail.com[/url]. Agradecido.

@braços : ? )

A justiça divina tarda mas não falha, enquanto que a justiça dos homens falha porque tarda.
Avatar do usuário
rubens
Colaborador
Colaborador
Mensagens: 1520
Registrado em: 16 Ago 2003 09:05
Localização: Nova Xavantina - MT

Criar Tags no CDX

Mensagem por rubens »

Pois eh... mestre Rochinha... tudo jóia?

Pergunto isso por causa do seguinte:

Primeiro: Estou aqui animado e estudando e lendo muito sobre migrar para harbour.
Daí a base do meu programa é o disponibilizado há muito tempo e bota tempo, pelo antigo clipper´s club.
Bom já consegui converter os ntx para cdx. O clipper que uso é o 5.2e. Rodou os CDX belezinha mas Tô precisando urgente antes de tentar o harbour melhorar alguns relatórios e consultas que já existem. Eu fiz a lição de casa e pesquisei muito aqui sobre isso. Como não vou ficar no clipper, não faz sentido eu fazer estas mudanças com a six. Porque quando for para o harbour não vai ser aproveitado. Se continuar com o CDX algumas opções de filtragem não funciona corretamente no 5.2e pelas pesquisas que fiz... teria que compilar em 5.3. Fiz uns testes e surgiram uns problemas mas acho que é assunto para outro tópico.
Bem até o momento tudo tranquilo com o 5.2e. Não percebi melhoras em algumas rotinas... só algumas que usavam os especificações dos ntx e onde tem a subntx. O resto já dbsetorder que me parece ficou a mesma coisa.

O jeito vai ser continuar com velocidade igual e talvez mais estabilidade, fazer umas correções onde tem subntx e indicações de ntx, para não precisar mecher refazer o trabalho de novo na mudança para o harbour...

Rubens
"Eu e minha casa servimos ao Senhor e você ???"
Avatar do usuário
rochinha
Administrador
Administrador
Mensagens: 4664
Registrado em: 18 Ago 2003 20:43
Localização: São Paulo - Brasil
Contato:

Criar Tags no CDX

Mensagem por rochinha »

Amiguinho,
não faz sentido eu fazer estas mudanças com a six
Para o Harbour foram portadas algumas bibliotecas e entre elas a SIX, veja HBSix.

Quando eu usava o 5.2e, também usei a SUBNTX e se não me engano, se não me engano fui um dos primeiros a esboçar um uso prático dela aqui no forum e talvez o primeiro, único e último a usar a SUBNTX com Fivewin para Clipper.

Biblioteca boa pra, canário, fiu, fiu, fiu. Demorei um ano para me decidir se deixava ela para usar CDX com 5.3(melhor dobradinha).

Mas entenda, quando você passar a usar CDX verá o tempo que perdeu em não adotá-la antes.

Imagine hoje,

Um .DBF suporte 255 campos e voce queira indexar cada campo usando .NTX. Ao abrir um unico .DBF com 255 campos e 255 indices .NTX o FILES do CONFIG estouraria.

Com CDX voce abre o .DBF, O respectivo CDX, abre um TBrowse, clica em cada uma das colunas e obtém a ordenação num triz, estilo uma planilha do EXCEL e suas colunas.

Ao transportar o seu código antigo você só vai mudar o que é referente a telas e re-escrever somente as linhas de filtro.

Tenho uma tela de browse em meu sistema onde estão pendurados um folder com 10 abas. O browse com tabela de clientes e cada aba do folder abre uma tabela vinculada(nunca gostei de usar comandos de ligação) onde faço as filtragens usando SetScope() e SetFilter().

São instantâneos, seguros e eficazes.

Pena que quando a SUBNTX apareceu o Harbour estava angariando usuários. Mas com o uso de CDX voce deixa as bibliotecas de terceiro para usar algo da linguagem.

SUBNTX Fivewin Teste

Somente um exemplo da antiga funcionalidade.
OPS! LINK QUEBRADO? Veja ESTE TOPICO antes e caso não encontre ENVIE seu email com link do tópico para [url=mailto://fivolution@hotmail.com]fivolution@hotmail.com[/url]. Agradecido.

@braços : ? )

A justiça divina tarda mas não falha, enquanto que a justiça dos homens falha porque tarda.
Responder