Jump to content
Fivewin Brasil

ADSCDX


Manoel Marinho

Recommended Posts

Alguém por gentileza poderia compilar e testar o programa abaixo?

Nos meus testes aqui, no segundo BROWSE os dados não aparecem.

#include "FiveWin.ch"
#include "Ads.ch"

function Main()

   set date british
   set century on
   set epoch to 1960
   set deleted on
   set exclusive off
   SetHandleCount( 155 )
   SET 3DLOOK on
   set autopen off
   SET OPTIMIZE on

   REQUEST DBFCDX
   REQUEST DBFFPT
   REQUEST DESCEND
   REQUEST ADS, ADSKeyno, ADSKeycount, AdsGetRelKeyPos, AdsSetRelKeyPos
   EXTERN ADSKeyno, ADSKeycount, AdsGetRelKeyPos, AdsSetRelKeyPos
   rddRegister( "ADS", 1 )
   SET FILETYPE to CDX
   ADSLocking( .T. )
   set( _SET_MBLOCKSIZE, 33 )
   set( _SET_OPTIMIZE, .t. )
   SET SERVER local
   
   rddsetdefault( "DBFCDX" )

   if !file( "TESTE1.DBF" )
      dbcreate( "TESTE1.DBF", { { "CODIGO", "C", 3, 0 }, { "DESCRICAO", "C", 30, 0 } }, "DBFCDX" )
      use TESTE1 exclusive NEW
      for N := 1 to 999
         TESTE1->( dbappend() )
         TESTE1->CODIGO    := strzero( N, 3, 0 )
         TESTE1->DESCRICAO := replicate( TESTE1->CODIGO, 10 )
      next N
   else
      use TESTE1 exclusive NEW
   endif
   TESTE1->( dbgotop() )
   TESTE1->( browse() )
   TESTE1->( dbclosearea() )

   rddsetdefault( "ADS" )

   if !file( "TESTE2.DBF" )
      dbcreate( "TESTE2.DBF", { { "CODIGO", "C", 3, 0 }, { "DESCRICAO", "C", 30, 0 } }, "ADSCDX" )
      use TESTE2 exclusive NEW
      for N := 1 to 999
         TESTE2->( dbappend() )
         TESTE2->CODIGO    := strzero( N, 3, 0 )
         TESTE2->DESCRICAO := replicate( TESTE2->CODIGO, 10 )
      next N
   else
      use TESTE2 exclusive NEW
   endif
   TESTE2->( dbgotop() )
   TESTE2->( browse() )
   TESTE2->( dbclosearea() )

return NIL

 

Link to comment
Share on other sites

  • 10 months later...


ADSMAN.prg(5) Error F0029  Can't open #include file: 'Ads.ch'

Crie um ZIP completo com o que se usa para compilar essa "coisa" de ADS.

Teste agora:

// \SAMPLES\ADSMAN.PRG
// http://fivewin.com.br/index.php?/topic/28374-adscdx/
	#include "FiveWin.ch"
#include "Ads.ch"
	ANNOUNCE RDDSYS
REQUEST OrdKeyNo, OrdKeyCount, OrdCreate, OrdKeyGoto // Para ListBox
REQUEST ADS, ADSKeyno, ADSKeycount, AdsGetRelKeyPos, AdsSetRelKeyPos
REQUEST ADSKeyno, ADSKeycount, AdsGetRelKeyPos, AdsSetRelKeyPos
REQUEST DBFCDX, DBFFPT, DESCEND
	function Main()
	   RDDSETDEFAULT("DBFCDX")
	   SET CENTURY ON
   SET DATE BRITISH
   SET TIME FORMAT TO "HH:MM:SS"
   SET EPOCH TO YEAR( DATE() ) - 30
   SET SOFTSEEK OFF
   SET WRAP ON
   SETCANCEL( .F. )
   SET CONFIRM OFF
   SET DELETED ON
   SET _3DLOOK ON
   SET UNIQUE OFF
   SET ESCAPE OFF
   SET EXACT ON  // CONTROLA O :=, = e ==
   SET EXCLUSIVE OFF
   SET MULTIPLE OFF
	   rddRegister( "ADS", 1 )
   SET FILETYPE to CDX
   ADSLocking( .T. )
	   /* //???????????????????
   set( _SET_MBLOCKSIZE, 33 )
   set( _SET_OPTIMIZE, .t. )
   */
	   SET SERVER LOCAL
   
   if !file( "TESTE1.DBF" )
      dbcreate( "TESTE1.DBF", { { "CODIGO", "C", 3, 0 }, { "DESCRICAO", "C", 30, 0 } }, "DBFCDX" )
      use TESTE1 exclusive NEW
      for N := 1 to 999
         TESTE1->( dbappend() )
         TESTE1->CODIGO    := strzero( N, 3, 0 )
         TESTE1->DESCRICAO := replicate( TESTE1->CODIGO, 10 )
      next N
   else
      use TESTE1 exclusive NEW
   endif
	   TESTE1->( dbgotop() )
   TESTE1->( browse() )
   TESTE1->( dbclosearea() )
	   rddsetdefault( "ADS" )
	   if !file( "TESTE2.DBF" )
      dbcreate( "TESTE2.DBF", { { "CODIGO", "C", 3, 0 }, { "DESCRICAO", "C", 30, 0 } }, "ADSCDX" )
      use TESTE2 exclusive NEW
      for N := 1 to 999
         TESTE2->( dbappend() )
         TESTE2->CODIGO    := strzero( N, 3, 0 )
         TESTE2->DESCRICAO := replicate( TESTE2->CODIGO, 10 )
      next N
   else
      use TESTE2 exclusive NEW
   endif
   TESTE2->( dbgotop() )
   TESTE2->( browse() )
   TESTE2->( dbclosearea() )
return NIL


 

Nao tem como compilar isso, envie completo via ZIP.

Link to comment
Share on other sites

Trabalho com ADS desde 2003/2004 com DBF até 2007, depois ja comecei a usar com ADT e Dicionários de dados. Hoje meu sistema trabalha com a base de dados de um cliente com 160 gb e eles trabalham home-office em alguns casos.

Com DBF tive alguns problemas, principalmente no xbrowse, então criei a classe tAds para trabalhar estilo OOP igual C# no harbour com FW. Você pode baixar a classe aqui:

https://github.com/giovanyvecchi/tAdsGit

Neste repositório tem o Dbf2Advantage.exe que é um aplicativo para converter seus DBFs em ADTs com Dicionário de dados. Leia o help para ver a classe. 

De qualquer maneira tenta abrir os arquivos assim:

use ("C:\CaminhoCompleto\TESTE2") Alias TESTE2 exclusive NEW via "ADSCDX"

 

Link to comment
Share on other sites

15 horas atrás, Manoel Marinho disse:

A classe do Giovany é fantástica.

Mas não tenho a menor condição de adaptar meus fontes para usar.

Seria um trabalho de meses, talvez anos.

É um ERP enorme com milhares de programas.

 

Veja bem. Para usar a tAds você não precisa alterar nenhuma forma de funcionamento dos seus códigos, apenas complementar conforme for retificando.

1-Primeiramente, importar seus DBFs e criar um dicionario de dados.

2-Iniciar o programa com TADS_START_CONFIG()

3-Abrir o dicionário de dados Ex:

Local nConnectionServer := 1

TADS_START_CONFIG() // Parametriza e cria os ambientes para uso do Advantage DataBase Server
oMyConnectionServer := tAdsConnection():New(nConnectionServer,.T.) // .T. Para informar que esta conexão é a Padrão (Por Falta)
oMyConnectionServer:cDataDictionary  := "\\SERVER\REDE\DADOS\MyDataDictionary.add"
oMyConnectionServer:cUserLogin       := "adssys"
oMyConnectionServer:cSenhaConnect    := "123456"
oMyConnectionServer:nTpConnect       := 7

Depois para abrir as tabelas você troca os comandos assim:

Antes: USE ("C:\CAMINHO\CLIENTES.DBF") ALIAS CLIENTES NEW 

CLIENTES->(BROWSE())

Depois: USE "CLIENTES" ALIAS CLIENTES NEW

(CLIENTES)->(BROWSE())

Outra observação que deve ser contestado são as funções de usuário que estão sendo usadas nas TAGs dos Índices, Ex:

Index on My_Function(blabla) TAG TSTFUN TO "C:\CAMINHO\CLIENTES.CDX"

Os índices são criados no dicionário de dados, e quando você apagar eles fisicamente e abrir somente a tabela ADT os índices são criados automaticamente.

Uma enorme vantagem do ads é quando vc tem uma tabela com varias tags de índices e convencionalmente você teria que executar o INDEX ON para cada uma delas. No ads todas as Tags são criadas ao mesmo tempo. Antes de usar dicionário de dados a reindexação durava uns 5 minutos, depois caiu para 45 segundos. 

Para ver as funções compatíveis com clipper que funcionam nos processos de criação das tags de índices e filtros consulte no help do Advantage por 'SCALAR FUNCTIONS'.

 

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
×
×
  • Create New...