É apenas pra mostrar possibilidades.
#include "inkey.ch"
PROCEDURE Main
LOCAL oConexao, oRs
oConexao := ConexaoMySql( "d:\jpa\cordeiro" )
oConexao:Open()
SetMode(40,100)
CLS
oRs := oConexao:Execute( "SELECT " + ;
" IDPEDIDO," + ;
" JPNOTFIS.NFNOTFIS AS NOTFIS, " + ;
" JPCADASTRO.CDNOME AS CADNOME, " + ;
" JPFINAN.FIDATVEN AS DATVEN, " + ;
" JPFINAN.FIVALOR AS VALOR, " + ;
" JPITPED.IPITEM AS ITEM, " + ;
" JPITPED.IPVALNOT AS VALNOT," + ;
" JPITEM.IEDESCRI AS ITEMNOME" + ;
" FROM JPPEDIDO" + ;
" LEFT JOIN JPNOTFIS ON JPNOTFIS.NFPEDIDO=JPPEDIDO.IDPEDIDO" + ;
" LEFT JOIN JPCADASTRO ON JPCADASTRO.IDCADASTRO=JPPEDIDO.PDCLIFOR" + ;
" LEFT JOIN JPFINAN ON JPFINAN.FIPEDIDO=JPPEDIDO.IDPEDIDO" + ;
" LEFT JOIN JPITPED ON JPITPED.IPPEDIDO=JPPEDIDO.IDPEDIDO" + ;
" LEFT JOIN JPITEM ON JPITEM.IDITEM=JPITPED.IPITEM" + ;
" WHERE PDDATEMI BETWEEN '2019-12-01' AND '2019-12-10'" )
WITH OBJECT oRs
DO WHILE ! :Eof()
?? oRs:Fields( "IDPEDIDO" ):Value
?? oRs:Fields( "NOTFIS" ):Value
?? oRs:Fields( "CADNOME" ):Value
?? oRs:Fields( "DATVEN" ):Value
?? oRs:Fields( "VALOR" ):Value
?? oRs:Fields( "ITEM" ):Value
?? oRs:Fields( "VALNOT" ):Value
?? oRs:Fields( "ITEMNOME" ):Value
?
:MoveNext()
ENDDO
:Close()
ENDWITH
oConexao:Close()
Inkey(0)
RETURN
FUNCTION ConexaoMySql( cPath )
LOCAL oConexao := win_OleCreateObject( "ADODB.Connection" )
oConexao:ConnectionString := "Provider=Advantage OLE DB Provider;" + ;
"Mode=Share Deny None;" + ;
"Show Deleted Records in DBF Tables with Advantage=False;" + ;
"Data Source=" + cPath + ";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;"
oConexao:CursorLocation := 3
oConexao:CommandTimeOut := 20
RETURN oConexao
O comando lista os pedidos, já pesquisando no financeiro, cadastro de clientes, itens de pedido, descrição de produtos, notas fiscais e filtro por data.
É direto do DBF !!!
Tive que apagar os índices atuais, porque acusou chave de indexação inválida.
Provavelmente porque não tem Left() ou alguma coisa parecida, mas caso alguém vá usar, trocaria Left() por Substr() e tudo bem.
Como era teste, nem me preocupei, apenas apaguei os CDX.
NÃO consegui fazer com o ODBC 11, deve ser uma string diferente, mas pra teste nem pesquisei, usei o que tinha aqui.
O ODBC que usei foi com meu antigo instalador:
http://www.josequintas.com.br/arquivos/setupjpa.msi
Mas importante:
O instalador instala ODBC ADS, Capicom e MSXML5 - os componentes de NFE
Infelizmente (ou não), ele remove tudo se deinstalar o setupjpa.
Se usa algum deles, fique sabendo que vai precisar reinstalar ao remover o setupjpa.
Quanto ao comando SQL e nomes de campos, só ajustar para seus DBFs.