Página 1 de 1

Querys em DBF

Enviado: 17 Jun 2008 17:20
por Luiz
Ola, alguem conhece alguma forma de fazer querys num DBF? (utilizando comandos SQL)

É que eu lembrei que no Delphi existe esse recurso. Claro que não deve haver nenhum ganho significativo de performace (talvez nenhum), porem a facilidade de usar uma query as vezes é uma mão na roda.

Se não existir eu tava pensando em fazer um tradutor de querys pra DBF.

Valeu.

Re: Querys em DBF

Enviado: 17 Jun 2008 17:49
por Romeuk
Olá
Também me interesso pelo assunto. Cheguei a começar um projeto de Query que ficou parado. O [Alexandre Kresin][/http://kresin.belgorod.su/clipper.html] tem um programa de dbf com query, mas não vi os fontes. Dê uma olhada mais a fundo e talvez eles estejam lá. Neste link tem também um artigo sobre otimização de queries.

Re: Querys em DBF

Enviado: 18 Jun 2008 09:22
por edmarfrazao
Tem que usar xharbour com ads.

Código: Selecionar todos


  #include "ADS.CH"
  rddRegister( "ADS", 1 )
  SET SERVER LOCAL
  vSql:=[Select * from clientes]
  vArqLan := EXECUTA_SQL(vSql,[CTLANCAM])

FUNCTION EXECUTA_SQL(vSql,vAlias,vINd1)
//   Local vArea    := Alias()
   Local xNomeArq :=Cria_Nometmp()
   Local xErro    := 0
//   Local nArea :=Select()
   local nErr, nPos
*   if vArea#''
*     close &vArea
*   endif

   if mDriver=[SQLRDD]
      oSql   := SR_GetConnection()
      select 0   // for‡a selecionar uma nova area
      apCode := SR_SQLParse( vSql, @nErr, @nPos )
      cComm  := SR_SQLCodeGen( apCode, , oSql:nSystemID )
      xErro := oSql:exec( cComm,,.t.,[teste], M_DIRTMP+[\]+xNomeArq,vAlias )
//      xErro := oSql:exec( cComm,,.t.,[teste], M_PTDIRET3+[\]+xNomeArq,vAlias )

//      use &cComm alias &vAlias via mDriver new

      if xErro#0
         M_Aviso([Erro na execu‡Æo do sql ]+Str(xErro))
      endif
      if vInd1#nil
        CriaIndice(xNomeArq,vINd1)
      endif
      return Alias()

   else
   //   IF adsGetConnectionHandle() == 0
         adsConnect( "c:\SIS\FIRMA1") // this is the path to your .dbf/.cdx files
   //   ENDIF
      IF !adsCreateSqlStatement ("alias_sql", 2) // alias_sql is a alias to be used in the browse bellow
         alert( "Cannot create SQL statement" )
      ELSE
         IF !adsExecuteSqlDirect ( vSql )
            M_Aviso([Erro na execu‡Æo do sql ]+Str(xErro))
         ENDIF
      ENDIF
   RETURN



   endif

return .t.

FUNCTION INV_DT_SQL(vData)
   Local vSql:=[]
   IF  MDSN=[MSSQL]
       vSql:=vData
   ELSE
       vSql:=Subst(vData,4,2)+[/]+Left(vData,2)+Right(vData,5)
   ENDIF
return vSql


Re: Querys em DBF

Enviado: 18 Jun 2008 13:16
por Hasse
Boa tarde Edmar.

Muito interessante esta opção.

Ficam entretanto, dúvidas....

Há documentação de uso ? Muito Possivelmente não há esta documentação... Infelizmente.

Se não há documentação, onde há exemplos que expliquem os seu uso, e ajudem a superar o caminho das pedras.

No xHarbour 1.1.0 baixado via CVS há na pasta \Contrib\rdd_ads um exemplo testmg.prg, que ainda não testei, mas pelo que entendi, há necessidade de se compilar ou providenciar, antes de mais nada, os arquivos ace32.dll ( Advantage Client Engine ), AXCWS32.DLL ( communication layer for remote server ) or ADSLOC32.DLL ( local server )

Ai ainda ficam as grandes interrogações que são os comando e funções disponíveis para o uso dos recursos disponíveis que, segundo deu para entender são MUITOS !!!.

Re: Querys em DBF

Enviado: 19 Jun 2008 21:26
por rochinha