Página 1 de 2

Sobre harbour com SQL

Enviado: 23 Mar 2021 15:42
por marco.prodata
Mestres,
Sobre harbour com SQL, vou usar o postgresql, você usam as libs padrão do sql (hbpgsql, hbmysql pra mysql), ou usam o rddsql do harbour (q é bem difernte do xharbour)?

Sobre harbour com SQL

Enviado: 24 Mar 2021 01:41
por alxsts
Olá!

Postgresql é muito bom. Se o teu sistema roda apenas em Windows, sugiro que use ADO. É um produto Microsoft consolidado há anos e disponível na instalação do Harbour, bastando usar hbwin.hbc na linkedicão. Tem muita documentação e exemplos na internet e também aqui no fórum.

Boa sorte e conte com o pessoal do fórum!

Sobre harbour com SQL

Enviado: 24 Mar 2021 11:43
por Fernando queiroz
alxsts escreveu:Olá!

Postgresql é muito bom. Se o teu sistema roda apenas em Windows, sugiro que use ADO. É um produto Microsoft consolidado há anos e disponível na instalação do Harbour, bastando usar hbwin.hbc na linkedicão. Tem muita documentação e exemplos na internet e também aqui no fórum.

Boa sorte e conte com o pessoal do fórum!
hoje uso exatamente o indicado , mas gostaria de preparar meu APP para rodar em Linux ai qual seria a indicação para o lugar do ADO ??

e como tratar o RECORDSET retornado, pequeno exemplo

Sobre harbour com SQL

Enviado: 24 Mar 2021 12:18
por alxsts
Olá!

Meu conhecimento em Linux/Unix é zero... nunca mexi.
No tópico Sistema ERP rodando em LINUX, o Itamar Lins postou um link mostrando como usar ADO com Linux, via WINE. Não sei se alguém testou.
Quanto a exemplo de manipulação de recordset, tem vários exemplos aqui no fórum, postados por mim e pelo Quintas. Procure por Tbrowse ADO.

Sobre harbour com SQL

Enviado: 24 Mar 2021 17:13
por Itamar M. Lins Jr.
Olá!
Recomendo usar "primeiro" no windows via ADO. Pq o grande lance é fazer a migração, usar, quando tudo estiver pronto partir para o LINUX.
O Linux não tem ADO NATIVO. Só vai aproveitar as SQLs mais nada ou usar WINE.
Hoje não uso mais WINDOWS. Só mantenho o Windows por conta do POVO que usa Windows.
Meu desktop é Linux Kubuntu ficarei com ele até enjoar... Depois mudo para outra distro Linux, por enquanto tá legal.
O que reparei foi a velocidade da aplicação via Wine no Linux alias meu CPU só tem 4Gib e não 8, e ficou muito rápido.
Vejo que SQL no Linux é mais para PHP, e essas linguagens mais modernas. Quem sabe no futuro teremos algo mais simples igual temos o ADO no Windows.
https://adodb.org/dokuwiki/doku.php ou no Lazarus que é super simples também.

Saudações,
Itamar M. Lins Jr.

Sobre harbour com SQL

Enviado: 24 Mar 2021 19:47
por Fernando queiroz
Itamar M. Lins Jr. escreveu:Olá!
Recomendo usar "primeiro" no windows via ADO. Pq o grande lance é fazer a migração, usar, quando tudo estiver pronto partir para o LINUX.
O Linux não tem ADO NATIVO. Só vai aproveitar as SQLs mais nada ou usar WINE.
Hoje não uso mais WINDOWS. Só mantenho o Windows por conta do POVO que usa Windows.
Meu desktop é Linux Kubuntu ficarei com ele até enjoar... Depois mudo para outra distro Linux, por enquanto tá legal.
O que reparei foi a velocidade da aplicação via Wine no Linux alias meu CPU só tem 4Gib e não 8, e ficou muito rápido.
Vejo que SQL no Linux é mais para PHP, e essas linguagens mais modernas. Quem sabe no futuro teremos algo mais simples igual temos o ADO no Windows.
https://adodb.org/dokuwiki/doku.php ou no Lazarus que é super simples também.

Saudações,
Itamar M. Lins Jr.
Itamar atualmente uso com ADO no windows mas gostaria de fazer uma versão para rodar no LINUX , qual a opcao para substituir a manipulação do DATASET de ADO para ????? no LINUX

e algum exemplo da connecao e manipulacao em linux

me falaram de SQLMIX mas nao sei nada sobre como usar o DATASET

HOJE USO ASSIM

Código: Selecionar todos

METHOD MySqlConnection( cServer, cUser, cPassword, nPort ) CLASS CONECCOESCLASS
LOCAL cnConnection

    cnConnection:= win_OleCreateObject( "ADODB.Connection" )
    cnConnection:ConnectionString := iif( win_OsIs10(), "Provider=MSDASQL;", "" )
    cnConnection:ConnectionString += "Driver={MariaDB ODBC 3.1 Driver};"
    cnConnection:ConnectionString += ;
        "Server=" + cServer + ";" + ;
        "Port=" +  nPort  + ";" + ;
        "Stmt=;" + ;
        "User=" + cUser + ";" + ;
        "Password=" + cPassword + ";" + ;
        "Collation=utf8_general_ci;" + ;
        "AUTO_RECONNECT=1;" + ;
        "COMPRESSED_PROTO=1;" + ;
        "PAD_SPACE=1"
    cnConnection:CursorLocation    := 3
    cnConnection:CommandTimeOut    := 600 // seconds
    cnConnection:ConnectionTimeOut := 600 // seconds

RETURN cnConnection
e trato o DATASET assim:

Código: Selecionar todos

	cQuery := "SELECT PRODUTOS_ID, ";
				   + "produtos.DESPRO, ";
				   + "IF(produtos.ESTATU < produtos.ESTMIN,'BAIXO','') AS SITUACAO,  ";
				   + "produtos.ESTATU, ";
				   + "produtos.ESTL02, ";
				   + "produtos.CODREF, ";
				   + "produtos.PRECUS, ";
				   + "produtos.PREVEN, ";
				   + "produtos.TIPUNI, ";
				   + "produtos.EAN13, ";
				   + "produtos.NCM, ";
				   + "produtos.CEST, ";
				   + "IF(produtos.PROSER ='1','PRODUTO','SERVICO') AS PROSER, ";
				   + "produtos.QUEM_BLOQ, ";
				   + "(produtos.ESTATU + produtos.ESTL02) AS SOMA ";
				   + "FROM produtos ";
				   + cAlvo_Consulta
	oQuery := CONECCOESCLASS():ExecuteSQL(::oServer, cQuery)

	if  ! oQuery:Eof()
		
	DO WHILE ! oQuery:Eof()
				aAdd( aResult, {oQuery:Fields( "PRODUTOS_ID" ):Value,;
								oQuery:Fields( "DESPRO" ):Value,;
								oQuery:Fields( "TIPUNI" ):Value,;
								oQuery:Fields( "ESTATU" ):Value,;
								oQuery:Fields( "ESTL02" ):Value,;
								oQuery:Fields( "CODREF" ):Value,;
								oQuery:Fields( "PRECUS" ):Value,;
								oQuery:Fields( "PREVEN" ):Value,;
								oQuery:Fields( "EAN13" ):Value,;
								oQuery:Fields( "NCM" ):Value,;
								oQuery:Fields( "CEST" ):Value,;
								oQuery:Fields( "PROSER" ):Value,;
								oQuery:Fields( "QUEM_BLOQ" ):Value,;
								oQuery:Fields( "SOMA" ):Value} ) 

				oQuery:MoveNext()
	ENDDO
		endif

Sobre harbour com SQL

Enviado: 24 Mar 2021 19:50
por Fernando queiroz
no caso estava usando o retorno da query e carregando um ARRAY para usar no BROWSE
na realidade substituiria o oQuery:Fields( "DESPRO" ):Value por ????? no LINUX

Sobre harbour com SQL

Enviado: 24 Mar 2021 19:53
por Fernando queiroz
outra coisa que ficou na duvida foi como usar o SEFAZCLASS pois ela usa o CAPICOM.DLL e qual seria a solucao para o caso

Sobre harbour com SQL

Enviado: 24 Mar 2021 21:47
por Itamar M. Lins Jr.
Olá!
A unica forma que usei foi o SQLMIX, APENAS para extrair dados, puxar de vários tipos Mysql/MSSQL/Firebird...
No linux é via ODBC, vc deve estudar como fazer isso quando instalar e testar o seu SGBD no Linux.
Já fiz alguns testes usando o Harbour e deu certo mas faz muito tempo.
Melhor será se alguém que realmente usar Harbour com SGBD no linux para ensinar essa parte.
Meus testes atuais foram com LetoDBf, a questão é tempo para fazer manual passo a passo, melhor seria o interessado fazer isso.
Não é nada complicado, mas precisa ler MANUAIS e CÓDIGOS FONTE de EXEMPLOS que tem vários nas pastas contrib do Harbour.

SEFAZCLASS parece que roda no Linux, teria que estudar isso com o José Quintas.

Saudações,
Itamar M. Lins Jr.

Sobre harbour com SQL

Enviado: 24 Mar 2021 22:48
por Fernando queiroz
Itamar M. Lins Jr. escreveu:Olá!
A unica forma que usei foi o SQLMIX, APENAS para extrair dados, puxar de vários tipos Mysql/MSSQL/Firebird...

Saudações,
Itamar M. Lins Jr.
era exatamente isto que gostaria de saber como você fez , já me daria um norte por onde começar
como tratar os resultado das suas query , usando SQLMIX

Sobre harbour com SQL

Enviado: 24 Mar 2021 23:43
por Fernando queiroz
Dando umas pesquisadas pelo forum encontrei isso:

No SQLODBC

Código: Selecionar todos

SQLDriverConnect( hDbc, cConnStr, @cConstrout )
SQLExecDirect( hStmt, "SELECT * FROM test" )

oQuery:FieldByName( "PRODUTOS_ID" ):Value
No ADO

Código: Selecionar todos

    cnConnection:= win_OleCreateObject( "ADODB.Connection" )
    cnConnection:ConnectionString := iif( win_OsIs10(), "Provider=MSDASQL;", "" )
    cnConnection:ConnectionString += "Driver={MariaDB ODBC 3.1 Driver};"
    cnConnection:ConnectionString += ;
        "Server=" + cServer + ";" + ;
        "Port=" +  nPort  + ";" + ;
        "Stmt=;" + ;
        "User=" + cUser + ";" + ;
        "Password=" + cPassword + ";" + ;
        "Collation=utf8_general_ci;" + ;
        "AUTO_RECONNECT=1;" + ;
        "COMPRESSED_PROTO=1;" + ;
        "PAD_SPACE=1"
    cnConnection:CursorLocation    := 3
    cnConnection:CommandTimeOut    := 600 // seconds
    cnConnection:ConnectionTimeOut := 600 // seconds

cnConnection:EXECUTE( "SELECT * FROM test" )

oQuery:Fields( "PRODUTOS_ID" ):Value

Sobre harbour com SQL

Enviado: 25 Mar 2021 00:05
por Fernando queiroz
resumindo minha situação ,
nao uso DBF, LETO, SQLRDD ou qualquer coisa relacionada para fazer com que se pareça com DBF
uso SQL puro em banco de dados MARIADB
agora o retorno da QUERY é que manipulo com o ADO para pegar os dados
que gostaria de passar para algo que funcione mais genérico tanto em LINUX como no WINDOWS

pode ser via ODBC ou qualquer coisa que não me limite o uso em LINUX ou WINDOWS

O que hoje tenho em ADO
cnConnection:EXECUTE( "select PRODUTOS_ID from produtos where ... )
oQuery:Fields( "PRODUTOS_ID" ):Value
oQuery:MoveNext()
MoveFirst, MoveLast, MoveNext, and MovePrevious


Passaria para ODBC assim
cnConnection:SetSQL( "select PRODUTOS_ID from produtos where ... )
cnConnection:Open()
oQuery:FieldByName( "PRODUTOS_ID" ):Value
oQuery:Skip()
oQuery:GoTo( 1 )
oQuery:Prior()
oQuery:First()
oQuery:Last()




OBS: Hoje uso o ODBC para o MARIADB

Sobre harbour com SQL

Enviado: 25 Mar 2021 10:01
por Itamar M. Lins Jr.
Olá!
Faltou vc achar exemplos de SQLMIX, aqui no forum tem e na pasta contrib tem exemplos.
Ou usar a LIB para MySQL do Harbour que funciona no linux também
Neste caso é tudo array tem exemplo disso na pasta contrib tambem.

Saudações,
Itamar M. Lins Jr.

Sobre harbour com SQL

Enviado: 25 Mar 2021 18:08
por Fernando queiroz
Itamar M. Lins Jr. escreveu:Olá!
Faltou vc achar exemplos de SQLMIX, aqui no forum tem e na pasta contrib tem exemplos.
Ou usar a LIB para MySQL do Harbour que funciona no linux também
Neste caso é tudo array tem exemplo disso na pasta contrib tambem.

Saudações,
Itamar M. Lins Jr.
olha procurei no CONTRIB mas não achei ou não sei o nome
encontrei
HBFBIRD
HBMYSQL
HBODBC
HBPGSQL
HBSQLIT3

mas o tal de SQLMIX não encontrei

Sobre harbour com SQL

Enviado: 25 Mar 2021 18:15
por Fernando queiroz
verificando aqui o que tenho e a melhor opção para mudar seria a ODBC pela semelhança de comando, quase não mudaria nada no que tenho atualmente.

e como é padrao para todos os DB , ficaria funcional para todos