A expertos en FWH+xHarbour+TMySql
Posted: Wed Jun 10, 2009 8:33 pm
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
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