Página 1 de 1

Ler DBF com conexão ADODB.Connection

Enviado: 31 Mai 2018 10:16
por asimoes
Pessoal,

Estou acesso com dbf via ADODB.Connection, só que notei uma lentidão absurda na leitura, existe algum exemplo ou conector para ler mais rápido ?

A tabela que eu estou lendo tem 25 mil registros com 11 campos tá levando mais de 15 minutos para ler.

Ler DBF com conexão ADODB.Connection

Enviado: 02 Jun 2018 00:52
por JoséQuintas
Não tem informação suficiente pra dizer alguma coisa.

Usar o ADO, pode usar qualquer coisa, tem algumas opções pra DBF, mas que não fazem parte do ADO.
Além disso, há formas diferentes de usar o ADO, ou de recuperar informações.
Também não sei se está dizendo sobre acesso direto ou via rede.

cheguei a usar ADS Local, que é grátis, compatível com Clipper SIX/CDX, e o acesso era rápido.
asimoes escreveu:A tabela que eu estou lendo tem 25 mil registros com 11 campos tá levando mais de 15 minutos para ler.
Sei não se não deveria ser instantâneo ou quase....

Ler DBF com conexão ADODB.Connection

Enviado: 02 Jun 2018 10:16
por asimoes
Vou preparar o exemplo para quem quiser estudar

Ler DBF com conexão ADODB.Connection

Enviado: 02 Jun 2018 10:40
por JoséQuintas
a string pra ADS local, compatível com SIXCDX (fonte VB6):

Código: Selecionar todos

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;"
demorar tudo isso, talvez neste comando que eu usava no aplicativo de transportes.
Totais de tudo, vindos de DBFs diferentes, contendo movimentação de vários anos.
( Fonte VB6 mas não muito diferente do Harbour).

Código: Selecionar todos

cSql = "select " & _
   "cnDatEmi DtEmissao, " & _
   "count(*) CtrcQtd, " & _
   "Sum(cnPeso) CtrcPeso, " & vbCrLf & _
   "Sum(cnValor) CtrcValor, " & _
   "Sum(cnVlMerc) ValorMerc, " & _
   "0 CFQtd, " & vbCrLf & _
   "0 CFValor, " & _
   "0 ColetaQtd, " & _
   "0 ColetaVlr, " & vbCrLf & _
   "0 ColVlMerc " & vbCrLf & _
   "into lixo " & _
   "From gtconhe group by DtEmissao "
cSql = cSql & _
   "union all " & vbCrLf & _
   "select cfDatEmi DtEmissao, " & _
   "0 CtrcQtd, " & _
   "0 CtrcPeso, " & vbCrLf & _
   "0 CtrcValor, " & _
   "0 ValorMerc, " & _
   "count(*) CFQtd, " & vbCrLf & _
   "Sum(CFValor) CfValor, " & _
   "0 ColetaQtd, " & _
   "0 ColetaVlr, " & vbCrLf & _
   "0 ColVlMerc " & vbCrLf & _
   "From gtcontr group by DtEmissao "
cSql = cSql & vbCrLf & _
   "union all " & _
   "Select " & _
   "ceDatEmi DtEmissao, " & _
   "0 CtrcQtd, " & vbCrLf & _
   "0 CtrcPeso, " & _
   "0 CtrcValor, " & _
   "0 ValorMerc, " & vbCrLf & _
   "0 CFQtd, " & _
   "0 CFValor, " & _
   "Count(*) ColetaQtd, " & vbCrLf & _
   "Sum(ceValFat) ColetaVlr, " & _
   "Sum(jpnftr1.ntValor) ColVlMerc " & vbCrLf & _
   "from jpordem " & _
   "left join jpnftr1 on jpordem.ceNumLan = jpnftr1.ntColeta " & _
   "group by DtEmissao " & vbCrLf

SET Rs = cnMySql.Execute( cSql )