Amigos:
¿Alguien tiene un pequeño ejemplo para presentar los registros de una tabla Sql en Twbrowse o TxBrowse?
¿Sin utilizar ADO, solo MySql+Sql+xHarbour?
Lo estoy haciendo así, pero no lo consigo. "(¿tantos años con las DBFs? )"
#include "fivewin.ch"
STATIC oCon
//----------------------------------
FUNCTION main()
MSGRun( "Conectando a server-sql, espere...", "SOFTWARE", ;
{|| oCon := TMYsqlServer():new( "localhost", "root", "fap", 3306)} )
IF oCon:lError
MsgStop( "Se ha generado un error, no hay conexión, verifique...","Alto" )
RETURN NIL
ENDIF
IF !oCon:DBExist( "tutor" )
MSGRun( "Creando contenedor, espere...",, {|| oCon:CreateDataBase( "tutor")} )
ENDIF
oCon:SelectDB( "tutor" )
IF oCon:lError
MsgStop( "No se pudo seleccionar el contenedor...","alto" )
RETURN NIL
ENDIF
Prueba()
Endif
oCon:end()
RETURN NIL
//---------------------
Function prueba()
LOCAL cCmdSql, cQuery, oDatos, oDlg,oLbx
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"
oDatos:= oCon:Query( cQuery, .t. )
Msginfo("Registros en usuarios: "+str(oDatos:Reccount()))
DEFINE DIALOG oDlg FROM 2,2 TO 25,79 ;
TITLE "CLIENTES (FWH + HARBOUR + TMySQL + MySQL)"
@1,1 LISTBOX oLbx ; //me lo presenta vacío
FIELDS oDatos:clave, oDatos:nombre ;
HEADERS "Clave", "Nombre" ;
SIZES 30, 60 ;
OF oDlg
ACTIVATE DIALOG oDlg CENTER ;
ON INIT ( oLbx:SetFocus(), oLbx:Gotop(), oLbx:Refresh() )
Return nil
Un ejemplo de MySql+Sql+xHarbour
- FranciscoA
- Posts: 2163
- Joined: Fri Jul 18, 2008 1:24 am
- Location: Chinandega, Nicaragua, C.A.
Re: Un ejemplo de MySql+Sql+xHarbour
Francisco,
A que cuenta de correo te puedo enviar un ejemplo completo de FWH + TMySql + xHarbour
Saludos
GABO
A que cuenta de correo te puedo enviar un ejemplo completo de FWH + TMySql + xHarbour
Saludos
GABO
- FranciscoA
- Posts: 2163
- Joined: Fri Jul 18, 2008 1:24 am
- Location: Chinandega, Nicaragua, C.A.
Re: Un ejemplo de MySql+Sql+xHarbour
gabo wrote:Francisco,
A que cuenta de correo te puedo enviar un ejemplo completo de FWH + TMySql + xHarbour
Saludos
GABO
Hola Gabo:
Gracias por tu ayuda. Puedes enviarmelo a f.alegria.p@gmail.com .
Muy Agradecido.
Francisco J. Alegría P.
Chinandega, Nicaragua.
Fwxh-MySql-TMySql
Chinandega, Nicaragua.
Fwxh-MySql-TMySql
- Willi Quintana
- Posts: 1025
- Joined: Sun Oct 09, 2005 10:41 pm
- Location: Cusco - Perú
- Contact:
Re: Un ejemplo de MySql+Sql+xHarbour
Hola,,, El el Blog de William puse un ejemplo de TWBROWSE con MySQL,,,,
date una vuelta por alli
Salu2
date una vuelta por alli
Salu2
- FranciscoA
- Posts: 2163
- Joined: Fri Jul 18, 2008 1:24 am
- Location: Chinandega, Nicaragua, C.A.
Re: Un ejemplo de MySql+Sql+xHarbour
Estimado Willi:
Este ejemplo to tomé de donde me indicas, compila bien, pero lo mismo, presenta el oLbx vacío.
Le hice algunos ajustes a pequeños errores, e incluí msgInfo() por razones de comprobación.
Todo funciona bien, menos la parte del ListBox.
# include "fivewin.ch"
Static oWnd, oMySQl, oDBase, lConecta, lOkDb
//------------------------------------------------
Function Main()
local cHost, cUser, cPass, lOk, nPortlocal, cDbName, nPort
lOk := .f.
lConecta := lOkDb := .f.
cHost := "localhost" // en modo local
cUser := "root" // usuario
cPass := "fap" // password
cDbName := "pruebas" // nombre de la base de datos
nPort := "3306"
ConectaMySQL(cHost, cUser, cPass, nPort)
If !lConecta
MsgInfo( "No Hay Conexión Con El Servidor " + cHost, "Alto" )
Return(.f.)
EndIf
oDBase := AbreDbMySQL(oMySQL, oDBase, cDbName)
If !lOkDb
MsgInfo( "No Se Puede Crear la Base De Datos " + cDbName + CHR(34), "" )
Return(.f.)
EndIF
DEFINE WINDOW oWnd
ACTIVATE WINDOW oWnd MAXIMIZED ;
ON INIT AMB(oWnd, oMySQL, oDBase) // siempre envio los handles,,,,,
Return(nil)
//--------------------------------------------------------------------
Function ConectaMySQL(cHost, cUser, cPass, nPuerto )
oMySQL := TMySQLServer():New(cHost, cUser, cPass, nPuerto)
IF oMySQL:NetErr()
lConecta := .f.
ELse
lConecta := .t.
EndIF
Return(lConecta)
//---------------------------------------------------------------------
Function AbreDbMySQL(oMySQL, oDBase, cDbName)
cDBName := AllTrim(cDbName)
oMySQL:Query( "CREATE DATABASE IF NOT EXISTS " + cDBName )
oDBase := oMySQL:SelectDB( cDBName )
IF oMySQL:NetErr()
lOkDb := .f.
Else
lOkDb := .t.
EndIF
Return(oDBase)
//-------esta funcion puede estar en otro prg---------------------
Function AMB() //oWnd, oMySQL, oDBase)
local oSalir, oNuevo, oModif, oImpri, oElimi, tCargalocal, oDlg, oLbx, oDatos, eDatos, oOrden
local nOrden, oAlgo, lAlgolocal, aCol, oBrw, cQuery, nCont, nLen, aListaaCol := ARRAY(2)
LOCAL cTablas:="",aTablas:={}, n:=0, cCmdSql
if oMySQL:TableExist( "kardex" )
MsgInfo("Tabla KARDEX ya existe, VAMOS A BORRARLA...")
oMySQL:DeleteTable("KARDEX")
endif
if oMySQL:TableExist( "kardex" )
MsgInfo("no la borro...")
else
MsgInfo("efectivamente, fue borrada..")
endif
cCmdSql:= "CREATE TABLE IF NOT EXISTS kardex (" +;
"INGRESO NUMERIC(12,2) NULL DEFAULT 0 COMMENT 'Entradas'," +;
"EGRESO NUMERIC(12,2) NULL DEFAULT 0 COMMENT 'Salidas'," +;
"SALDO NUMERIC(12,2) NULL DEFAULT 0 COMMENT 'Saldo Actual' )" +;
"ENGINE = InnoDB COMMENT 'kardex';"
oMySQL:Query(cCmdSql)
IF oMySQL:lError
MsgInfo( "No se pudo crear la tabla, verifique..." )
ELSE
MsgInfo( "Tabla ha sido creada de nuevo..." )
ENDIF
//Comprobando las tablas que existen
aTablas:=oMySQL:ListTables()
For n:=1 to len(aTablas)
if n > 1
cTablas+=", "+aTablas[n]
else
cTablas+=aTablas[n]
endif
Next
MsgInfo(cTablas,"Tablas encontradas")
//Agregando (insertando) algunos registros en la tabla
cCmdSql := "INSERT INTO KARDEX (INGRESO,EGRESO) VALUES(100.10, 50.50);"
oMySQL:Query( cCmdSql )
cCmdSql := "INSERT INTO KARDEX (INGRESO,EGRESO) VALUES(200.10, 20.50);"
oMySQL:Query( cCmdSql )
cCmdSql := "INSERT INTO KARDEX (INGRESO,EGRESO) VALUES(300.10, 30.50);"
oMySQL:Query( cCmdSql )
cQuery := "SELECT * FROM kardex" // WHERE cod_producto = '20071121223230' ORDER BY num_movimiento LIMIT 500"
oDatos := oMySQL:Query(cQuery , .t. )
//Comprobando si hay registros
Msginfo("Registros en KARDEX: "+str(oDatos:Reccount()))
If oDatos:RecCount() == 0 && si no tiene datos...
oDatos:End()
MsgInfo("No hay registros")
Return(Nil)
EndIf
DEFINE DIALOG oDlg FROM 2,2 TO 26,70 TITLE "FWH + HARBOUR + TMySQL + MySQL"
//ESTA ES LA PARTE QUE NO FUNCIONA
@2,2 LISTBOX oLbx ;
FIELDS MyCampo(oDatos, "ingreso"), ;
MyCampo(oDatos, "egreso"), ;
MyCampo(oDatos, "saldo") ;
HEADERS "Ingresos","Egresos","Saldo" ;
SIZES 80, 80, 80 ;
SIZE 200,100;
OF oDlg
//Y ESTA LA PUEDES MOSTAR?
//MySetbrowse(oLbx, oDatos ) // importante para la navegacion
ACTIVATE DIALOG oDlg CENTER
Return(nil)
//Esta funcion permite manejar las tablas aun sin datos
//-----------------------------------------
Function MyCampo(oBjeto, nCampo, nEnt, nDec)
local cCampo, cRet, nCol, nCont, cField, nPos
If VALTYPE(nCampo) = "C" // vino el nombre de un campo
nCampo := ALLTRIM(nCampo)
nPos := oBjeto:FieldPos(nCampo)
If nPos = 0 // no existe en campo en mencion
Msginfo("No Existe el Campo Indicado <" + nCampo + ">", "Error")
Return("")
Endif
Else
nPos := nCampo
EndIf
DO CASE
CASE oBjeto:FieldType(nPos) = "N"
cCampo := 0
CASE oBjeto:FieldType(nPos) = "C"
cCampo := ""
CASE oBjeto:FieldType(nPos) = "L"
cCampo := ".f."
CASE oBjeto:FieldType(nPos) = "D"
cCampo := CTOD(" / / ")
OTHERWISE
cCampo := ""
ENDCASE
If oBjeto:RecCount() = 0
Return(cCampo)
EndIF
*mSGINFO("Posic campo: "+alltrim(str(nPos))+" tipo campo: "+ oBjeto:FieldType(nPos))
mSGINFO( "Posic campo: "+alltrim(str(nPos))+" tipo campo: "+ ValType(oBjeto:FieldGet(nPos)) )
//Omití esto para ver, porque siempre es "U"
*IF oBjeto:FieldType(nPos) = "U"
* Return(cCampo)
*EndIf
cCampo := oBjeto:FieldGet(nPos)
msginfo(cCampo+" "+valtype(cCampo)) //aqui se ven bien los valores (tipo caracter)
Return(cCampo)
Saludos
Este ejemplo to tomé de donde me indicas, compila bien, pero lo mismo, presenta el oLbx vacío.
Le hice algunos ajustes a pequeños errores, e incluí msgInfo() por razones de comprobación.
Todo funciona bien, menos la parte del ListBox.
# include "fivewin.ch"
Static oWnd, oMySQl, oDBase, lConecta, lOkDb
//------------------------------------------------
Function Main()
local cHost, cUser, cPass, lOk, nPortlocal, cDbName, nPort
lOk := .f.
lConecta := lOkDb := .f.
cHost := "localhost" // en modo local
cUser := "root" // usuario
cPass := "fap" // password
cDbName := "pruebas" // nombre de la base de datos
nPort := "3306"
ConectaMySQL(cHost, cUser, cPass, nPort)
If !lConecta
MsgInfo( "No Hay Conexión Con El Servidor " + cHost, "Alto" )
Return(.f.)
EndIf
oDBase := AbreDbMySQL(oMySQL, oDBase, cDbName)
If !lOkDb
MsgInfo( "No Se Puede Crear la Base De Datos " + cDbName + CHR(34), "" )
Return(.f.)
EndIF
DEFINE WINDOW oWnd
ACTIVATE WINDOW oWnd MAXIMIZED ;
ON INIT AMB(oWnd, oMySQL, oDBase) // siempre envio los handles,,,,,
Return(nil)
//--------------------------------------------------------------------
Function ConectaMySQL(cHost, cUser, cPass, nPuerto )
oMySQL := TMySQLServer():New(cHost, cUser, cPass, nPuerto)
IF oMySQL:NetErr()
lConecta := .f.
ELse
lConecta := .t.
EndIF
Return(lConecta)
//---------------------------------------------------------------------
Function AbreDbMySQL(oMySQL, oDBase, cDbName)
cDBName := AllTrim(cDbName)
oMySQL:Query( "CREATE DATABASE IF NOT EXISTS " + cDBName )
oDBase := oMySQL:SelectDB( cDBName )
IF oMySQL:NetErr()
lOkDb := .f.
Else
lOkDb := .t.
EndIF
Return(oDBase)
//-------esta funcion puede estar en otro prg---------------------
Function AMB() //oWnd, oMySQL, oDBase)
local oSalir, oNuevo, oModif, oImpri, oElimi, tCargalocal, oDlg, oLbx, oDatos, eDatos, oOrden
local nOrden, oAlgo, lAlgolocal, aCol, oBrw, cQuery, nCont, nLen, aListaaCol := ARRAY(2)
LOCAL cTablas:="",aTablas:={}, n:=0, cCmdSql
if oMySQL:TableExist( "kardex" )
MsgInfo("Tabla KARDEX ya existe, VAMOS A BORRARLA...")
oMySQL:DeleteTable("KARDEX")
endif
if oMySQL:TableExist( "kardex" )
MsgInfo("no la borro...")
else
MsgInfo("efectivamente, fue borrada..")
endif
cCmdSql:= "CREATE TABLE IF NOT EXISTS kardex (" +;
"INGRESO NUMERIC(12,2) NULL DEFAULT 0 COMMENT 'Entradas'," +;
"EGRESO NUMERIC(12,2) NULL DEFAULT 0 COMMENT 'Salidas'," +;
"SALDO NUMERIC(12,2) NULL DEFAULT 0 COMMENT 'Saldo Actual' )" +;
"ENGINE = InnoDB COMMENT 'kardex';"
oMySQL:Query(cCmdSql)
IF oMySQL:lError
MsgInfo( "No se pudo crear la tabla, verifique..." )
ELSE
MsgInfo( "Tabla ha sido creada de nuevo..." )
ENDIF
//Comprobando las tablas que existen
aTablas:=oMySQL:ListTables()
For n:=1 to len(aTablas)
if n > 1
cTablas+=", "+aTablas[n]
else
cTablas+=aTablas[n]
endif
Next
MsgInfo(cTablas,"Tablas encontradas")
//Agregando (insertando) algunos registros en la tabla
cCmdSql := "INSERT INTO KARDEX (INGRESO,EGRESO) VALUES(100.10, 50.50);"
oMySQL:Query( cCmdSql )
cCmdSql := "INSERT INTO KARDEX (INGRESO,EGRESO) VALUES(200.10, 20.50);"
oMySQL:Query( cCmdSql )
cCmdSql := "INSERT INTO KARDEX (INGRESO,EGRESO) VALUES(300.10, 30.50);"
oMySQL:Query( cCmdSql )
cQuery := "SELECT * FROM kardex" // WHERE cod_producto = '20071121223230' ORDER BY num_movimiento LIMIT 500"
oDatos := oMySQL:Query(cQuery , .t. )
//Comprobando si hay registros
Msginfo("Registros en KARDEX: "+str(oDatos:Reccount()))
If oDatos:RecCount() == 0 && si no tiene datos...
oDatos:End()
MsgInfo("No hay registros")
Return(Nil)
EndIf
DEFINE DIALOG oDlg FROM 2,2 TO 26,70 TITLE "FWH + HARBOUR + TMySQL + MySQL"
//ESTA ES LA PARTE QUE NO FUNCIONA
@2,2 LISTBOX oLbx ;
FIELDS MyCampo(oDatos, "ingreso"), ;
MyCampo(oDatos, "egreso"), ;
MyCampo(oDatos, "saldo") ;
HEADERS "Ingresos","Egresos","Saldo" ;
SIZES 80, 80, 80 ;
SIZE 200,100;
OF oDlg
//Y ESTA LA PUEDES MOSTAR?
//MySetbrowse(oLbx, oDatos ) // importante para la navegacion
ACTIVATE DIALOG oDlg CENTER
Return(nil)
//Esta funcion permite manejar las tablas aun sin datos
//-----------------------------------------
Function MyCampo(oBjeto, nCampo, nEnt, nDec)
local cCampo, cRet, nCol, nCont, cField, nPos
If VALTYPE(nCampo) = "C" // vino el nombre de un campo
nCampo := ALLTRIM(nCampo)
nPos := oBjeto:FieldPos(nCampo)
If nPos = 0 // no existe en campo en mencion
Msginfo("No Existe el Campo Indicado <" + nCampo + ">", "Error")
Return("")
Endif
Else
nPos := nCampo
EndIf
DO CASE
CASE oBjeto:FieldType(nPos) = "N"
cCampo := 0
CASE oBjeto:FieldType(nPos) = "C"
cCampo := ""
CASE oBjeto:FieldType(nPos) = "L"
cCampo := ".f."
CASE oBjeto:FieldType(nPos) = "D"
cCampo := CTOD(" / / ")
OTHERWISE
cCampo := ""
ENDCASE
If oBjeto:RecCount() = 0
Return(cCampo)
EndIF
*mSGINFO("Posic campo: "+alltrim(str(nPos))+" tipo campo: "+ oBjeto:FieldType(nPos))
mSGINFO( "Posic campo: "+alltrim(str(nPos))+" tipo campo: "+ ValType(oBjeto:FieldGet(nPos)) )
//Omití esto para ver, porque siempre es "U"
*IF oBjeto:FieldType(nPos) = "U"
* Return(cCampo)
*EndIf
cCampo := oBjeto:FieldGet(nPos)
msginfo(cCampo+" "+valtype(cCampo)) //aqui se ven bien los valores (tipo caracter)
Return(cCampo)
Saludos
Francisco J. Alegría P.
Chinandega, Nicaragua.
Fwxh-MySql-TMySql
Chinandega, Nicaragua.
Fwxh-MySql-TMySql
- FranciscoA
- Posts: 2163
- Joined: Fri Jul 18, 2008 1:24 am
- Location: Chinandega, Nicaragua, C.A.
Re: Un ejemplo de MySql+Sql+xHarbour
Gabo???
Francisco J. Alegría P.
Chinandega, Nicaragua.
Fwxh-MySql-TMySql
Chinandega, Nicaragua.
Fwxh-MySql-TMySql
- Willi Quintana
- Posts: 1025
- Joined: Sun Oct 09, 2005 10:41 pm
- Location: Cusco - Perú
- Contact:
Re: Un ejemplo de MySql+Sql+xHarbour
Aqui va,,,
Salu2
FUNCTION MySetBrowse( oBrw,oTable )
if ValType( oBrw ) != "O" .or. ValType( oTable ) != "O"
RETURN (NIL)
else
oBrw:bGoTop := { || oTable:Gotop() }
oBrw:bGoBottom := { || oTable:GoBottom() }
oBrw:bSkip := { | n | oTable:Skip(n) }
oBrw:bBof := { | n | oTable:Bof() }
oBrw:bEof := { | n | 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()
endif
return (NIL)
//**
Salu2
FUNCTION MySetBrowse( oBrw,oTable )
if ValType( oBrw ) != "O" .or. ValType( oTable ) != "O"
RETURN (NIL)
else
oBrw:bGoTop := { || oTable:Gotop() }
oBrw:bGoBottom := { || oTable:GoBottom() }
oBrw:bSkip := { | n | oTable:Skip(n) }
oBrw:bBof := { | n | oTable:Bof() }
oBrw:bEof := { | n | 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()
endif
return (NIL)
//**
- FranciscoA
- Posts: 2163
- Joined: Fri Jul 18, 2008 1:24 am
- Location: Chinandega, Nicaragua, C.A.
Re: Un ejemplo de MySql+Sql+xHarbour
Gracias, Willi. Voy a probarlo.
Saludos.
Saludos.
Francisco J. Alegría P.
Chinandega, Nicaragua.
Fwxh-MySql-TMySql
Chinandega, Nicaragua.
Fwxh-MySql-TMySql
-
- Posts: 36
- Joined: Fri May 22, 2015 4:05 pm
Re: Un ejemplo de MySql+Sql+xHarbour
Hola, estoy tratando de compilar con version Fwh 2402, con xharbour, el ejemplo Mysql1, y falta TMYsqlServer():, en que libreria se encuentra dicha clase, desde ya muchisimas Gracias, quiero cambiar mis desarrollos de Advantage a Mysql