Un ejemplo de MySql+Sql+xHarbour

Un ejemplo de MySql+Sql+xHarbour

Postby FranciscoA » Thu Jun 04, 2009 9:33 pm

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
Francisco J. Alegría P.
Chinandega, Nicaragua.

Fwxh-MySql-TMySql
User avatar
FranciscoA
 
Posts: 2112
Joined: Fri Jul 18, 2008 1:24 am
Location: Chinandega, Nicaragua, C.A.

Re: Un ejemplo de MySql+Sql+xHarbour

Postby gabo » Thu Jun 04, 2009 9:57 pm

Francisco,
A que cuenta de correo te puedo enviar un ejemplo completo de FWH + TMySql + xHarbour
Saludos
GABO
gabo
 
Posts: 126
Joined: Tue Jan 03, 2006 8:31 pm

Re: Un ejemplo de MySql+Sql+xHarbour

Postby FranciscoA » Thu Jun 04, 2009 11:48 pm

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
User avatar
FranciscoA
 
Posts: 2112
Joined: Fri Jul 18, 2008 1:24 am
Location: Chinandega, Nicaragua, C.A.

Re: Un ejemplo de MySql+Sql+xHarbour

Postby Willi Quintana » Fri Jun 05, 2009 3:08 am

Hola,,, El el Blog de William puse un ejemplo de TWBROWSE con MySQL,,,,
date una vuelta por alli
Salu2
User avatar
Willi Quintana
 
Posts: 1002
Joined: Sun Oct 09, 2005 10:41 pm
Location: Cusco - Perú

Re: Un ejemplo de MySql+Sql+xHarbour

Postby FranciscoA » Fri Jun 05, 2009 6:24 pm

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
Francisco J. Alegría P.
Chinandega, Nicaragua.

Fwxh-MySql-TMySql
User avatar
FranciscoA
 
Posts: 2112
Joined: Fri Jul 18, 2008 1:24 am
Location: Chinandega, Nicaragua, C.A.

Re: Un ejemplo de MySql+Sql+xHarbour

Postby FranciscoA » Sun Jun 07, 2009 4:54 am

Gabo???
Francisco J. Alegría P.
Chinandega, Nicaragua.

Fwxh-MySql-TMySql
User avatar
FranciscoA
 
Posts: 2112
Joined: Fri Jul 18, 2008 1:24 am
Location: Chinandega, Nicaragua, C.A.

Re: Un ejemplo de MySql+Sql+xHarbour

Postby Willi Quintana » Mon Jun 08, 2009 1:05 am

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)
//**
User avatar
Willi Quintana
 
Posts: 1002
Joined: Sun Oct 09, 2005 10:41 pm
Location: Cusco - Perú

Re: Un ejemplo de MySql+Sql+xHarbour

Postby FranciscoA » Mon Jun 08, 2009 1:48 am

Gracias, Willi. Voy a probarlo.
Saludos.
Francisco J. Alegría P.
Chinandega, Nicaragua.

Fwxh-MySql-TMySql
User avatar
FranciscoA
 
Posts: 2112
Joined: Fri Jul 18, 2008 1:24 am
Location: Chinandega, Nicaragua, C.A.


Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: No registered users and 59 guests