Clipper On Line • Ver Tópico - Acessar DBF/CDX com Delphi 7

Acessar DBF/CDX com Delphi 7

Discussão sobre outras linguagens de programação.

Moderador: Moderadores

 

Acessar DBF/CDX com Delphi 7

Mensagempor aprendiz_ce » 10 Jun 2017 18:28

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.
Nota de Moderação:
Toledo: O presente tópico foi movido da seção CA-Clipper, uma vez que seu conteúdo não tem relação com os objetivos daquela seção, onde só podem constar dúvidas técnicas de programação diretamente relacionadas com o Clipper.
Sucesso é a soma de pequenos esforços, repetidos o tempo todo.
Avatar de usuário

aprendiz_ce
Usuário Nível 3

Usuário Nível 3
 
Mensagens: 147
Data de registro: 21 Jul 2011 10:05
Cidade/Estado: Fortaleza/CE
Curtiu: 0 vez
Mens.Curtidas: 7 vezes

Acessar DBF/CDX com Delphi 7

Mensagempor JoséQuintas » 10 Jun 2017 18:47

Pode usar ADO e ADS Local.

"SELECT * FROM arquivo WHERE ....."
José M. C. Quintas
Harbour 3.2, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, PNotepad
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18013
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1206 vezes

Acessar DBF/CDX com Delphi 7

Mensagempor aprendiz_ce » 11 Jun 2017 11:51

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".
Sucesso é a soma de pequenos esforços, repetidos o tempo todo.
Avatar de usuário

aprendiz_ce
Usuário Nível 3

Usuário Nível 3
 
Mensagens: 147
Data de registro: 21 Jul 2011 10:05
Cidade/Estado: Fortaleza/CE
Curtiu: 0 vez
Mens.Curtidas: 7 vezes

Acessar DBF/CDX com Delphi 7

Mensagempor JoséQuintas » 11 Jun 2017 12:29

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.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, PNotepad
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18013
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1206 vezes

Acessar DBF/CDX com Delphi 7

Mensagempor aprendiz_ce » 12 Jun 2017 09:36

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.
Sucesso é a soma de pequenos esforços, repetidos o tempo todo.
Avatar de usuário

aprendiz_ce
Usuário Nível 3

Usuário Nível 3
 
Mensagens: 147
Data de registro: 21 Jul 2011 10:05
Cidade/Estado: Fortaleza/CE
Curtiu: 0 vez
Mens.Curtidas: 7 vezes

Acessar DBF/CDX com Delphi 7

Mensagempor JoséQuintas » 12 Jun 2017 09:42

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.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, PNotepad
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18013
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1206 vezes

Acessar DBF/CDX com Delphi 7

Mensagempor aprendiz_ce » 12 Jun 2017 16:06

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!
Sucesso é a soma de pequenos esforços, repetidos o tempo todo.
Avatar de usuário

aprendiz_ce
Usuário Nível 3

Usuário Nível 3
 
Mensagens: 147
Data de registro: 21 Jul 2011 10:05
Cidade/Estado: Fortaleza/CE
Curtiu: 0 vez
Mens.Curtidas: 7 vezes

Acessar DBF/CDX com Delphi 7

Mensagempor JoséQuintas » 12 Jun 2017 16:19

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;"
José M. C. Quintas
Harbour 3.2, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, PNotepad
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18013
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1206 vezes

Acessar DBF/CDX com Delphi 7

Mensagempor JoséQuintas » 12 Jun 2017 16:27

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...
José M. C. Quintas
Harbour 3.2, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, PNotepad
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18013
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1206 vezes

Acessar DBF/CDX com Delphi 7

Mensagempor JoséQuintas » 12 Jun 2017 16:30

José M. C. Quintas
Harbour 3.2, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, PNotepad
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18013
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1206 vezes

Acessar DBF/CDX com Delphi 7

Mensagempor aprendiz_ce » 12 Jun 2017 16:36

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.
Sucesso é a soma de pequenos esforços, repetidos o tempo todo.
Avatar de usuário

aprendiz_ce
Usuário Nível 3

Usuário Nível 3
 
Mensagens: 147
Data de registro: 21 Jul 2011 10:05
Cidade/Estado: Fortaleza/CE
Curtiu: 0 vez
Mens.Curtidas: 7 vezes

Acessar DBF/CDX com Delphi 7

Mensagempor JoséQuintas » 12 Jun 2017 17:04

É 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
José M. C. Quintas
Harbour 3.2, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, PNotepad
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18013
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1206 vezes

Acessar DBF/CDX com Delphi 7

Mensagempor aprendiz_ce » 12 Jun 2017 17:26

Entendido.

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

Qualquer dúvida ou acerto darei retorno.

Grato.
Sucesso é a soma de pequenos esforços, repetidos o tempo todo.
Avatar de usuário

aprendiz_ce
Usuário Nível 3

Usuário Nível 3
 
Mensagens: 147
Data de registro: 21 Jul 2011 10:05
Cidade/Estado: Fortaleza/CE
Curtiu: 0 vez
Mens.Curtidas: 7 vezes

Acessar DBF/CDX com Delphi 7

Mensagempor aprendiz_ce » 13 Jun 2017 08:41

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.
Sucesso é a soma de pequenos esforços, repetidos o tempo todo.
Avatar de usuário

aprendiz_ce
Usuário Nível 3

Usuário Nível 3
 
Mensagens: 147
Data de registro: 21 Jul 2011 10:05
Cidade/Estado: Fortaleza/CE
Curtiu: 0 vez
Mens.Curtidas: 7 vezes

Acessar DBF/CDX com Delphi 7

Mensagempor JoséQuintas » 14 Jul 2017 18:49

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
José M. C. Quintas
Harbour 3.2, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, PNotepad
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18013
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1206 vezes

Próximo



Retornar para Outras linguagens de programação

Quem está online

Usuários vendo este fórum: Nenhum usuário registrado online e 10 visitantes


Ola Amigo, espero que meu site e forum tem lhe beneficiado, com exemplos e dicas de programacao.
Entao divulgue o link da Doacao abaixo para seus amigos e redes sociais ou faça uma doacao para o site forum...
MUITO OBRIGADO PELA SUA DOACAO!
Faça uma doação para o forum
cron
v
Olá visitante, seja bem-vindo ao Fórum Clipper On Line!
Efetue o seu login ou faça o seu Registro