FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin para Harbour/xHarbour CONEXION A MYSQL
Posts: 196
Joined: Tue Jul 01, 2008 06:34 PM
CONEXION A MYSQL
Posted: Tue Oct 01, 2013 03:13 PM

Hola

Estoy en el intento de usar MySql, y he bajado algnos ejemplos de conexion, el que no me d谩 error S_OK: OPEN, es este:

FUNCTION ConnServer()
Local cServer := "localhost"
Local cUser := "root"
Local cPass := "123456"

   oCone:=tOleAuto():new("ADODB.connection")
   oCone:Open( "DRIVER={MySQL ODBC 3.51 Driver};" + ;
               "server=" + cServer + ;
               ";database=" +"DBPRUEBA" + ;
               ";uid=" + cUser + ;
               ";pwd=" + cPass )

   If Empty(oCone)
      MsgAlert(" No se Pudo Establecer la Conexion Con La Base De Datos..","Atencion")
      Return(Nil)
   EndIf

Return( Nil )

Entiendo que debo de instalar el "MySQL ODBC 3.51 Driver" que he bajado de su pagina, uso W7, lo instal茅 en Herramientas Administrativas, Origenes de Datos ODBC, DSN del Sistema y en Data Source Name puse BDPRUEBA, hice el test y se conecto!!!!!

Pero al momento de hace la conexion desde mi App no hace nada, con la funcion ConnServer, de arriba debe conectar, pero no pasa nada.

Como ficheros de cabecera he puesto:

include "FiveWin.Ch"

Include "Ado.ch"

Necesito algo mas ???

o al Enlazar, al generar el EXE necesito alguna libreria adicional ? uso el FW8.02

Alguna Idea ??

Gracias

Luis Ponce
Posts: 1818
Joined: Wed Oct 26, 2005 02:49 PM
Re: CONEXION A MYSQL
Posted: Tue Oct 01, 2013 06:50 PM
Luis buen d铆a

Con este c贸digo yo hago la conexi贸n sin problemas...

Code (fw): Select all Collapse
TRY
  oCon:=toleauto():new("adodb.connection")
CATCH oError
  MsgStop( "No se ha podido crear la conexi贸n !", "Error de datos")
END

oCon:ConnectionString:="Driver={MySQL ODBC 3.51 Driver};Server="+oLamcla:cHost+";Port="+oLamcla:nPuerto+";User="+oLamcla:cUsuario+";Password="+oLamcla:cPassword+";Option=3;"
TRY
  oCon:Open()
CATCH oError
  MsgStop( "No pude abrir la conexi贸n para crear las tablas !", "Error de datos")
  QUIT
END

cCommandSql := "USE "+oLamcla:nDBdat
TRY
  oCon:Execute(cCommandSql)
  //MSGINFO("antes de verificar empresa")
  pVerEmpr() //ejecuta el proceso de verificacion de empresas
CATCH oError
  IF MSGNOYES(oLamcla:mEdb1+CRLF+oLamcla:mEdb2+CRLF+oLamcla:mEdb3,oLamcla:mErco)
    cCommandSql := "CREATE DATABASE IF NOT EXISTS "+oLamcla:nDBdat
    TRY
      oCon:Execute(cCommandSql)
      pVerEmpr() //ejecuta el proceso de verificacion de empresas
    CATCH oError
       MSGINFO(oLamcla:mEdb4,oLamcla:mErco)
    END
  ELSE
    QUIT
  ENDIF
END


por otro lado que versi贸n de mysql tienes instalada?, tambi茅n puede ser que el driver sea un poco "viejo", para la veris贸n de mysql que estas usando.
Yo tengo ese controlador instalado y me funciona correctamente con la versi贸n mysql-essential-5.1.48-win32.
Saludos
LEANDRO AREVALO
Bogot谩 (Colombia)
https://hymlyma.com
https://hymplus.com/
leandroalfonso111@gmail.com
leandroalfonso111@hotmail.com

[ Turbo Incremental Link64 6.98 Embarcadero 7.70 ] [ FiveWin 25.01 ] [ xHarbour 64 bits) ]
Posts: 196
Joined: Tue Jul 01, 2008 06:34 PM
Re: CONEXION A MYSQL
Posted: Wed Oct 02, 2013 07:00 PM

Leandror, probare tu codigo

Entiendo que podemos usar el ADO o TDolphin, cual es mas funcional ????

Gracias

Luis Ponce
Posts: 2365
Joined: Wed Nov 02, 2005 11:46 PM
Re: CONEXION A MYSQL
Posted: Wed Oct 02, 2013 07:44 PM
Hola

LuisPonce wrote:Leandror, probare tu codigo

Entiendo que podemos usar el ADO o TDolphin, cual es mas funcional ????

Gracias


Los dos son ampliamente funcionales,
la ventaja principal con ADO es que puedes usar multiples motores de bases de datos (ACCESS, MYSQL, SQLSERVER)
la desventaja de ADO es que tienes que instalar en los PC de los clientes los conectores porpios de cada motor y construir el DSN para la conexion, esta desventaja de ADO es la ventaja de MySql (TDolphin) que solo disrtribuyes el EXE con las DLL de mysql, la desventaja de TDolphin es que solo maneja MySql o MariaDB (no recuerdo si existe otro)

ahora depende de los alcances que tengas, si en futuros planeas usar distintos motores, tu opcion es usar ADO si no, tu mejor opcion es usar TDolphin o la TMySlq (distribuida por [x]harbour)
Posts: 411
Joined: Sun Jan 31, 2010 03:30 PM
Re: CONEXION A MYSQL
Posted: Wed Oct 02, 2013 08:24 PM

Recomendaci贸n :

  1. Determinar cual es el mejor motor SQL para su requerimiento inmediato.
  2. Proyectar la complejidad de su aplicaci贸n
  3. Realizar pruebas con datos reales y en los servidores finales (hosting, vsp, servidor dedicado, o en mi pc)

Tengo la experiencia con mysql + eagle1 y sqlrdd con postgres y mysql, en su momento fueron la soluci贸n perfecta, pero cuando se hizo mas compleja la App y querer usar un motor como postgres, etc (mejor rendimiento que mysql), tener compatibilidad de librer铆as ( xharbour + fivewin ) y las mismas herramientas de conexi贸n ( Eagle1, tmysql, condor, etc...).
Actualmente estoy en la necesidad de cambiarme a otro producto y no depender de un tercero o de un solo motor sql. Por esto recomiendo ADO, que aunque se tenga instalar el ODBC en cada maquina, no es algo que quite mas de cinco minutos.

Saludos

Posts: 196
Joined: Tue Jul 01, 2008 06:34 PM
Re: CONEXION A MYSQL
Posted: Wed Oct 02, 2013 11:32 PM

Daniel, Leandro

Gracias por sus respuestas, una consulta el ADO del cual hablamos es mismo que, esta en el foro ?

Me refiero a este:

Nuevo AdoRDD (libre)
by Antonio Linares 禄 Thu Apr 26, 2007 8:40 am

Daniel, como uso, como hago la conexion y de donde bajo la TDolphin ???

Gracias

Luis Ponce
Posts: 196
Joined: Tue Jul 01, 2008 06:34 PM
Re: CONEXION A MYSQL
Posted: Thu Oct 03, 2013 01:14 AM

Me conecte!!

Con esta funcion que baje del foro:

include "FiveWin.Ch"

Include "Ado.ch"

FUNCTION ConnServer()
LOCAL oCone
Local cServer := "localhost" //Ubicaci贸n del servidor
Local cUser := "root" // usuario
Local cPass := "123456" // password del usuario
Local cDatabase := "c:\appserv\MySql\Data\Colegio" // base de datos MySql
Local cDatabase := "colegio" // base de datos MySql
Local cDatabase := cPath+"\database" // base de datos MySql

   oCone :=tOleAuto():new("ADODB.connection")
   oCone:Open( "DRIVER={MySQL ODBC 3.51 Driver};" + ;
               "server=" + cServer + ;
               ";database=" + cDatabase + ;
               ";uid=" + cUser + ;
               ";pwd=" + cPass )

   If Empty(oCone)
      MsgAlert(" No se Pudo Establecer la Conexion Con La Base De Datos..","Atencion")
      Return(Nil)
   else
      MsgAlert(" Se establecio la Conexion Con La Base De Datos..","Atencion")
   EndIf

Return( Nil )

En teoria estoy conectado, ahora como hago para abrir las tablas y consultar los registros ???

Solo use esos dos ficheros de cabecera, estoy usando el ADO nativo del FW? debo hacer RecordSet, para recoger consultas? como

Luis Ponce
Posts: 2365
Joined: Wed Nov 02, 2005 11:46 PM
Re: CONEXION A MYSQL
Posted: Thu Oct 03, 2013 01:15 AM
LuisPonce wrote:Daniel, como uso, como hago la conexion y de donde bajo la TDolphin ???


a TDolphin lo estoy cambiando de SVN a GIT, esta todo el codigo fuente disponible

https://bitbucket.org/danielgarciagil/t ... ommits/all

para descargarlo sin instalar el GIT puedes hacerlo desde aqui

https://bitbucket.org/danielgarciagil/tdolphin/get/master.zip

dentro encontraras muchos ejemplos, solo edita el .bat que necesites para construir la lib
Posts: 2365
Joined: Wed Nov 02, 2005 11:46 PM
Re: CONEXION A MYSQL
Posted: Thu Oct 03, 2013 01:22 AM
LuisPonce wrote:Me conecte!!
Solo use esos dos ficheros de cabecera, estoy usando el ADO nativo del FW?


ADO es nativo de window, no se si estaran los conectores funcionando para otra plaraforma

tanto TDolphin como TMySql funciona en cualquier plataforma, no requiere de la existencia de un GUI pues esta dise帽ado para trabajar con [x]Harbour

pero como te comente anteriormente, las deficiencias de uno son las virtudes de otro, solo tu podras ponderar tus necesidades de cual usar
Posts: 476
Joined: Sat Feb 03, 2007 06:36 AM
Re: CONEXION A MYSQL
Posted: Thu Oct 03, 2013 11:46 AM

Luis, solo para que tengas otros par谩metros a tomar en cuenta.

Yo he trabajado por muchos a帽os con MySQL con la librer铆a Eagle1, y te puedo decir que la ventaja es que no hay que instalar ning煤n conector adicional, solo se necesita, tu ejecutable y la DLL de coneccion a MySQL.
De esta forma he trabajado con Windows desde XP hasta 8, sin ning煤n problema y con cualquier versi贸n de MySQL, desde la 4.1 hasta la 5.5, que he probado, y utilizando la misma DLL de coneccion en todas estas versiones.

Y lo mejor, es que me funciona todo correctamente en Linux (Fedora, Ubunto, Mint, etc.), utilizando Wine, con lo que le dado la opci贸n al cliente de utilizar terminales para trabajar con Linux, sin necesidad de estar comprando licencias de Windows.

Saludos cordiales.

Carlos.

Posts: 1380
Joined: Fri Oct 14, 2005 01:28 PM
Re: CONEXION A MYSQL
Posted: Thu Oct 03, 2013 12:20 PM
Daniel Garcia-Gil wrote:
a TDolphin lo estoy cambiando de SVN a GIT, esta todo el codigo fuente disponible

https://bitbucket.org/danielgarciagil/t ... ommits/all

para descargarlo sin instalar el GIT puedes hacerlo desde aqui

https://bitbucket.org/danielgarciagil/tdolphin/get/master.zip

dentro encontraras muchos ejemplos, solo edita el .bat que necesites para construir la lib


Daniel;
No entiendo bien como usar bitbucket (ya me subscribi)
Tampoco se decirte si necesito actualizar mi TDolphin (como se cual es la 煤ltima version?)
Sugerencia: si ter dan los tiempos, ser铆a bueno un "paso a paso en tu Blog"

muchas gracias
Resistencia - "Ciudad de las Esculturas"

Chaco - Argentina
Posts: 2365
Joined: Wed Nov 02, 2005 11:46 PM
Re: CONEXION A MYSQL
Posted: Thu Oct 03, 2013 12:43 PM
Mario

bitbucket se encarga de comprimir todo y colocar el link de descarga

https://bitbucket.org/danielgarciagil/tdolphin/get/master.zip
Posts: 1380
Joined: Fri Oct 14, 2005 01:28 PM
Re: CONEXION A MYSQL
Posted: Thu Oct 03, 2013 12:59 PM
gracias Daniel
Para los duros, como yo, con el ingles (con onda y sin ofender) :-) ac谩 dejo un enlace que explica como usar Bitbucket
http://www.memoriasdeunaprendiz.com/programacion/git-gitbucket/
Resistencia - "Ciudad de las Esculturas"

Chaco - Argentina
Posts: 1818
Joined: Wed Oct 26, 2005 02:49 PM
Re: CONEXION A MYSQL
Posted: Thu Oct 03, 2013 01:45 PM
Luis Buen d铆a

Esta es la forma como yo hago las consultas:

Primero que todo hay que crear el recorset. (bueno si tienes creadas las tablas que vas a usar)

Code (fw): Select all Collapse
oVar 聽 := "SELECT * from "+oLamcla:tBode+" ORDER BY "+alltrim(oLamcla:vOrden)
TRY
聽 oLamcla:oRsBodega:=tOleAuto():New("ADODB.RecordSet")
CATCH oError
聽 MsgStop( "No se ha podido crear el RECORDSET !","Error de Datos" )
END

oLamcla:oRsBodega:CursorLocation 聽:= adUseClient //adUseServer
oLamcla:oRsBodega:LockType 聽 聽 聽 聽:= adLockOptimistic
oLamcla:oRsBodega:CursorType 聽 聽 聽:= adOpenKeyset
oLamcla:oRsBodega:Source 聽 聽 聽 聽 聽:= oVar
oLamcla:oRsBodega:ActiveConnection( oLamcla:oServer )
TRY
聽 oLamcla:oRsBodega:Open()
CATCH oError
聽 MsgStop( "No se ha podido ejecutar el comando !", "Error de Datos" )
END


Luego esta es una de las formas de hacer altas, bajas y modificaciones, se trabaja sobre el recorset y este se encarga de actualizar la tabla.

Code (fw): Select all Collapse
************************************
*Graba los datos en la base de datos
************************************
PROC pGrabBod()

uFec:=date()
uTim:=subs(time(),1,8)
uCou:=alltrim(oLamcla:vCous)

IF oLamcla:vgraba=.t.
聽 oLamcla:oRsBodega:Addnew()
聽 oLamcla:oRsBodega:Fields("b_bodega"):value := alltrim(oB2vg1)
聽 oLamcla:oRsBodega:Fields("b_nombre"):value := alltrim(oB2vg2)
聽 oLamcla:oRsBodega:Fields("b_direcc"):value := alltrim(oB2vg3)
聽 oLamcla:oRsBodega:Fields("b_telefo"):value := alltrim(oB2vg4)
聽 oLamcla:oRsBodega:Fields("umovim"):value := 0
聽 oLamcla:oRsBodega:Fields("usuari"):value := uCou
聽 oLamcla:oRsBodega:Fields("ufecha"):value := uFec
聽 oLamcla:oRsBodega:Fields("uhoras"):value := uTim
聽 oLamcla:oRsBodega:Update()
ELSE
聽 oLamcla:oRsBodega:Fields("b_bodega"):value := alltrim(oB2vg1)
聽 oLamcla:oRsBodega:Fields("b_nombre"):value := alltrim(oB2vg2)
聽 oLamcla:oRsBodega:Fields("b_direcc"):value := alltrim(oB2vg3)
聽 oLamcla:oRsBodega:Fields("b_telefo"):value := alltrim(oB2vg4)
聽 oLamcla:oRsBodega:Fields("usuari"):value := uCou
聽 oLamcla:oRsBodega:Fields("ufecha"):value := uFec
聽 oLamcla:oRsBodega:Fields("uhoras"):value := uTim
聽 oLamcla:oRsBodega:Update()
ENDIF
oLamcla:oRsBodega:Requery()
oLamcla:oBrwBode:Refresh()
oCuadr1:end()


Para eliminar

Code (fw): Select all Collapse
****************
*Borrar Registro
****************
PROC pBorrBod()
nRegistros := oLamcla:oRsBodega:RecordCount()
IF nRegistros#0
聽 oM2vg1:=oLamcla:oRsBodega:Fields("b_bodega"):Value
聽 oM2vg2:=oLamcla:oRsBodega:Fields("b_nombre"):Value
聽 IF MSGNOYES("Confirma Eliminar Bodega"+CRLF+;
聽 聽 聽 聽 聽 聽 聽 "C贸digo:->"+alltrim(oM2vg1)+CRLF+;
聽 聽 聽 聽 聽 "Nombre:->"+alltrim(oM2vg2),oLamcla:mCoto)
聽 聽 oLamcla:oRsBodega:Delete()
聽 聽 oLamcla:oRsBodega:Requery()
聽 聽 oLamcla:oBrwBode:Refresh()
聽 ENDIF
ENDIF


Otra forma de hacerlo es la siguiente:
Agregar
Code (fw): Select all Collapse
聽 vConsCB:="INSERT INTO "+oLamcla:tBarr+" (ii_articu,ii_nombre,ii_codbar,ii_madres,ii_tallas,ii_colore,umovim,usuari,ufecha,uhoras) VALUES ('"+;
聽 聽 聽 聽 聽 聽alltrim(oA1vg1)+"','"+alltrim(oA1vg2)+"','','1','','',0,'"+uCou+"','"+uFe2+"','"+uTim+"')"
聽 TRY
聽 聽 oLamcla:oServer:Execute(vConsCB)
聽 CATCH oError
聽 聽 MsgInfo(oLamcla:mRegi,oLamcla:mDato)
聽 END

Modificar
Code (fw): Select all Collapse
聽 vConsCB:="UPDATE "+oLamcla:tBarr+" SET ii_nombre='"+;
聽 聽 聽 聽 聽 聽alltrim(oA1vg2)+"',usuari='"+uCou+"',ufecha='"+uFe2+"',uhoras='"+uTim+"' WHERE ii_articu='"+alltrim(oA1vg1)+"'"
聽 TRY
聽 聽 oLamcla:oServer:Execute(vConsCB)
聽 CATCH oError
聽 聽 MsgInfo(oLamcla:mRegi,oLamcla:mDato)
聽 END

Eliminar
Code (fw): Select all Collapse
聽 聽 vConsCB:="DELETE FROM "+oLamcla:tBarr+" WHERE ii_articu='"+alltrim(oM2vg1)+"'"
聽 聽 TRY
聽 聽 聽 oLamcla:oServer:Execute(vConsCB)
聽 聽 CATCH oError
聽 聽 聽 MsgInfo(oLamcla:mRegi,oLamcla:mDato)
聽 聽 END



Seleccionar una base de datos
Code (fw): Select all Collapse
cCommandSql := "USE "+oLamcla:nDBdat
TRY
  oCon:Execute(cCommandSql)
CATCH oError
  MsgInfo("No pude activar la base de datos")
END


Para crear las tablas
Code (fw): Select all Collapse
vQuery := "CREATE TABLE IF NOT EXISTS "+oLamcla:tEmpr+" "
vQuery += "("
vQuery += "e_codi VARCHAR(2)   NOT NULL ,"
vQuery += "e_nomb VARCHAR(50)  NOT NULL ,"
vQuery += "e_nits VARCHAR(15)  NOT NULL ,"
vQuery += "e_digi VARCHAR(2)   NULL ,"
vQuery += "e_gere VARCHAR(40)  NULL ,"
vQuery += "e_domi VARCHAR(40)  NULL ,"
vQuery += "e_dire VARCHAR(50)  NULL ,"
vQuery += "e_tele VARCHAR(20)  NULL ,"
vQuery += "e_faxs VARCHAR(20)  NULL ,"
vQuery += "e_host VARCHAR(50)  NOT NULL ,"
vQuery += "e_hore VARCHAR(50)  NOT NULL ,"
vQuery += "e_usua VARCHAR(20)  NOT NULL ,"
vQuery += "e_pass VARCHAR(20)  NOT NULL ,"
vQuery += "e_daba VARCHAR(20)  NOT NULL ,"
vQuery += "e_prto VARCHAR(10)  NOT NULL ,"
vQuery += "e_anos VARCHAR(99)  NOT NULL ,"
vQuery += "e_nota VARCHAR(99)  NULL ,"
vQuery += "e_fech DATE         NULL ,"
vQuery += " PRIMARY KEY (e_codi)"
vQuery += ") "
vQuery += " TYPE = MYISAM;"
TRY
  oCon:Execute(vQuery)
CATCH oError
  MsgInfo("La tabla "+oLamcla:tEmpr+" NO pudo ser creada")
END


Espero te sea de ayuda
Saludos
LEANDRO AREVALO
Bogot谩 (Colombia)
https://hymlyma.com
https://hymplus.com/
leandroalfonso111@gmail.com
leandroalfonso111@hotmail.com

[ Turbo Incremental Link64 6.98 Embarcadero 7.70 ] [ FiveWin 25.01 ] [ xHarbour 64 bits) ]
Posts: 196
Joined: Tue Jul 01, 2008 06:34 PM
Re: CONEXION A MYSQL
Posted: Fri Oct 04, 2013 03:37 PM

Leandro

Gracias por los ejemplos, me parece que le faltan lineas al primero, estas consultas funcionan con el ADO ? con el cual hice la conexion ?

Carlos,

Donde puedo bajar... u obtener mas informacion sobre Eagle1, ejemplos

Att.

Luis Ponce