Página 1 de 2
Harbour e MySQL
Enviado: 21 Ago 2014 17:15
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?
Harbour e MySQL
Enviado: 21 Ago 2014 18:25
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.
Harbour e MySQL
Enviado: 21 Ago 2014 19:15
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.
Harbour e MySQL
Enviado: 21 Ago 2014 19:52
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.
Harbour e MySQL
Enviado: 21 Ago 2014 20:29
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?
Harbour e MySQL
Enviado: 21 Ago 2014 20:54
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.
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.
Harbour e MySQL
Enviado: 22 Ago 2014 11:19
por filipedoblinski
JoséQuintas muito obrigado pelas explicações! mais uma duvida, se eu for usar simplesmente ADO, teria que mudar muito o codigo?
Harbour e MySQL
Enviado: 22 Ago 2014 12:56
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...
Harbour e MySQL
Enviado: 22 Ago 2014 13:16
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?
Harbour e MySQL
Enviado: 22 Ago 2014 13:54
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.
Harbour e MySQL
Enviado: 22 Ago 2014 17:30
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.
Harbour e MySQL
Enviado: 24 Ago 2014 11:59
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
Harbour e MySQL
Enviado: 25 Ago 2014 10:20
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
Harbour e MySQL
Enviado: 25 Ago 2014 12:49
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
Harbour e MySQL
Enviado: 25 Ago 2014 13:10
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