by 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