Page 1 of 2

A expertos en FWH+xHarbour+TMySql

Posted: Wed Jun 10, 2009 8:33 pm
by FranciscoA
Hola amigos:
Estoy comenzando con TMySql. Agradezco lo que voy avanzando a mis colegas del foro, especialmente a Gabo, Willi y William, quienes me han apoyado para comenzar.
He logrado presentar una tabla utilizando FWH+xHarbour+TMySql con TxBrowse. Sin embargo (hasta hoy) noto un extraño comportamiento de xBrowse. Si se usa las flechas arriba y sobrepasa Bof(), xBrowse borra de pantalla el primer registro. Lo mismo si se usa la barra Scrol Vertical. Dejo, aquí, el codigo autocontenido, por si desean probarlo y ayudarme a depurarlo. En todos mis programas anteriores nunca se presentó el inconveniente descrito.

#include "fivewin.ch"
#include "xBrowse.ch"

STATIC oCon

//----------------------------------
FUNCTION main()
MSGRun( "Conectando a server-sql, espere...", "SOFTWARE", ;
{|| oCon := TMYsqlServer():new( "localhost", "root", "xxx", 3306)} )

IF oCon:lError
MsgStop( "Error: No se estableció conexión, verifique y reintente...","Alto" )
RETURN NIL
ENDIF


IF !oCon:DBExist( "tutor" )
MSGRun( "Creando Base de Datos, aguarde...",, {|| oCon:CreateDataBase( "tutor")} )
ENDIF

oCon:SelectDB( "tutor" )
IF oCon:lError
MsgStop( "No se pudo seleccionar la Base de Datos...","alto" )
RETURN NIL
ENDIF

MisTablSql() //Crear tablas

oCon:end()

RETURN NIL

//---------------------
Function MisTablSql()
LOCAL cCmdSql, cQuery, oDatos, oDlg
local oBrw, oCol, n:=0

if oCon:TableExist( "usuarios" )
oCon:DeleteTable("usuarios")
endif

cCmdSql:= "CREATE TABLE IF NOT EXISTS usuarios (" +;
"CLAVE VARCHAR(10) NOT NULL COMMENT 'Clave'," +;
"NOMBRE VARCHAR(30) NOT NULL COMMENT 'Nombre'," +;
"PRIMARY KEY (CLAVE))" +;
"ENGINE = InnoDB COMMENT 'usuarios';"

oCon:Query(cCmdSql)

cCmdSql := "INSERT INTO USUARIOS (NOMBRE,CLAVE) VALUES('Francisco','002');"
oCon:Query( cCmdSql )
cCmdSql := "INSERT INTO USUARIOS (NOMBRE,CLAVE) VALUES('Roberto','001');"
oCon:Query( cCmdSql )
cCmdSql := "INSERT INTO USUARIOS (NOMBRE,CLAVE) VALUES('Alejandro','003');"
oCon:Query( cCmdSql )

**cQuery:= "SELECT clave, nombre FROM usuarios" //* FROM usuarios ORDER BY clave LIMIT 100"
cQuery:= "SELECT * FROM usuarios ORDER BY clave"
oDatos:= oCon:Query( cQuery )

oDatos:GoTop()

DEFINE DIALOG oDlg FROM 2,2 TO 20,60 ;
TITLE "CLIENTES (FWH + xHARBOUR + TMySQL)"

oBrw := TXBrowse():New( oDlg )

SetMyBrwSql(oBrw, oDatos)

oBrw:nMarqueeStyle := MARQSTYLE_HIGHLROW
oBrw:nColDividerStyle := LINESTYLE_BLACK
oBrw:nRowDividerStyle := LINESTYLE_BLACK
oBrw:lColDividerComplete := .t.
oBrw:bClrStd := {|| IF( (oDatos:Recno()%2)==0, ;
{ CLR_BLACK, RGB(250,240,188)},{CLR_BLACK,RGB(254,252,237)} ) }

oCol := oBrw:AddCol()
oCol:bStrData := { || oDatos:clave }
oCol:cHeader := "Clave "
oCol:nWidth := 40

oCol := oBrw:AddCol()
oCol:bStrData := { || oDatos:nombre }
oCol:cHeader := "Nombre "
oCol:nWidth := 100

oBrw:CreateFromCode()
oDlg:oClient := oBrw

ACTIVATE DIALOG oDlg CENTER
Return nil

//---------------------------------
FUNCTION SetMyBrwSql( oBrw,oTable )
oBrw:bGoTop := { || oTable:Gotop() }
oBrw:bGoBottom := { || oTable:GoBottom() }
oBrw:bSkip := { |n| oTable:Skip(n) }
oBrw:bBof := { || oTable:Bof() }
oBrw:bEof := { || oTable:Eof() }
oBrw:bBookMark := { | n | if( n == nil, oTable:RecNo(),oTable:GoTo(n) ) }
oBrw:bKeyNo := oBrw:bBookMark
oBrw:bKeyCount := { || oTable:LastRec() }
oBrw:oDbf := oTable

if oBrw:oVScroll() != nil
oBrw:oVscroll():SetRange( 1,oTable:Lastrec() )
endif
oBrw:Refresh()
RETURN NIL

Agradezco de antemano cualquier comentario.
Saludos

Re: A expertos en FWH+xHarbour+TMySql

Posted: Thu Aug 01, 2013 8:17 pm
by ltorres
Francisco

Buenas tardes, ¿podrías ayudarme a establecer la conexión al MySql?, e probado con las versiones:

FW 6.12+ BCC551+xH 0.99.71
FW 6.12+ BCC551+xH 1.2.1
FW 11.01+ BCC582+xH 1.2.1
FW 13.01+ BCC582+xH 1.2.3

y NADA !!.

Gracias

Luis

Re: A expertos en FWH+xHarbour+TMySql

Posted: Thu Aug 01, 2013 9:03 pm
by FranciscoA
Luis,
Aquí tienes este codigo ejemplo para empezar. Cualquier duda, solo pregunta en este foro y obtendrás toda la ayuda que necesites.
Utilizo TMySql y mi version FHW1204.

Code: Select all

#include "FiveWin.ch"

Static oServer

//----------------
Function Main()
local cHost, cUser, cPass, nPort, cNomBDD

//CONECCION CON SERVIDOR
cHost := "localhost"       // "127.0.0.1"  //en modo local, ó  "19x.16x.0.17"   //IP servidor 
cUser := "Luis"            // usuario
cPass := "tupassword"      // password
nPort := "3306"            // puerto para MySql
cNomBDD := "tubasedatos"   //Nombre base de datos

if !IsInternet()
   MsgInfo("No se puede establecer coneccion remota."+CRLF+;
           "No se tiene acceso a Internet.","Advertencia")
endif

if !Coneccion(cHost, cUser, cPass, nPort, cNomBDD) 
   return nil
endif
//FIN CONECCION CON SERVIDOR


  ACTIVATE WINDOW oWnd MAXIMIZED 
  ......
  ...... 
  oServer:End()

Return nil


//CONECTAR CON SERVIDOR MYSQL Y CREAR BASE DE DATOS Y TABLAS
//----------------------------------
Function Coneccion(cHost, cUser, cPass, nPort, cNomBDD)
local cCmdSql

MsgRun( "Conectando con servidor. Aguarde...", "FAPSOFTWARE", ;
        {|| oServer := TMYsqlServer():new( cHost, cUser, cPass, nPort) } )

if oServer:lError
   MsgStop(oServer:Error())  //Descrip en MySql.prg
   Return .f.
endif


//CREAR BASE DE DATOS SI NO EXISTE
oServer:Query( "CREATE DATABASE IF NOT EXISTS " + cNomBDD ) 

if oServer:lError
  MsgStop( "No se pudo crear la Base de Datos "+cNomBDD,"Alto" )
  oServer:End()
  return .f.
endif


//SELECCIONAR LA BASE DE DATOS
oServer:SelectDB( cNomBDD )
if oServer:lError
  MsgStop( "No se pudo seleccionar la Base de Datos (o no existe)."+CRLF+;
           "Base de Datos: "+cNomBDD,"Alto" )
  oServer:End()
  return .f.
endif


//CREAR TABLAS SI NO EXISTEN
cCmdSql:=  "CREATE TABLE IF NOT EXISTS usuarios(" +;
           "NOMBRE VARCHAR(50)   DEFAULT '' COMMENT 'Nombre del usuario'," +;
           "CODIGO VARCHAR(20)   DEFAULT '' COMMENT 'Codigo acceso del usuario'," +;
           "ADMIN  CHAR(1)  DEFAULT '' COMMENT 'Tipo de Acceso'," +;
           "CONTA  CHAR(1)  DEFAULT '' COMMENT 'Acceso a Contab'," +;
           "CDIAR  CHAR(1)  DEFAULT '' COMMENT 'Acceso a Cdiario'," +;
           "RECJA  CHAR(1)  DEFAULT '' COMMENT 'Acceso a Rcaja tipo CD'," +;
           "RCAJA  CHAR(1)  DEFAULT '' COMMENT 'Acceso a RecibosC'," +;
           "DEPOS  CHAR(1)  DEFAULT '' COMMENT 'Acceso a Depositos'," +;
           "CHEQU  CHAR(1)  DEFAULT '' COMMENT 'Acceso a Cheques'," +;
           "NOTDC  CHAR(1)  DEFAULT '' COMMENT 'Acceso a Notas de Contab'," +;
           "FACTU  CHAR(1)  DEFAULT '' COMMENT 'Acceso a Facturas' )" +;
           "ENGINE = InnoDB COMMENT 'usuarios';"

oServer:Query(cCmdSql)

if oServer:lError
   MsgStop(oServer:Error)
   MsgStop( "No se pudo crear la tabla USUARIOS, verifique." )
   oServer:End()
   return .f.
endif

//LAS DEMAS TABLAS...
...
...

Return .t.

 
Saludos.

Re: A expertos en FWH+xHarbour+TMySql

Posted: Thu Aug 01, 2013 9:06 pm
by ltorres
GRACIAS !!!

Voy a probarlo

Re: A expertos en FWH+xHarbour+TMySql

Posted: Thu Aug 01, 2013 9:16 pm
by elvira
Francisco,

Revisa samples\adoxb.prg y la clase TDataROw.

En los foros de inglés tienes ejemplos de ambos.

Es un aproach mucho más sencillo y con menos código.

Un saludo

Re: A expertos en FWH+xHarbour+TMySql

Posted: Thu Aug 01, 2013 9:49 pm
by ltorres
Francisco

Ya compila pero no conecta, sale este mensaje, desde el YOG si conecta con los mismos datos, te adjunto la pantalla, creo que el problema mas que en el programa es en la configuración.

Image

De repente falta alguna libreria. etc.

Te agradezco de antemano.
ltorres wrote:GRACIAS !!!

Voy a probarlo

Re: A expertos en FWH+xHarbour+TMySql

Posted: Thu Aug 01, 2013 10:04 pm
by FranciscoA
Luis,
Podés poner una imagen mas grande?
Saludos.

Re: A expertos en FWH+xHarbour+TMySql

Posted: Fri Aug 02, 2013 2:00 am
by sysctrl2
para que conectes con MYSQL, debes de tener junto a tu App.exe la
librería: LIBMYSQL.DLL
saludos

Re: A expertos en FWH+xHarbour+TMySql

Posted: Fri Aug 02, 2013 8:13 pm
by ltorres
Disculpen, por error coloque el enlace al preview, aquí esta la imagen de la configuración de mi prueba de conexión.

http://www.subirimagenes.com/privadas-e ... 05003.html
Image

Espero me puedan ayudar.

Gracias


Luis

Re: A expertos en FWH+xHarbour+TMySql

Posted: Sat Aug 03, 2013 3:29 am
by FranciscoA
Probá deshabilitando el firewall de windows. O configuralo para que permita a MySql.
Postea aqui tu codigo para que todos lo podamos revisar y asi obtienes ayuda general del foro. (postea un codigo que podamos compilarlo facilmente)
Saludos.

Re: A expertos en FWH+xHarbour+TMySql

Posted: Sat Aug 03, 2013 12:35 pm
by ltorres
Francisco

Estoy usando el que me pusiste como ejemplo, solo ese, compila bien pero no conecta, con el utilitario YOG ingreso a la BD normal.

Code: Select all

#include "FiveWin.ch"

Static oServer

//----------------
Function Main()
local cHost, cUser, cPass, nPort, cNomBDD

//CONECCION CON SERVIDOR
cHost := '192.168.100.188'       // "127.0.0.1"  //en modo local, ó  "19x.16x.0.17"   //IP servidor 
cUser := 'root'            // usuario
cPass := 'mipass'      // password
nPort := 3306            // puerto para MySql
cNomBDD := 'mibd'   //Nombre base de datos

if !IsInternet()
   MsgInfo("No se puede establecer coneccion remota."+CRLF+;
           "No se tiene acceso a Internet.","Advertencia")
endif

if !Coneccion(cHost, cUser, cPass, nPort, cNomBDD) 
   return nil
endif
//FIN CONECCION CON SERVIDOR


  ACTIVATE WINDOW oWnd MAXIMIZED 
  //......
  //...... 
  oServer:End()

Return nil


//CONECTAR CON SERVIDOR MYSQL Y CREAR BASE DE DATOS Y TABLAS
//----------------------------------
Function Coneccion(cHost, cUser, cPass, nPort, cNomBDD)
local cCmdSql

MsgRun( "Conectando con servidor. Aguarde...", "FAPSOFTWARE", ;
        {|| oServer := TMYsqlServer():new( cHost, cUser, cPass, nPort) } )
        
//cConString1:="MySQL="+lower(ALLTRIM(cConnName)) + ";" + "UID="+lower(ALLTRIM(cConnUsrs))+ ";"+"pwd="+lower(ALLTRIM(cConnPass))+ ";" +"dtb="+alltrim(LOWER(cConnBase))+";PRT=3306"  
     
     nCon1 := SR_AddConnection( CONNECT_MYSQL, cConString1 )

if oServer:lError
   MsgStop(oServer:Error())  //Descrip en MySql.prg
   Return .f.
endif


//CREAR BASE DE DATOS SI NO EXISTE
oServer:Query( "CREATE DATABASE IF NOT EXISTS " + cNomBDD ) 

if oServer:lError
  MsgStop( "No se pudo crear la Base de Datos "+cNomBDD,"Alto" )
  oServer:End()
  return .f.
endif


//SELECCIONAR LA BASE DE DATOS
oServer:SelectDB( cNomBDD )
if oServer:lError
  MsgStop( "No se pudo seleccionar la Base de Datos (o no existe)."+CRLF+;
           "Base de Datos: "+cNomBDD,"Alto" )
  oServer:End()
  return .f.
endif


//CREAR TABLAS SI NO EXISTEN
cCmdSql:=  "CREATE TABLE IF NOT EXISTS usuarios(" +;
           "NOMBRE VARCHAR(50)   DEFAULT '' COMMENT 'Nombre del usuario'," +;
           "CODIGO VARCHAR(20)   DEFAULT '' COMMENT 'Codigo acceso del usuario'," +;
           "ADMIN  CHAR(1)  DEFAULT '' COMMENT 'Tipo de Acceso'," +;
           "CONTA  CHAR(1)  DEFAULT '' COMMENT 'Acceso a Contab'," +;
           "CDIAR  CHAR(1)  DEFAULT '' COMMENT 'Acceso a Cdiario'," +;
           "RECJA  CHAR(1)  DEFAULT '' COMMENT 'Acceso a Rcaja tipo CD'," +;
           "RCAJA  CHAR(1)  DEFAULT '' COMMENT 'Acceso a RecibosC'," +;
           "DEPOS  CHAR(1)  DEFAULT '' COMMENT 'Acceso a Depositos'," +;
           "CHEQU  CHAR(1)  DEFAULT '' COMMENT 'Acceso a Cheques'," +;
           "NOTDC  CHAR(1)  DEFAULT '' COMMENT 'Acceso a Notas de Contab'," +;
           "FACTU  CHAR(1)  DEFAULT '' COMMENT 'Acceso a Facturas' )" +;
           "ENGINE = InnoDB COMMENT 'usuarios';"

oServer:Query(cCmdSql)

if oServer:lError
   MsgStop(oServer:Error)
   MsgStop( "No se pudo crear la tabla USUARIOS, verifique." )
   oServer:End()
   return .f.
endif

//LAS DEMAS TABLAS...
//...
//...

Return .t.
 
 
Gracias


Luis

Re: A expertos en FWH+xHarbour+TMySql

Posted: Sat Aug 03, 2013 3:41 pm
by Hector Pedro Lerda
Una pregunta que versión de mysql estas usando ????

Re: A expertos en FWH+xHarbour+TMySql

Posted: Sat Aug 03, 2013 3:47 pm
by ltorres
Ante todo gracias Hector, el MySql es 5.5

Re: A expertos en FWH+xHarbour+TMySql

Posted: Sat Aug 03, 2013 4:03 pm
by Hector Pedro Lerda
Luis

Root tiene permiso en el mysql para acceder desde cualquier lugar,

Re: A expertos en FWH+xHarbour+TMySql

Posted: Sat Aug 03, 2013 4:12 pm
by Hector Pedro Lerda
y otra pregunta, tal vez sea tonta, que password estas usando? , porque en el ejemplo dejastes el indicativo pero al instalar el server debes haber colocado otro o instalastes el servidor con ese.