SQL no DBF em breve (promessa) Aleksander Czajczynski
Moderador: Moderadores
- Itamar M. Lins Jr.
- Administrador

- Mensagens: 7928
- Registrado em: 30 Mai 2007 11:31
- Localização: Ilheus Bahia
- Curtiu: 1 vez
SQL no DBF em breve (promessa) Aleksander Czajczynski
Olá!
DBF tem suas vantagens. Querendo ou não quando usamos ele com algum servidor ADS, LetoDbf, e tem mais um outro que o Pritpal Bedi trabalha que é CARÍSSIMO!
Tem os usuários de LINUX que não padecem do mal da microsoft de compartilhar pastas... E muitos outros detalhes interessantes do DBF.
Então será muito bom para empresas que tem servidores Linux com DBF com mais de 200 maquinas "penduradas", como já vi o pessoal aqui dizer.
Saudações,
Itamar M. Lins Jr.
DBF tem suas vantagens. Querendo ou não quando usamos ele com algum servidor ADS, LetoDbf, e tem mais um outro que o Pritpal Bedi trabalha que é CARÍSSIMO!
Tem os usuários de LINUX que não padecem do mal da microsoft de compartilhar pastas... E muitos outros detalhes interessantes do DBF.
Então será muito bom para empresas que tem servidores Linux com DBF com mais de 200 maquinas "penduradas", como já vi o pessoal aqui dizer.
Saudações,
Itamar M. Lins Jr.
Saudações,
Itamar M. Lins Jr.
Itamar M. Lins Jr.
- Itamar M. Lins Jr.
- Administrador

- Mensagens: 7928
- Registrado em: 30 Mai 2007 11:31
- Localização: Ilheus Bahia
- Curtiu: 1 vez
SQL no DBF em breve (promessa) Aleksander Czajczynski
Olá!
Para o que eles irão fazer não tem acesso aos fontes.
O Harbour tem o dele e se ele desejar e ver que será bom pra ele e os outros, ele que sabe.
Nem aconteceu ainda já estão achando isso e aquilo. Pq ADS tá, tá... ADS pertence a uma EMPRESA PARTICULAR é PAGO! Precisa ficar acompanhado suporte para cada versão... Precisa desenhar isso também. ?
Quando LINUS começou o Linux, foi praticamente a mesma coisa... Fazer o que já tem ? Assim como as dezenas de LIBS do [x]Harbour HWGUI, Minigui, WVG..., do próprio Linux com QT, GNOME, KDE, etc...
Assim como as IAs que já um monte... Sem acesso aos fontes, cada empresa particular que cuide. Open Source é diferente por isso.
Saudações,
Itamar M. Lins Jr.
ADS é pago e ponto.ADS SEM SERVIDOR SEMPRE FOI GRÁTIS.
Para o que eles irão fazer não tem acesso aos fontes.
O Harbour tem o dele e se ele desejar e ver que será bom pra ele e os outros, ele que sabe.
Nem aconteceu ainda já estão achando isso e aquilo. Pq ADS tá, tá... ADS pertence a uma EMPRESA PARTICULAR é PAGO! Precisa ficar acompanhado suporte para cada versão... Precisa desenhar isso também. ?
Quando LINUS começou o Linux, foi praticamente a mesma coisa... Fazer o que já tem ? Assim como as dezenas de LIBS do [x]Harbour HWGUI, Minigui, WVG..., do próprio Linux com QT, GNOME, KDE, etc...
Assim como as IAs que já um monte... Sem acesso aos fontes, cada empresa particular que cuide. Open Source é diferente por isso.
Saudações,
Itamar M. Lins Jr.
Saudações,
Itamar M. Lins Jr.
Itamar M. Lins Jr.
- JoséQuintas
- Administrador

- Mensagens: 20267
- Registrado em: 26 Fev 2007 11:59
- Localização: São Paulo-SP
SQL no DBF em breve (promessa) Aleksander Czajczynski
Eu uso ADO + MySQL, não tenho porque ficar discutindo sobre DBF.
Naquele link que postei, da migração do A.Simões, de 2020, tem um cara que disse que DBF era coisa de ancião.
Discuta com ele... é um tal de Itamar.
Naquele link que postei, da migração do A.Simões, de 2020, tem um cara que disse que DBF era coisa de ancião.
Discuta com ele... é um tal de Itamar.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
https://github.com/JoseQuintas/
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
https://github.com/JoseQuintas/
- Itamar M. Lins Jr.
- Administrador

- Mensagens: 7928
- Registrado em: 30 Mai 2007 11:31
- Localização: Ilheus Bahia
- Curtiu: 1 vez
SQL no DBF em breve (promessa) Aleksander Czajczynski
Olá!
Pois é "like me"
Ok ? Vou adorar a "cadeira de rodas" ou um suporte qualquer.
Saudações,
Itamar M. Lins Jr.
Pois é "like me"
Ok ? Vou adorar a "cadeira de rodas" ou um suporte qualquer.
Saudações,
Itamar M. Lins Jr.
Saudações,
Itamar M. Lins Jr.
Itamar M. Lins Jr.
- Itamar M. Lins Jr.
- Administrador

- Mensagens: 7928
- Registrado em: 30 Mai 2007 11:31
- Localização: Ilheus Bahia
- Curtiu: 1 vez
SQL no DBF em breve (promessa) Aleksander Czajczynski
Olá!
A visão deles é BEM DIFERENTE, tá vendo ?!
Saudações,
Itamar M. Lins Jr.
Se os GURUS acham isso ÓTIMO, e eu também um simples usuário é o que interessa.António Linares <antonio.fivetech@gmail.com>
19:28 (há 25 minutos)
para o Porto
Caro Aleksander,
> Pretendo fazer algum trabalho este ano sobre suporte a consultas SQL para além
> RDD (qualquer ambiente de trabalho aberto - não apenas em memória)
Isso seria realmente ótimo! Terei todo o gosto em ajudá-lo com isso!
A visão deles é BEM DIFERENTE, tá vendo ?!
Saudações,
Itamar M. Lins Jr.
Saudações,
Itamar M. Lins Jr.
Itamar M. Lins Jr.
- JoséQuintas
- Administrador

- Mensagens: 20267
- Registrado em: 26 Fev 2007 11:59
- Localização: São Paulo-SP
SQL no DBF em breve (promessa) Aleksander Czajczynski
Legal
Se Linares falou que é bom, então é bom.
Só compartilhar os DBFs pra todos os usuários no Windows e pronto.
Ou letodb com SQL
Aonde posso baixar ?
Se Linares falou que é bom, então é bom.
Só compartilhar os DBFs pra todos os usuários no Windows e pronto.
Ou letodb com SQL
Aonde posso baixar ?
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
https://github.com/JoseQuintas/
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
https://github.com/JoseQuintas/
- Mario Mesquita
- Usuário Nível 4

- Mensagens: 613
- Registrado em: 08 Dez 2009 13:47
- Localização: Rio de Janeiro
SQL no DBF em breve (promessa) Aleksander Czajczynski
Bom dia, pessoal.
Eu estou no grupo que "aquece mas não entra", rs Fiz uns ensaios com SLQ mas ainda estou preso no DBF. Nada contra, até gosto mas queria ter essa opção para caso seja preciso em bases realmente grandes. Tempo tb me falta, reescrever tudo pra SQL vai consumir tempo.
O VFP não está morto, galera. Tem um pessoal aí revitalizando até com uma nova versão, já que a MS disponibilizou os fontes. Tem até uma opção pra gerar em 64 bits. Andei dando uma olhada através de um amigo e confesso que me impressionou como a ferramenta é um autêntico RAD, vc pode criar classes baseadas em objetos que a ferramenta disponibiliza e que vc pode customizar do seu jeito. Não deixa de ser um parente nosso, da família xBase.
Como consigo obter esse ADS? Como o Quintas me disse uma vez, além de servir de aprendizado do SQL com os próprios DBFs pode ajudar a otimizar o programa, né? Poder gerar recordsets, gravar dados sem a preocupação de RLOCKs, FLOCKs... como consigo isso? Desculpem minha ignorância.
Saudações,
Mario.
Eu estou no grupo que "aquece mas não entra", rs Fiz uns ensaios com SLQ mas ainda estou preso no DBF. Nada contra, até gosto mas queria ter essa opção para caso seja preciso em bases realmente grandes. Tempo tb me falta, reescrever tudo pra SQL vai consumir tempo.
O VFP não está morto, galera. Tem um pessoal aí revitalizando até com uma nova versão, já que a MS disponibilizou os fontes. Tem até uma opção pra gerar em 64 bits. Andei dando uma olhada através de um amigo e confesso que me impressionou como a ferramenta é um autêntico RAD, vc pode criar classes baseadas em objetos que a ferramenta disponibiliza e que vc pode customizar do seu jeito. Não deixa de ser um parente nosso, da família xBase.
Como consigo obter esse ADS? Como o Quintas me disse uma vez, além de servir de aprendizado do SQL com os próprios DBFs pode ajudar a otimizar o programa, né? Poder gerar recordsets, gravar dados sem a preocupação de RLOCKs, FLOCKs... como consigo isso? Desculpem minha ignorância.
Saudações,
Mario.
- JoséQuintas
- Administrador

- Mensagens: 20267
- Registrado em: 26 Fev 2007 11:59
- Localização: São Paulo-SP
SQL no DBF em breve (promessa) Aleksander Czajczynski
1) Pra usar no modo harbour, precisa perguntar no harbour-users, com certeza tem gente que usa.
Lembro de já ver mensagens lá de quem usa com comandos SQL.
Depende de baixar coisas e acertar a compilação dessa contrib.
2) Outra opção é o SQLMIX e ODBC, tem pra Linux e Windows
Mesma coisa: precisa ver com quem usa isso
3) Usando ADO
Isso é padrão pra qualquer conector, seja DBF, MySQL, PostGre, SQL Server, SQLite.
Precisa baixar o conector do fabricante, e instalar no Windows.
No cnSQL vai indicar a string de conexão, que tem que bater com o nome do que foi instalado, e os parâmetros de IP, Path, ou o que precisar conforme o conector.
Da última vez que testei, usei esta conexão
A partir daí, só usar a conexão pra tudo.
Teste leve não tem graça, faça teste pesado.
Do tipo que usa vários arquivos, vários relacionamentos, filtros, agrupamentos
Vão ser usados seus DBFs e seus índices CDX compatíveis, sendo que os índices serão desprezados se não forem compatíveis.
Índices não são obrigatórios, mas se puderem ser aproveitados vão tornar o resultado mais rápido.
Como exemplo, vamos supor um financeiro, que usa código de cliente e código de portador
Com ADO já tem tudo que precisa, menos o ODBC, instalou pronto.
Com as opções do harbour.... boa sorte... vai pesquisando/perguntando, daqui uma semana ou mais talvez tenha descoberto o que precisa, e em menos de um mês pode começar a testar.
Ok, aí acima é ADO puro, sem nenhuma rotina pra facilitar.
Se facilitar, pode comparar o uso acima com DBF:
FINAN.CODCLI é similar a FINAN->CODCLI
LEFT JOIN CLIENTE ON FINAN.CODCLI = CLIENTE.CODCLI
seria similar a
SET RELATION TO FINAN->CODCLI INTO CLIENTE
onde cliente seria indexado por CLIENTE->CODCLI
WHERE VALOR < 1000
é similar a
SET FILTER TO VALOR < 1000
GROUP BY FINAN.CODCLI, FINAN.CODPORT
similar ao pouco usado
TOTAL ON ...
ORDER BY CLINOME, PORTNOME
similar a
INDEX ON CLINOME + PORTNOME
Por último, mas não menos imortante
FINANC.CODCLI AS FINCLI, CLIENTE.NOME AS CLINOME, FINANC.CODPORT AS FINPORT, PORTADOR.NOME AS PORTNOME
Imagine criar um temporário.
Não vai poder ter dois campos chamados NOME, por isso aqui renomeados pra CLINOME e PORTNOME
CODCLI iria existir no financeiro, no cliente, e também no resultado, se definir nos filtros CODCLI ficaria confuso saber qual dos 3 está se referindo por isso obriga a detalhar mais
No temporário iria usar REPLACE CLINOME WITH CLIENTE->NOME
é o que está indicando no SQL: CLIENTE.NOME AS CLINOME
É questão de acostumar, mas é o que sempre usamos, mas não escrevendo exatamente como costumamos fazer.
Um comando desses, ou mais avançado ainda que é legal de testar.
O que interessa é a velocidade de processamentos pesados, testar ler/gravar um registro não é teste que se faça pra isso.
De preferência arquivos com milhares de registros, que demoraria pra fazer em acesso de DBF normal.
Talvez totais de cada cliente por mes, etc
ISSO TAMBËM NÃO É TESTAR VELOCIDADE DE ADO.
Não confunda, o ADO é só um intermediário, que vai deixar as coisas no formato ADO.
O trabalho é feito pelo ODBC, ou nos casos onde existe um servidor, pelo servidor.
Se gostar da velocidade/resultado, aí vai atrás se quiser usar o RDDADS, ou SQLMIX ou outro.
Acho que a parte mais importante aqui é ver se realmente é mais rápido.
Se for usar os outros, vai perder tanto tempo pra configurar, que pode até desistir.
Já vendo resultado rápido, e testando velocidade, nem vai se importar se demorar pra configurar os outros.
Imagino que o resultado seja tào rápido quanto ADO, mas aí, vai ter que fazer seus próprios testes.
A vantagem (*) seria aproveitar fonte DBF, mas a desvantagem seria ficar pensando que é DBF.
Não parece, mas isso faz diferença pro cérebro.
Pode pensar que select * e filtro usando SKIP seja uma solução boa, quando é lixo, atraso de vida, deveria trazer o resultado pronto sem precisar processar.
Se não encontrar o ODBC do ADS tenho aqui.
DBF vai sumindo da internet, ainda mais quando é de graça.
Convém também chamar a atenção, muita gente confunde.
ADS é Advantage Database Server.
É um produto, onde existe o uso de Servidor, e custa muito caro.
Advantage Local Server é o uso SEM SERVIDOR, com ou sem rede.
Pra isso não precisa servidor, e não precisa pagar nada, é grátis.
Mesmo sendo grátis, vém com limite de 20 usuários.
Não sei dizer se o limite são 20 usuários fazendo uso, ou 20 usuários conectados, ou se o fabricante poderia informar como aumentar esse limite.
Lembro de já ver mensagens lá de quem usa com comandos SQL.
Depende de baixar coisas e acertar a compilação dessa contrib.
2) Outra opção é o SQLMIX e ODBC, tem pra Linux e Windows
Mesma coisa: precisa ver com quem usa isso
3) Usando ADO
Código: Selecionar todos
cnSQL := win_OleCreateObject( "ADODB.Connection" )
Precisa baixar o conector do fabricante, e instalar no Windows.
No cnSQL vai indicar a string de conexão, que tem que bater com o nome do que foi instalado, e os parâmetros de IP, Path, ou o que precisar conforme o conector.
Da última vez que testei, usei esta conexão
Código: Selecionar todos
FUNCTION ADSConnection( 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 := AD_USE_CLIENT
oConexao:CommandTimeOut := 20
RETURN oConexao
Teste leve não tem graça, faça teste pesado.
Do tipo que usa vários arquivos, vários relacionamentos, filtros, agrupamentos
Vão ser usados seus DBFs e seus índices CDX compatíveis, sendo que os índices serão desprezados se não forem compatíveis.
Índices não são obrigatórios, mas se puderem ser aproveitados vão tornar o resultado mais rápido.
Como exemplo, vamos supor um financeiro, que usa código de cliente e código de portador
Código: Selecionar todos
// campos a selecionar indicando origem
cSQL := "SELECT NUMDOC, EMISSAO, VENCTO, SUM(VALOR) AS SOMA, FINANC.CODCLI AS FINCLI, CLIENTE.NOME AS CLINOME, FINANC.CODPORT AS FINPORT, PORTADOR.NOME AS PORTNOME"
// arquivo principal de onde vém a informação
cSQL += " FROM FINANC"
// relacionamento entre tabelas pelo código
cSQL += " LEFT JOIN CLIENTE on CLIENTE.CODCLI = FINANC.CODCLI
cSQL += " LEFT JOIN PORTADOR on PORTADOR.CODPORT = FINANC.CODPORT
// algum filtro
cSQL += " WHERE VALOR < 10000"
// agrupamento (totais)
cSQL += " GROUP BY FINANC.CODCLI, FINANC.CODPORT"
// ordem desejada
cSQL += " ORDER BY CLINOME, PORTNOME"
oResultado := cnSQL:Execute( cSQL )
DO WHILE ! oResultado:Eof()
?? oResultado:Fields( "NUMDOC" ):Value
?? oResultado:Fields( "EMISSAO"):Value
?? oResultado:Fields( "VENCTO" ):Value
?? oResultado:Fields( "SOMA" ):Value
?? oResultado:Fields( "FINCLI" ):Value
?? oResultado:Fields( "CLINOME" ):Value
?? oResultado:Fields( "FINPORT" ):Value
?? oResultado:Fields( "PORTNOME" ):Value
?
cnSQL:MoveNext()
ENDDO
oResultado:Close()
Com as opções do harbour.... boa sorte... vai pesquisando/perguntando, daqui uma semana ou mais talvez tenha descoberto o que precisa, e em menos de um mês pode começar a testar.
Ok, aí acima é ADO puro, sem nenhuma rotina pra facilitar.
Se facilitar, pode comparar o uso acima com DBF:
FINAN.CODCLI é similar a FINAN->CODCLI
LEFT JOIN CLIENTE ON FINAN.CODCLI = CLIENTE.CODCLI
seria similar a
SET RELATION TO FINAN->CODCLI INTO CLIENTE
onde cliente seria indexado por CLIENTE->CODCLI
WHERE VALOR < 1000
é similar a
SET FILTER TO VALOR < 1000
GROUP BY FINAN.CODCLI, FINAN.CODPORT
similar ao pouco usado
TOTAL ON ...
ORDER BY CLINOME, PORTNOME
similar a
INDEX ON CLINOME + PORTNOME
Por último, mas não menos imortante
FINANC.CODCLI AS FINCLI, CLIENTE.NOME AS CLINOME, FINANC.CODPORT AS FINPORT, PORTADOR.NOME AS PORTNOME
Imagine criar um temporário.
Não vai poder ter dois campos chamados NOME, por isso aqui renomeados pra CLINOME e PORTNOME
CODCLI iria existir no financeiro, no cliente, e também no resultado, se definir nos filtros CODCLI ficaria confuso saber qual dos 3 está se referindo por isso obriga a detalhar mais
No temporário iria usar REPLACE CLINOME WITH CLIENTE->NOME
é o que está indicando no SQL: CLIENTE.NOME AS CLINOME
É questão de acostumar, mas é o que sempre usamos, mas não escrevendo exatamente como costumamos fazer.
Um comando desses, ou mais avançado ainda que é legal de testar.
O que interessa é a velocidade de processamentos pesados, testar ler/gravar um registro não é teste que se faça pra isso.
De preferência arquivos com milhares de registros, que demoraria pra fazer em acesso de DBF normal.
Talvez totais de cada cliente por mes, etc
ISSO TAMBËM NÃO É TESTAR VELOCIDADE DE ADO.
Não confunda, o ADO é só um intermediário, que vai deixar as coisas no formato ADO.
O trabalho é feito pelo ODBC, ou nos casos onde existe um servidor, pelo servidor.
Se gostar da velocidade/resultado, aí vai atrás se quiser usar o RDDADS, ou SQLMIX ou outro.
Acho que a parte mais importante aqui é ver se realmente é mais rápido.
Se for usar os outros, vai perder tanto tempo pra configurar, que pode até desistir.
Já vendo resultado rápido, e testando velocidade, nem vai se importar se demorar pra configurar os outros.
Imagino que o resultado seja tào rápido quanto ADO, mas aí, vai ter que fazer seus próprios testes.
A vantagem (*) seria aproveitar fonte DBF, mas a desvantagem seria ficar pensando que é DBF.
Não parece, mas isso faz diferença pro cérebro.
Pode pensar que select * e filtro usando SKIP seja uma solução boa, quando é lixo, atraso de vida, deveria trazer o resultado pronto sem precisar processar.
Se não encontrar o ODBC do ADS tenho aqui.
DBF vai sumindo da internet, ainda mais quando é de graça.
Convém também chamar a atenção, muita gente confunde.
ADS é Advantage Database Server.
É um produto, onde existe o uso de Servidor, e custa muito caro.
Advantage Local Server é o uso SEM SERVIDOR, com ou sem rede.
Pra isso não precisa servidor, e não precisa pagar nada, é grátis.
Mesmo sendo grátis, vém com limite de 20 usuários.
Não sei dizer se o limite são 20 usuários fazendo uso, ou 20 usuários conectados, ou se o fabricante poderia informar como aumentar esse limite.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
https://github.com/JoseQuintas/
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
https://github.com/JoseQuintas/
- Mario Mesquita
- Usuário Nível 4

- Mensagens: 613
- Registrado em: 08 Dez 2009 13:47
- Localização: Rio de Janeiro
SQL no DBF em breve (promessa) Aleksander Czajczynski
Bom dia a todos.
Obrigado, Quintas. Sempre ajudando a galera... Pois é, entra ano, sai ano e não saio dos ensaios em SQL. E nada pesado mesmo. Só coisa feijão com arroz.
Vamos ver se esse ano passo de fase e começo a modelar algo de verdade. É aquilo, o DBF tá atendendo mas seria desejável ter o SQL na manga e até migrar pra ele se atingir um grau de confiança, principalemente em suporte. Mas porquê não conseguiria, né? É treinar e treinar até ficar razoável na coisa.
Saudações,
Mario.
Obrigado, Quintas. Sempre ajudando a galera... Pois é, entra ano, sai ano e não saio dos ensaios em SQL. E nada pesado mesmo. Só coisa feijão com arroz.
Vamos ver se esse ano passo de fase e começo a modelar algo de verdade. É aquilo, o DBF tá atendendo mas seria desejável ter o SQL na manga e até migrar pra ele se atingir um grau de confiança, principalemente em suporte. Mas porquê não conseguiria, né? É treinar e treinar até ficar razoável na coisa.
Saudações,
Mario.
SQL no DBF em breve (promessa) Aleksander Czajczynski
Eu fazia tudo em DBF, como muitos.
Então surgiu um projeto que era para acessar uma base Microsoft SQL Server 2008, resolvi tentar, claro, tive que pesquisar, pensar, tentar, não foi tão difícil, bastou me aplicar direitinho e saiu, ficou muito bom mesmo.
Fiz uma playlist com 5 videos.
Pode assistir todos, se inscreva no canal e dá um like
Então o que aprendi disso: Você já domina o Harbour, o que falta é confiança no SQL, escolhe um SGBD (MySQL, SQL Server, PostgreSQL, Firebird, Access, MariaDB, SQL Lite, etc...) e avança para cima, vai ver que não é assim tão complicado.
Tem consulta, filtros, exportação de dados (para excel), relacionamento de tabelas (vários), verificação e criação de nova tabela, alterar dados, gravar, apagar, ou seja, praticamente tudo que normalmente é necessário para um sistema funcionar, pelo menos comparado com o DBF, além de outras funções do SQL que podem ser acionadas a qualquer momento, não há limites quanto a isso.
Resumindo por cima vou dar exemplos extraídos do código funcionando, testado, comprovado:
1) Use SQLMIX (usei com ODBC) no seu projeto (basta adicionar o seguinte no seu .HBP):
E no seu .PRG:
2) Conecta no BD:
3) Começa a usar, no caso um SELECT:
Basicamente vai usar o que já usa atualmente, tbrowse, get, @ say, impressão, validação, fórmulas, etc...
4) Como atualizar o banco de dados:
5) Inserir dados:
6) Deletando:
7) Teste de erros:
Acho que já dá para ter uma boa idéia, veja que não é um bicho tão grande, sugiro criar um programa de testes que faça tudo isso e até teste tabela SQL, crie tabela SQL, altere, etc... O Google é seu amigo e a IA é sua amiga... Você pode fazer qualquer coisa que precisar em SQL:
Note o cSQL, ali você coloca o que precisar, além de poder usar:
Inclusive estou disponível para qualquer projeto na área, conversões, suporte, transformações, adaptações, recuperação de dados, novos projetos, consultoria, basta entrar em contato no privado que podemos combinar.
Estou terminando agora mesmo um projeto de conversão de um sistema legado Clipper 16 bits com sistema de impressão antigo (baseado do ESC/P) para um sistema 64 bits compilado com Harbour + Mingw64 e um sistema de impressão que automaticamente entende o sistema antigo (ESC/P) e gera PDF para o cliente imitando exatamente o que ele já tinha originalmente sem precisar alterar o código fonte, nem de qualquer ferramenta externa de terceiros (como o DOS2USB, DOSPRN, etc...), isso sim foi um grande avanço sem causar qualquer impacto no uso do sistema, ou seja, o usuário final não precisa de novo treinamento, usa como já usava, a diferença é que vai aparecer um PDF e dali poderá imprimir em qualquer impressora (ou simplesmente usar o PDF para enviar para alguém ou mesmo arquivar). Isso tudo com as vantagens de um sistema que funciona nativamente no Windows como qualquer outro um aplicativo desktop.
Ficou muito bom!
Então surgiu um projeto que era para acessar uma base Microsoft SQL Server 2008, resolvi tentar, claro, tive que pesquisar, pensar, tentar, não foi tão difícil, bastou me aplicar direitinho e saiu, ficou muito bom mesmo.
Fiz uma playlist com 5 videos.
Pode assistir todos, se inscreva no canal e dá um like
Então o que aprendi disso: Você já domina o Harbour, o que falta é confiança no SQL, escolhe um SGBD (MySQL, SQL Server, PostgreSQL, Firebird, Access, MariaDB, SQL Lite, etc...) e avança para cima, vai ver que não é assim tão complicado.
Tem consulta, filtros, exportação de dados (para excel), relacionamento de tabelas (vários), verificação e criação de nova tabela, alterar dados, gravar, apagar, ou seja, praticamente tudo que normalmente é necessário para um sistema funcionar, pelo menos comparado com o DBF, além de outras funções do SQL que podem ser acionadas a qualquer momento, não há limites quanto a isso.
Resumindo por cima vou dar exemplos extraídos do código funcionando, testado, comprovado:
1) Use SQLMIX (usei com ODBC) no seu projeto (basta adicionar o seguinte no seu .HBP):
Código: Selecionar todos
sddodbc.hbcCódigo: Selecionar todos
REQUEST SDDODBC, SQLMIXCódigo: Selecionar todos
rddInfo( RDDI_CONNECT, { 'ODBC', 'Server=SERVER;Driver={SQL Server};dsn=;Uid=sa;database=database_PRD;pwd=*********' } )Código: Selecionar todos
cSQL := "SELECT * FROM CLIENTE"
dbUseArea( .T., 'SQLMIX', cSQL, 'CRM', nConnection )
dbGoBottom()
dbGoTop()
DO WHILE !Eof()
...
dbSkip()
ENDDO
dbCloseArea()
dbCloseAll()
4) Como atualizar o banco de dados:
Código: Selecionar todos
rddInfo( RDDI_EXECUTE, "UPDATE %s SET %s WHERE %s", pcTable, phSource, pchWhere )Código: Selecionar todos
rddInfo( RDDI_EXECUTE, "INSERT INTO %s VALUES ( %s ) ", pcTable, phSource )Código: Selecionar todos
rddInfo( RDDI_EXECUTE, "DELETE FROM CRMEx WHERE CODCLI = '" + cCod + "'", "SQLMIX" )Código: Selecionar todos
rddInfo( RDDI_ERRORNO )Código: Selecionar todos
dbUseArea( .T., 'SQLMIX', cSQL, 'CRMEx', nConnection )Código: Selecionar todos
rddInfo( RDDI_EXECUTE, ... )Estou terminando agora mesmo um projeto de conversão de um sistema legado Clipper 16 bits com sistema de impressão antigo (baseado do ESC/P) para um sistema 64 bits compilado com Harbour + Mingw64 e um sistema de impressão que automaticamente entende o sistema antigo (ESC/P) e gera PDF para o cliente imitando exatamente o que ele já tinha originalmente sem precisar alterar o código fonte, nem de qualquer ferramenta externa de terceiros (como o DOS2USB, DOSPRN, etc...), isso sim foi um grande avanço sem causar qualquer impacto no uso do sistema, ou seja, o usuário final não precisa de novo treinamento, usa como já usava, a diferença é que vai aparecer um PDF e dali poderá imprimir em qualquer impressora (ou simplesmente usar o PDF para enviar para alguém ou mesmo arquivar). Isso tudo com as vantagens de um sistema que funciona nativamente no Windows como qualquer outro um aplicativo desktop.
Ficou muito bom!
Mario
Especializado em projetos de TI, suporte técnico, consultoria, freelancer, gestão de tráfego web.
Especializado em projetos de TI, suporte técnico, consultoria, freelancer, gestão de tráfego web.
-
Paredes01
- Usuário Nível 2

- Mensagens: 52
- Registrado em: 20 Mai 2012 11:22
- Localização: Mérida, Yucatán, México
SQL no DBF em breve (promessa) Aleksander Czajczynski
Buenas tardes
Lo mismo que hace (developer) lo hago em modo consola con Harbour y SQLRDD
con servidores Windows y Linux
utilizo sql server y postgres
Anexo resultado de la consulta, reporte en excel
https://mega.nz/file/A2IwyLBZ#ynmHqtSG6 ... b2V6djoR0s
Código fuente:
Saludos!!
Lo mismo que hace (developer) lo hago em modo consola con Harbour y SQLRDD
con servidores Windows y Linux
utilizo sql server y postgres
Anexo resultado de la consulta, reporte en excel
https://mega.nz/file/A2IwyLBZ#ynmHqtSG6 ... b2V6djoR0s
Código fuente:
Código: Selecionar todos
#include "SQLRDD.ch"
Procedure REPFACTEXC()
Local nError, oSql, nPos , oExcel, oLibro, oHoja, X, xFILE, cSQL
BXX(11,10,16,35,,3,8,cCAJA1)
@ 11,14 SAY "Reporte de Ventas" COLOR COLOR4
Do While .T.
@ 13,12 Say "DESDE # "
@ 14,12 Say "HASTA # "
dFECINI = Date()
dFECFIN = Date()
@ 13, 22 Get dFECINI Picture "@D" Valid DToC(dFECINI) != " / / "
Read
If LastKey() = 27
Exit
Endif
@ 14, 22 Get dFECFIN Picture "@D" Valid dFECFIN >= dFECINI
Read
If LastKey() = 27
Loop
Endif
cSQL := "SELECT "
cSQL += "F.FOLIO AS FACTURA, "
cSQL += "F.FECHA, "
cSQL += "ISNULL(F.VTAEXE,0.00) AS EXENTAS, "
cSQL += "ISNULL(F.VTAGRA,0.00) AS GRAVADAS, "
cSQL += "ISNULL(F.IVA,0.00) AS IVAS, "
cSQL += "( ISNULL(F.VTAEXE,0.00) + ISNULL(F.VTAGRA,0.00) + ISNULL(F.IVA,0.00) ) AS TOTALES, "
cSQL += "F.STA, "
cSQL += "F.NCRED, "
cSQL += "C.CLIENT00, "
cSQL += "C.CLIENT01, "
cSQL += "I.RFC, "
cSQL += "I.UUID, "
cSQL += "I.FEC_TIMBRE, "
cSQL += "F.ID_USOCFDI, "
cSQL += "F.ID_FORMPGO, "
cSQL += "F.ID_METPGO, "
cSQL += "F.ID_PAIS, "
cSQL += "F.NUMREGID, "
cSQL += "K.FOLIO, "
cSQL += "K.FACTURA, "
cSQL += "K.STATUS "
cSQL += "FROM FACTURA F left join CLIENTES C ON F.ID_CLI = C.CLIENT00 "
cSQL += "LEFT JOIN CFD I ON F.FOLIO = I.FACTURA "
cSQL += "LEFT JOIN FACTURAS K ON F.FOLIO = K.FACTURA "
cSQL += "WHERE F.FECHA >= " + SR_cDBValue(dFecini) + " AND F.FECHA <= " + SR_cDBValue(dFecFin)
cSQL += " ORDER BY F.FOLIO"
aRet :={}
oSql := SR_GetConnection()
oSql:exec( cSQL,,.t.,@aRet)
If Len(aRet) > 0
GenRepExcel()
Else
PlsWait(.T.,"No existen facturas a esta fecha ...")
Inkey(2)
PlsWait(.F.)
Endif
Enddo
Return
Editado pela última vez por JoséQuintas em 16 Fev 2025 20:13, em um total de 1 vez.
Razão: Mensagem editada para colocar a tag [ code ]<br>Veja como utilizar esta tag: http://www.pctoledo.com.br/forum/faq.php?mode=bbcode#f2r1
Razão: Mensagem editada para colocar a tag [ code ]<br>Veja como utilizar esta tag: http://www.pctoledo.com.br/forum/faq.php?mode=bbcode#f2r1
- JoséQuintas
- Administrador

- Mensagens: 20267
- Registrado em: 26 Fev 2007 11:59
- Localização: São Paulo-SP
SQL no DBF em breve (promessa) Aleksander Czajczynski
Apenas comentário, depende do servidor aceitar.
COALESCE aceita vários parâmetros, e faço uso disso.
vai usar o primeiro valor que seja válido.
Código: Selecionar todos
COALESCE( F.VTAEXE, 0 )
Código: Selecionar todos
"WHERE F.FECHA BETWEEN " + SR_cDBValue( dFecIni ) + " AND " + SR_cDbValue( dFecFin )
Código: Selecionar todos
COALESCE( tabela1.valor, tabela2,valor, tabela3.valor, 0 )
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
https://github.com/JoseQuintas/
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
https://github.com/JoseQuintas/
SQL no DBF em breve (promessa) Aleksander Czajczynski
Boa adiçãoCOALESCE
vai usar o primeiro valor que seja válido.
Mario
Especializado em projetos de TI, suporte técnico, consultoria, freelancer, gestão de tráfego web.
Especializado em projetos de TI, suporte técnico, consultoria, freelancer, gestão de tráfego web.
-
alxsts
- Colaborador

- Mensagens: 3092
- Registrado em: 12 Ago 2008 15:50
- Localização: São Paulo-SP-Brasil
SQL no DBF em breve (promessa) Aleksander Czajczynski
Olá!
Entenda-se válido como NOT NULL.vai usar o primeiro valor que seja válido
[]´s
Alexandre Santos (AlxSts)
Alexandre Santos (AlxSts)
- JoséQuintas
- Administrador

- Mensagens: 20267
- Registrado em: 26 Fev 2007 11:59
- Localização: São Paulo-SP
SQL no DBF em breve (promessa) Aleksander Czajczynski
Exato.
Em DBF:
em SQL
Às vezes acho que o SQL é só uma evolução natural do DBASE
Em DBF:
Código: Selecionar todos
SET RELATION TO ;
produto->codpro INTO promocao, ;
produto->codpro INTO tabcli, ;
produto->codpro INTO tabgeral
LIST produto->codpro, iif( ! promocao->eof(), promocao->valor, iif( ! tabcli->Eof(), tabcli->Valor, iif( ! tabgeral->Eof(), tabgeral->valor, 0 ) ) )
Código: Selecionar todos
SELECT produto.codpro, COALESCE( promocao.valor, tabcli.valor, tabgeral.valor, 0 ) FROM PRODUTO
LEFT JOIN promocao on promocao.codpro = produto.codpro
LEFT JOIN tabcli on tabcli.codpro = produto.codpro
LEFT JOIN tabgeral on tabgeral.codpro - produto.codpro
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
https://github.com/JoseQuintas/
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
https://github.com/JoseQuintas/
