Armando, tal como comentamos por correo-e aqui te pongo una peque帽a prueba que hice con la conexion ODBC del AS/400
//-----------------
FUNCTION TestOdbc()
//-----------------
Local oODBC,oWndOdbc,oBrw ,oDbf
DEFINE WINDOW oWndOdbc MDI CHILD FROM 2,2 TO 22,60 TITLE '('+ProcName()+") Tabla en AS/400" COLOR "B/W"
//----
oODBC := TOdbc():New("haprot01" ) //no paso Usr ni Psw pq la sesion ya esta abierta
//haprot01->Nombre del origen de datos que apunta al AS/400 via Client Access ODBC
If !oOdbc:lSuccess
oOdbc:ShowErrorList("ODBC session not successfully initialized, aborting...")
oOdbc:End()
return nil
Endif
oDbf := oOdbc:Query( "SELECT CliCod,CliNomFis FROM HAPROT01F.client" )
// biblioteca.fichero
// puedes hacer select de ficheros fisicos, logicos o joins. O juntarlos en la propia sentencia SQL
oDbf:PrimaryKeys({'CliCod'})//Le asigno la clave manualmente, pq el ODBC del AS/400 no la devuelve
//Necesario si queremos hacer actualizaciones
if oOdbc:IsError()
oOdbc:ShowErrorList()
oOdbc:aErrors := {}
oDbf:End()
return nil
endif
oDbf:Open()
oDbf:Complete()
oDbf:GoTop()
//------
oBrw := TXBrowse():New(oWndOdbc)
oBrw:nMarqueeStyle := MARQSTYLE_HIGHLROW
oBrw:nColDividerStyle := LINESTYLE_BLACK
oBrw:lColDividerComplete := .T.
oCol:= oBrw:AddCol()
oCol:bStrData:= {|| Str(oDbf:CliCod) }
oCol:cHeader := 'Cod'
oCol:= oBrw:AddCol()
oCol:bStrData:= {|| oDbf:CliNomFis }
oCol:cHeader := 'Nombre Fiscal'
oBrw:SetRDD()
oBrw:CreateFromCode()
oWndOdbc:oClient := oBrw
oBrw:SetFocus()
ACTIVATE WINDOW oWndOdbc VALID (oDbf:END(),.T.)
/* Un test para probar si grababa correctamente en AS/400, todo OK.
oDbf:AddNew()
oDbf:CliCod :=18
oDbf:CliNomFis:='Grabado desde Harbour'
oDbf:Update() */
RETURN NIL