Harbour e MySQL

Projeto [x]Harbour - Compilador de código aberto compatível com o Clipper.

Moderador: Moderadores

filipedoblinski
Usuário Nível 1
Usuário Nível 1
Mensagens: 11
Registrado em: 21 Ago 2014 17:07
Localização: São Paulo / SP

Harbour e MySQL

Mensagem por filipedoblinski »

Boa Tarde, migrei a pouco tempo de Clipper para Harbour, estou tendo resultados muito bons!! realmente está melhorando muito minha vida!!! Nesta semana andei lendo muitos tópicos sobre conexão de banco MySQL, só que estou em duvida sobre qual forma devo fazer a manipulação do banco, achei bem interessante a forma que a SQLMIX trabalha (muito parecido com a manipulação de DBF, mas não achei muita coisa sobre a sua utilização.

Daí as perguntas:

1 - SQLMIX é a melhor opção?
2 - Onde achar exemplos mais práticos?
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Harbour e MySQL

Mensagem por JoséQuintas »

Pergunta difícil, cada um vai dizer que o que está usando é melhor.
Até achei interessante o que existe no Harbour, mas achei complicado demais.

Eu uso ADO simplesmente porque já vinha usando no VB6.
Faço por comandos SQL, e o resultado é um recordset pronto, algo como uma base de dados pronta, talvez access ou algo parecido.
Isso tem disponível desde o Harbour 0.99, mas parece que é pouco usado.
Fica mais ou menos assim:

Código: Selecionar todos

cnMySql := win_OleCreateObject( "ADODB.Connection" )
cnMySql:ConnectionString := "dados da conexão"
cSql := "SELECT * FROM base WHERE NAME LIKE 'JOSE'%'" 
Rs := cnMySql:Execute( cSql )
DO WHILE .NOT. Rs:Eof()
    ? rs:Fields( "CODIGO" ):Value
    ? rs:Fields( "NOME" ):Value
    rs:MoveNext()
ENDDO
Rs:Close()
cnMySql:Close()
Nota: ADO está disponível no próprio Windows, usando ou não. Mas por padrão, só fica disponível Access, SQL Server, Excel, ou coisas Microsoft. Para MySql é necessário instalar o "driver" de MySql, como por exemplo o ODBC.

Não sei se é melhor ou pior que outro, apenas sei usar e tem funcionado.
Como ajuda disponível: qualquer usuário, de qualquer linguagem, que use ADO.

Nota2: Só pra lembrar, tem a ADORDD (ou será RDDADO), pra trabalhar igual DBF. Só precisa lembrar que o SET FILTER por exemplo, apesar de parecer DBF vai ser com comando SQL.
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/
Avatar do usuário
Itamar M. Lins Jr.
Administrador
Administrador
Mensagens: 7928
Registrado em: 30 Mai 2007 11:31
Localização: Ilheus Bahia
Curtiu: 1 vez

Harbour e MySQL

Mensagem por Itamar M. Lins Jr. »

...mas achei complicado demais.

Código: Selecionar todos

cRdd  := RDDSETDEFAULT( "SQLMIX" )
Usando MDB:
nConn := RDDINFO( RDDI_CONNECT, { "ODBC", "DBQ=C:\temp\XYZ.MDB;Driver={Microsoft Access Driver (*.mdb)}" } )
Usando XLS:
cStrCon :="Driver={Microsoft Excel Driver (*.xls)};DriverId=790;Dbq=C:\fontes\xxxx\LR_2003.xls;DefaultDir=c:\FONTES\ZZZ\;"
nConn := RDDINFO( RDDI_CONNECT,{"ODBC",cStrCon} )
Ou
nConn := RDDINFO( RDDI_CONNECT, { "ODBC", "DBQ=c:\fontes\sci_win\lr_2003.xls;ReadOnly=0;Driver={Microsoft Excel Driver (*.xls)}" } )
///
Usando MSSQL:
nConn := RDDINFO( 1001, { "ODBC", "Driver={SQL Server Native Client 10.0};Server=localhost;database=LRXX;Uid=minha_uid;Pwd=minha_pwd" })

Usando Firebird:
cAttributes:="Server=;Database=127.0.0.1:c:\temp\xxx.gdb;User=SYSDBA;Password=masterkey;Driver={Firebird/InterBase(r) driver};"
nConn := RDDINFO( RDDI_CONNECT,{"ODBC",cAttributes} )

IF nConn == 0
   hwg_Msginfo( "Não conectado ao servidor: " + str(RDDINFO( RDDI_ERRORNO )) + HB_EOL() + RDDINFO( RDDI_ERROR ) )
   RDDSETDEFAULT( cRdd )
   RETURN
ENDIF

Com MSSQL:
DBUSEAREA( .T.,"SQLMIX", "select * from dbo.VW_CCCCCCC", "xx" )

Dai em diante sintaxe xBase
Do while
append
replace
dbseek
locate
etc...
Não vejo muita diferença da sintaxe ADO
Conectar, fazer uma QUERY (array cheia de dados), mostrar, alterar...

Saudações,
Itamar M. Lins Jr.
Saudações,
Itamar M. Lins Jr.
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Harbour e MySQL

Mensagem por JoséQuintas »

E que tal a RDDADO?

Código: Selecionar todos

#require "rddado"
#include "adordd.ch"
REQUEST ADORDD

PROCEDURE Main()

   USE test00 VIA "ADORDD" TABLE "ACCOUNTS" MYSQL ;
      FROM "www.freesql.org" USER "myuser" PASSWORD "mypass"
   Browse()
   CLOSE
   RETURN
Lembrando que, uma vez que está em extras, pode não estar preparada pra codepage.
Uma coisa que me afastou das outras LIBs é que a Microsoft tem seus padrões até pra ficar desligando conexão, e no ADO uso uma conexão pra cada coisa.
Aliás... ao usar ADO são ativadas 5 threads a mais pro aplicativo, não sei porque.
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/
filipedoblinski
Usuário Nível 1
Usuário Nível 1
Mensagens: 11
Registrado em: 21 Ago 2014 17:07
Localização: São Paulo / SP

Harbour e MySQL

Mensagem por filipedoblinski »

primeiramente obrigado pelas respostas! sempre utilizei o forum pra fazer minhas pesquisas, o conteúdo é ótimo!! ajuda d+

minha preocupação de como fazer a conexão é que vi em algumas postagens que existem algumas ferramentas que foram descontinuadas ou não são aprimoradas.

Tanto ADO quanto a RDDADO achei interessante também! hoje trabalho com sistemas em harbour e outros em c#, queria alterar o menos possível de código dos meus sistemas harbour, e não me clareou ainda muito bem como devo tratar o update e o delete, e utilizo dbedit, quando faço um select ele trabalha como um temporario como no c# ou ele atualiza no movimento do dbedit como no DBF?
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Harbour e MySQL

Mensagem por JoséQuintas »

No caso da ADORDD é automático, sem mudar outras coisas no fonte.
Mas como mencionei, um SET FILTER teria que ser alterado pra MySql.

Código: Selecionar todos

SET FILTER TO NOME LIKE 'JOSE%'
Não sei quanto a campos nulos, coisa presente no MySql, mas acho que criando a estrutura direto no Harbour já deve criar a base de dados indicando valores default.
E pra datas, tem o detalhe das versões MySql novas não aceitarem data 00-00-00, caso fiquem no default.
Usei muito pouco a ADORDD, então não cheguei a verificar isso.
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/
filipedoblinski
Usuário Nível 1
Usuário Nível 1
Mensagens: 11
Registrado em: 21 Ago 2014 17:07
Localização: São Paulo / SP

Harbour e MySQL

Mensagem por filipedoblinski »

JoséQuintas muito obrigado pelas explicações! mais uma duvida, se eu for usar simplesmente ADO, teria que mudar muito o codigo?
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Harbour e MySQL

Mensagem por JoséQuintas »

A princípio, só olhar o que postei aqui, usando RDDADO, e o set filter.
No mais, vai ter que comprovar na prática.

Qualquer dia faço um teste, nem que seja pra um único arquivo do sistema.
É que meus testes são práticos... rodando em mais de um cliente por pelo menos uma semana...
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/
filipedoblinski
Usuário Nível 1
Usuário Nível 1
Mensagens: 11
Registrado em: 21 Ago 2014 17:07
Localização: São Paulo / SP

Harbour e MySQL

Mensagem por filipedoblinski »

entendi, comecei a alterar usando a RDDADO mas estou num dilema: INDICES, devo criar uma unica vez na base e trabalhar pelo SET ORDER TO? ou muda?
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Harbour e MySQL

Mensagem por JoséQuintas »

Uso ADO direto, e não RDDADO.
Como comentei, vai ter que fazer os testes.
Eu começaria com testes simples, talvez até RddSetDefault( "ADORDD" ) pra ver o que acontece.
Vai que funciona, não precisaria alterar cada fonte.

Eu uso até hoje um .ch padrão, #include "jpa.ch" em todos os fontes.
Pode ser útil pra acrescentar alguma coisa, e já modificar todos os fontes de uma vez.
De repente, um #command já pode resolver todos os seus USE de uma vez.
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/
alxsts
Colaborador
Colaborador
Mensagens: 3092
Registrado em: 12 Ago 2008 15:50
Localização: São Paulo-SP-Brasil

Harbour e MySQL

Mensagem por alxsts »

Olá!
filipedoblinski escreveu:e não me clareou ainda muito bem como devo tratar o update e o delete, e utilizo dbedit, quando faço um select ele trabalha como um temporario como no c# ou ele atualiza no movimento do dbedit como no DBF?
Eu usaria ADO por ser uma tecnologia já bem testada, com farto material de consulta. Se você trabalha com C#, deve conhecer ADO .Net. Pois é, ADO .Net é a evolução do ADO.

Procure executar as tarefas de banco (select, update e delete) em stored procedures, fazendo as chamadas de sua aplicação. Quanto ao uso da DBEdit(), troque pela classe TBrowseDB(). Você pode fazer browse no próprio recordset retornado por uma consulta e usar os métodos Edit() e Update() do ADO para atualizar os dados.
[]´s
Alexandre Santos (AlxSts)
Mário Isa
Usuário Nível 4
Usuário Nível 4
Mensagens: 907
Registrado em: 07 Jul 2004 13:54
Localização: Ilha Solteira-sp

Harbour e MySQL

Mensagem por Mário Isa »

Alô a todos !
:xau
Estou começando agora com o mysql e o ADO me pareceu ser bem mais fácil.

a) Preciso instalar o mysql na minha máquina mesmo sabendo que vou conectar num banco da web ?
b) Não tem nenhuma .LIB prá incluir ? é só o adordd.ch e o REQUEST ADORDD ?

Mário
filipedoblinski
Usuário Nível 1
Usuário Nível 1
Mensagens: 11
Registrado em: 21 Ago 2014 17:07
Localização: São Paulo / SP

Harbour e MySQL

Mensagem por filipedoblinski »

Olá
alxsts escreveu:Se você trabalha com C#, deve conhecer ADO .Net. Pois é, ADO .Net é a evolução do ADO.
Faz muito tempo que usei ADO, utilizo normalmente a MySQL.dll é feita propriamente para MYSQL no c#
alxsts escreveu:Procure executar as tarefas de banco (select, update e delete) em stored procedures, fazendo as chamadas de sua aplicação. Quanto ao uso da DBEdit(), troque pela classe TBrowseDB(). Você pode fazer browse no próprio recordset retornado por uma consulta e usar os métodos Edit() e Update() do ADO para atualizar os dados.
por acaso teria algum exemplo só pra ver como está fazendo as chamadas, e no caso do TBrowseDB como seria?
Mário Isa escreveu:a) Preciso instalar o mysql na minha máquina mesmo sabendo que vou conectar num banco da web ?Mário
Não somente o Driver ODBC http://dev.mysql.com/downloads/connector/odbc/3.51.html
Mário Isa escreveu:b) Não tem nenhuma .LIB prá incluir ? é só o adordd.ch e o REQUEST ADORDD ?
somente

Código: Selecionar todos

#include "adordd.ch"
#require "rddado"

REQUEST ADORDD
Mário Isa
Usuário Nível 4
Usuário Nível 4
Mensagens: 907
Registrado em: 07 Jul 2004 13:54
Localização: Ilha Solteira-sp

Harbour e MySQL

Mensagem por Mário Isa »

agora abriu certinho.

o fato de eu ter feito

"#include "adordd.ch""

significa que alterará todos os meus comandos "use" ?

Não poderei abrir ao mesmo tempo o mysql e os .dbf's ?

Penso em fazer o "#include "adordd.ch" em 1 dependência separada o que acha ?

Mário
filipedoblinski
Usuário Nível 1
Usuário Nível 1
Mensagens: 11
Registrado em: 21 Ago 2014 17:07
Localização: São Paulo / SP

Harbour e MySQL

Mensagem por filipedoblinski »

Mário Isa escreveu:significa que alterará todos os meus comandos "use" ?
não porque você não colocou RDDSETDEFAULT( "ADORDD" )
Mário Isa escreveu:Não poderei abrir ao mesmo tempo o mysql e os .dbf's ?
pode sim, no caso não coloco o ADORDD como DEFAULT ai uso assim a abertura da tabela:

USE <banco> VIA "ADORDD" TABLE "tabela" MYSQL FROM "endereço" USER "usuario" PASSWORD "senha" ALIAS "nomeAlias" QUERY "Select * from tabela"
Mário Isa escreveu:Penso em fazer o "#include "adordd.ch" em 1 dependência separada o que acha ?
essa não entendi kkk
Responder