Clipper On Line • Ver Tópico - Acessar DBF/CDX com Delphi 7
Página 1 de 2

Acessar DBF/CDX com Delphi 7

MensagemEnviado: 10 Jun 2017 18:28
por aprendiz_ce
Prezados,

Necessito criar uma rotina para acessar um DBF com índices CDX pelo Delphi. A rotina irá apenas localizar uma certa faixa de registros (filtro) e exibi-los. Dei uma olhada em alguns post aqui no fórum, mas confesso que não vi nada que me atendesse. Gostaria de algo bem simples, e de preferência free, pois a rotina é bem básica e não fará nenhum tipo de inclusão, alteração ou exclusão. Será que alguém poderia me ajuda?

Grato e aguardo qualquer orientação.

P.S.: Peço desculpas se o assunto "Delphi" não faz parte do fórum.

Acessar DBF/CDX com Delphi 7

MensagemEnviado: 10 Jun 2017 18:47
por JoséQuintas
Pode usar ADO e ADS Local.

"SELECT * FROM arquivo WHERE ....."

Acessar DBF/CDX com Delphi 7

MensagemEnviado: 11 Jun 2017 11:51
por aprendiz_ce
JoséQuintas escreveu:Pode usar ADO e ADS Local.

"SELECT * FROM arquivo WHERE ....."


O que exatamente você quis dizer com "ADS Local"?

Ficarei muito agradecido se o colega puder me mostrar o "caminho das pedras".

Acessar DBF/CDX com Delphi 7

MensagemEnviado: 11 Jun 2017 12:29
por JoséQuintas
Acredito que toda linguagem de programação aceite ADO.
ADO aceita qualquer coisa, basta ter o ODBC instalado.

O Advantage Database Server tem um ODBC também.
Esse ODBC tem um diferencial: ele permite trabalhar SEM SERVIDOR ADS.
Não precisa licença pra isso.
Vai trabalhar com DBFs/CDXs usando comandos SQL, até melhor e mais rápido do que pelo Clipper ou Harbour.

Esse tipo de uso é chamado por eles de ADS LOCAL, mas permite trabalhar em rede normalmente.
Esse LOCAL é chamado assim porque é o próprio ODBC que faz tudo sem servidor, não tem a ver com não poder usar em rede.

Acessar DBF/CDX com Delphi 7

MensagemEnviado: 12 Jun 2017 09:36
por aprendiz_ce
JoséQuintas escreveu:Acredito que toda linguagem de programação aceite ADO.
ADO aceita qualquer coisa, basta ter o ODBC instalado.

O Advantage Database Server tem um ODBC também.
Esse ODBC tem um diferencial: ele permite trabalhar SEM SERVIDOR ADS.
Não precisa licença pra isso.
Vai trabalhar com DBFs/CDXs usando comandos SQL, até melhor e mais rápido do que pelo Clipper ou Harbour.

Esse tipo de uso é chamado por eles de ADS LOCAL, mas permite trabalhar em rede normalmente.
Esse LOCAL é chamado assim porque é o próprio ODBC que faz tudo sem servidor, não tem a ver com não poder usar em rede.


Entendido. Mas pelo visto vou ter que utilizar esse "Advantage Database Server", é isso?

Abrir e manipular DBFs com Delphi não vejo complicação alguma, até mesmo porque existem alguns componentes para essa finalidade.
O meu problema é que nunca necessitei "associar" um DBF a um CDX para puder ter um ordenamento dos dados.

Vou fazer uma simulação aqui e volto para te dar uma retorno.

Grato pela pronta atenção.

Acessar DBF/CDX com Delphi 7

MensagemEnviado: 12 Jun 2017 09:42
por JoséQuintas
O ADS só vai ser interessante pra trabalhar simultâneo com Clipper/Harbour, ou pra aproveitar CDX existente.
Mas com ou sem CDX, no comando SQL basta o ORDER BY pra deixar em ordem.
A própria Microsoft tinha/tem ODBC pra dBASE, FoxPro e Visual FoxPro.

Quando digo simultâneo, me refiro a ler e gravar, mesmo estando em uso.

Acessar DBF/CDX com Delphi 7

MensagemEnviado: 12 Jun 2017 16:06
por aprendiz_ce
Eu acho que havia entendido errado! Pensei que com o ADS a coisa iria ficar bem melhor.

Você tem toda razão quando menciona em dar um "SELECT" para filtrar e "ORDER BY" para organizar o filtro. Claro que se eu já consigo acessar todos os DBFs, para filtrar eu realmente não necessitarei do CDX. O problema foi que eu me "abstrai" e fiquei pensando como "CLIPEIRO" (rs), aonde para dinamizar o "filtro" eu teria que posicionar o ponteiro de registros no primeiro registro da tal condição de filtro necessária. Será que o filtro (SELECT) somente nos DBFs ficará rápido? Pergunto no caso de uma tabela (DBF) como muitos registros.

Comantário: Eu "corri" atrás do ADS e instalei tudo que pude, até mesmo uns componentes no Delphi eu instalei, mas não consegui fazer funcionar nada em RUN TIME. No modo interativo utilizando um tal de "Advantage Data Architect" eu consegui na boa, tanto abrir os DBFs como os CDXs. Bem legal!

Mais uma vez obrigado pela sua valiosa atenção e aguardo pelo seu comentário.

Forte abraço!

Acessar DBF/CDX com Delphi 7

MensagemEnviado: 12 Jun 2017 16:19
por JoséQuintas
Igual SQL. Se existir CDX que ajude a fircar mais rápido, vai ser usado automaticamente.
Numa base de 16 milhões de registros, sem índice fica uma carroça.

Com a vinda de 64 bits, parece que é mais chatinho de instalar o ODBC.
Nem sei de onde tirou o Advantage Architet, deve ter instalado o servidor....

Case "ADSLOCAL"
    cString = "Provider=Advantage.OLEDB.1;" & _
    "Mode=Share Deny None;" & _
    "Show Deleted Records in DBF Tables with Advantage=False;" & _
    "Data Source=" & Sistema.PathDefault & ";Advantage Server Type=ADS_Local_Server;" & _
    "TableType=ADS_CDX;Security Mode=ADS_IGNORERIGHTS;" & _
    "Lock Mode=Compatible;" & _
    "Use NULL values in DBF Tables with Advantage=True;" & _
    "Exclusive=No;Deleted=No;"

Acessar DBF/CDX com Delphi 7

MensagemEnviado: 12 Jun 2017 16:27
por JoséQuintas
Se for instalar manualmente, seriam estes arquivos:

12/09/2006  07:10           937.984 ace32.dll
12/09/2006  07:10         1.241.088 adsloc32.dll
12/09/2006  07:10           462.848 ADSOLEDB.DLL
12/09/2006  07:10           159.744 axcws32.dll


sendo que o ACE32.DLL precisa estar ou na pasta do aplicativo ou junto com as DLLs.
A data dos arquivos deve ser a data que mexi com isso, 11 anos atrás.
De lá pra cá, a Microsoft mudou um pouco a parte de 64 bits, e complicou um pouquinho o OLEDB que ela tinha inventado e que o ADS usa/usava...

Acessar DBF/CDX com Delphi 7

MensagemEnviado: 12 Jun 2017 16:30
por JoséQuintas

Acessar DBF/CDX com Delphi 7

MensagemEnviado: 12 Jun 2017 16:36
por aprendiz_ce
Nossa, se ficar lento não vai dar certo!!!

Eu necessitaria deixar com o tempo de acesso semelhante ao de um banco de dados relacional. Claro que se ficar uma pouco lento, algo suportável, não tem problema. Com relação a 32 ou 64 bits não tem problema, pois posso compilar a rotinas no OS que ficar melhor ou mais fácil.

Vou pegar esse seu exemplo de conexão/ODBC e ver o que consigo fazer.

Sobre o ADS, eu baixei tudo lá do site deles e fui testando.

Acessar DBF/CDX com Delphi 7

MensagemEnviado: 12 Jun 2017 17:04
por JoséQuintas
É igual banco de dados relacional.
Se tiver índice (CDX) pra ajudar, é mais rápido.
Uma base com 16 milhões de registros, e com índice por código, o SELECT de um código é instantâneo.
Acredito que no MySQL seja a mesma coisa.

Faltou dizer:
Os comandos SQL do ADS são compatíveis com SQL Server, e não com MySQL.
Aquilo de SELECT TOP x ao invés de SELECT ... LIMIT x

Acessar DBF/CDX com Delphi 7

MensagemEnviado: 12 Jun 2017 17:26
por aprendiz_ce
Entendido.

Vou ficar fuçando aqui e ver o que consigo.

Qualquer dúvida ou acerto darei retorno.

Grato.

Acessar DBF/CDX com Delphi 7

MensagemEnviado: 13 Jun 2017 08:41
por aprendiz_ce
JoséQuintas, bom dia.

Consegui fazer uma pequena rotina para acessar os dados e deu certinho. Só consegui fazer utilizando os componentes
ADS instalados no Delphi. Aparentemente os mesmo só funcionando utilizando "alias" criados pelo "Advantage Data Architect".
Se for assim, não sei como vou distribuir um app definitivo. Detesto ter que ficar configuração o OS para que o app possa rodar certo,
pois gosto de "soltar" o app na máquina e pronto, daí ver o mesmo rodar.

Fiz uns teste com ODBC do ADS, mas sem sucesso. Vou ver se ainda consigo algo nesse sentido.

Dúvida:
Eu mexo com Harbour 3.2, sendo assim, será que ficaria fácil com o conhecimento (pouco) que eu tenho e no lugar do Delphi, utilizar o
xHarbour para fazer essa rotina, haja vista que a mesmo tem que ser em modo visual. Mas isso seria em ultimo caso!

Grato e aguardo pelo seu comentário.

Acessar DBF/CDX com Delphi 7

MensagemEnviado: 14 Jul 2017 18:49
por JoséQuintas
Não vi a mensagem antes.
Teria que ver qual a opção pra Delphi sobre como configurar as coisas.

O que eu usava no VB:
Case "ADSLOCAL"
    cString = "Provider=Advantage.OLEDB.1;" & _
    "Mode=Share Deny None;" & _
    "Show Deleted Records in DBF Tables with Advantage=False;" & _
    "Data Source=" & Sistema.PathDefault & ";Advantage Server Type=ADS_Local_Server;" & _
    "TableType=ADS_CDX;Security Mode=ADS_IGNORERIGHTS;" & _
    "Lock Mode=Compatible;" & _
    "Use NULL values in DBF Tables with Advantage=True;" & _
    "Exclusive=No;Deleted=No;"



E mais algumas coisas no ADS.INI, pra por exemplo aumentar o limite de usuários simultâneos e acesso via terminal service.
Nunca usei esse Data Architect. Acredito que seja outra forma de definir configurações, em arquivo próprio

Acessar DBF/CDX com Delphi 7

MensagemEnviado: 14 Jul 2017 19:03
por JoséQuintas
Complementando:

ADS_LOCAL é acesso igual o Harbour a DBF_NTX ou DBF_CDX, mas acesso em 32 bits ou 64 bits, permitindo até comando SQL.

ADS_SERVER é um servidor, trabalhando estilo SQL SERVER ou MYSQL.
O custo do server não é barato, mas a intenção é funcionar até por internet, com segurança/performance à altura de um server.
Ele tem também os formatos próprios, campos próprios, que vão além do Clipper.

No caso do Clipper, não era permitido usar ADS LOCAL, somente com server.
Mas ganhava os mesmos recrusos, inclusive base via internet.

Lógico, o ADS local é cada terminal mexendo nos arquivos DBFs, significa que problemas de rede pode causar os mesmos problemas do ClipperHarbour.
Mas a velocidade vai ser melhor, porque vai usar acesso de um jeito que o Clipper/Harbour não tem.

Só tem um lado chato, que pode ou não ser problema:
Como os DBFs são tratados como uma base de dados, um conjunto, é como se eles estivessem sempre em uso.
Abrir EXCLUSIVO no Clipper simultâneo com ADS local, sem opção, só depois do ADS liberar, mesmo se nenhum arquivo estiver aberto no ADS.