Entrar
¿Usuario nuevo? Regístrate
eagle1 · Eagle1 usuarios
? ¿Ya estás suscrito? Entrar en Yahoo!

Consejos de Yahoo! Grupos

¿Sabías que...?
Puedes determinar el orden de los mensajes. Pulsa el enlace en la columna correspondiente a la fecha. Tus preferencias serán guardadas y no tendrás que introducirlas de nuevo.

Mensajes

  Mensajes Ayuda
Avanzado
error de Harbour con FieldGet()   Lista de mensajes  
Responder | Reenviar Mensaje #1561 de 1683 |
Re: [eagle1] error de Harbour con FieldGet()

Moisés no dices qué versión de Eagle1 usas, pero aún así creo que estás
abriendo la tabla dos veces:

una aquí....

// Obtengo Total Registros---
-------------------------------
// Seleccionamos la TABLA LIBROS---------------------------
oTb := TMSTable():New( oMySql, AllTrim(cTablaCliente) )
if !oTb:Open() // si no se abre
MsgStop( "No se puede abrir la tabla: " + cTablacliente,
"Operación Cancelada" )
RETURN Nil
else
// Contamos total de Registros
nTotal := oTb:RecCount()
msgalert(ntotal)
endif

y otro aqui:


// Control de Tabla-------------------------------------------
//oTb:Blank()
if !oTb:Open() // si no se abre
MsgStop( "No se puede abrir la tabla: " + cTablacliente, "Operación
Cancelada" )
DbCloseAll()
QUIT
endif

Porqué lo haces?
Eso por un lado y por otro deberías comprobar que hay datos en la tabla.
Yo haría:
if oTb:RecCount() > 0
oTb:GoTop()
while !oTb:Eof()
REPLACE CLIENTES->CAMPO01 WITH oTb:FieldGet( 1 )
REPLACE CLIENTES->CAMPO02 WITH oTb:FieldGet( 2 )
REPLACE CLIENTES->NOMBRE WITH oTb:FieldGet( 9
)+space(1)+oTb:FieldGet( 10 )+space(1)+oTb:FieldGet( 8 )
REPLACE CLIENTES->NIF WITH oTb:FieldGet( 11 )
REPLACE CLIENTES->DIRECCION WITH oTb:FieldGet( 17 )
REPLACE CLIENTES->POBLACION WITH oTb:FieldGet( 19 )
REPLACE CLIENTES->TELEFONO WITH oTb:FieldGet( 21 )
REPLACE CLIENTES->BANCO WITH oTb:FieldGet( 37 )
REPLACE CLIENTES->OFICINA WITH oTb:FieldGet( 38 )
REPLACE CLIENTES->SUCURSAL WITH oTb:FieldGet( 39 )
REPLACE CLIENTES->DC WITH oTb:FieldGet( 40 )
REPLACE CLIENTES->CUENTA WITH oTb:FieldGet( 41 )
REPLACE CLIENTES->DIR_BANCO WITH oTb:FieldGet( 42 )
REPLACE CLIENTES->POB_BANCO WITH oTb:FieldGet( 43 )
if oTb:FieldGet( 45 ) = 1 // Caja
REPLACE CLIENTES->FPAGO WITH "Caja"
else
REPLACE CLIENTES->FPAGO WITH "Domiciliación"
endif

// Avanzamos registro
oTb:Skip( 1 )
oMeter:SetPos( cActual )
cActual++
Sysrefresh()
end //while

Por cierto no puedes incrementar n dentro de un bucle FOR NEX cuyo
inicio es el propio n

Mírate el ejemplo mstodbf.prg que hay en BIN que te transcribo aquí por
que es cortito:

//---------------------------------------------------------------------------//
// AUTOR.....: Manuel Expósito Suárez Soft4U
2002-2006 //
// eMail.....:
manuexposito@... //
// CLASE.....:
MsToDBF //
// FECHA MOD.:
11/12/2006 //
// VERSION...:
5.02 //
// PROPOSITO.: Pasa una tabla de MySQL a una
DBF //
//---------------------------------------------------------------------------//

#include "util.ch"
#include "inKey.ch"

//----------------------------------------------------------------------------//

function main( cIP, cUser, cPwd )

local oCon, oDb, oTb
local GetList, n, nFldCount, aDB, aTb
local cDb := space( 30 )
local cTb := space( 30 )
local i := 0

cls

DEFAULT cIP := "127.0.0.1"
DEFAULT cUser := "root"
DEFAULT cPwd := "root"

// Creamos el objeto conexion:
oCon := TMSConnect():New()

// Nos conectamos y comprobamos si se ha establecido la conexion:
if !oCon:Connect( cIP, cUser, cPwd )
Alert( "No se ha establecido la conexion" )
// Liberamos memoria
oCon:Close()
return( nil )
endif

oCon:SetAutoError( .f. )

DispBox( 3, 9, 21, 71 )

@ 2, 9 SAY "Bases de Datos de la conexion " + oCon:cHost + ":"

aDB := oCon:ListDataBases()
cDb := aDB[ AChoice( 4, 10, 20, 70, aDB ) ]
oDb := oCon:DataBaseByName( cDb, .t. ) // Creamos y seleccionamos
el objeto DB

cls

@ 2, 9 SAY "Tablas de la Base de Datos " + upper( cDb ) + ":"
DispBox( 3, 9, 21, 71 )
aTb := oDb:ListTables()
cTb := aTb[ AChoice( 4, 10, 20, 70, aTb ) ]

oTb := TMSTable():New( oCon, cTb )

cls
@ 10, 10 SAY "Cargando informacion desde el servidor"
@ 12, 10 SAY "Espere hasta completar el proceso... "

oTb:Open()
oTb:SetReadMemoAll( .t. )

if oTb:RecCount() > 0
DbCreate( oTb:cName, oTb:Struct() )
DbUseArea( .t.,, oTb:cName )

cls
@ 10, 10 SAY "Cargando a la DBF desde el cliente"
@ 12, 10 SAY "Espere hasta completar el proceso... "

nFldCount := oTb:FieldCount()

@ 10, 10 SAY "Ejecutando..."

oTb:GoTop()

@ 10, 10 SAY "Tratando registro: " + StrNum( ++i )

DbAppend()

FOR n := 1 TO nFldCount
FieldPut( n, oTb:FieldGet( n ) )
NEXT

while oTb:Fetch()
@ 10, 10 SAY "Tratando registro: " + StrNum( ++i )

DbAppend()

FOR n := 1 TO nFldCount
FieldPut( n, oTb:FieldGet( n ) )
NEXT
end

DbCommit()
DbGoTop()

if Alert( "Se han pasado " + AllTrim( str( i ) ) + ;
" registros;Quieres ver la tabla?", { "Si", "No" } ) == 1
Browse()
endif

cls

@ 23, 00 SAY "Se termino... "

DbCloseArea()
endif

Inkey( 100 )

oTb:Free()
oCon:Free()


return( nil )

//----------------------------------------------------------------------------//


Saludos





Moisés Barrio escribió:
> Hola a todos:
>
> Uso FW 8.09, Harbour 1.0 y el siguiente código genera el error adjunto
> al hacer FieldGet( 1). No se qué hago mal. Muchas gracias por la ayuda.
>
> Un saludo,
>
> Moisés
>
>
>
> // Conexión SQL-----------------------------------------------
> oMySql := TMSConnect():New()
> IF oMySql:lInit
> MsgInfo( "Sistema SQL inicializado correctamente", " Motor SQL " )
> ENDIF
> Sysrefresh()
>
> IF !oMySql:Connect( cServidor, cLogin, cPass, cBaseCliente ) //
> servidor MYSQL
> MsgStop( "ERROR: No hay conexión con la Base de Datos
> "+AllTrim(cTablaCliente)+"."+CRLF+"La operación no ha sido realizada.
> Posiblemente, no hay acceso a Internet.", " ERROR Motor SQL " )
> DbCloseALL()
> quit
> ENDIF
> // -----------------------------------------------------------
>
>
> // Obtengo Total Registros----------------------------------
> // Seleccionamos la TABLA LIBROS---------------------------
> oTb := TMSTable():New( oMySql, AllTrim(cTablaCliente) )
> if !oTb:Open() // si no se abre
> MsgStop( "No se puede abrir la tabla: " + cTablacliente,
> "Operación Cancelada" )
> RETURN Nil
> else
> // Contamos total de Registros
> nTotal := oTb:RecCount()
> msgalert(ntotal)
> endif
>
>
> // Pinto dialogo con barra----------------------------------
> DEFINE DIALOG oDlg RESOURCE "ESPERAR" TITLE OemToAnsi("Importando
> Datos. Por favor, espere...")
> REDEFINE PROGRESS oMeter ID 150 OF oDlg
>
> ACTIVATE DIALOG oDlg CENTERED;
> ON INIT ( oMeter:SetRange( 0, nTotal ), ;
> oMeter:SetPos( nActual ), ;
> oDlg:Hide(), ImportarDATOS( oMySql, cTablaCliente,
> oTb, oMeter, nTotal, oDlg ) )
>
> // Cierre de SQL
> oMySql:Close()
> oMySql:Free()
>
> RETURN NIL
>
//----------------------------------------------------------------------------//
>
>
>
//----------------------------------------------------------------------------//
> // IMPORTAR DATOS
> //
>
//----------------------------------------------------------------------------//
> FUNCTION ImportarDATOS( oMySql, cTablaCliente, oTb, oMeter, nTotal, oDlg )
> LOCAL cLast, lBloqueado := .F.
> LOCAL cActual := 1
> LOCAL n
>
> // Control de Tabla-------------------------------------------
> //oTb:Blank()
> if !oTb:Open() // si no se abre
> MsgStop( "No se puede abrir la tabla: " + cTablacliente,
> "Operación Cancelada" )
> DbCloseAll()
> QUIT
> endif
>
>
> // Seleccionamos Base de Datos--------------------------------
> SELECT("CLIENTES")
>
> // Controles de la BARRA--------------------------------------
> oDlg:Show()
> oDlg:SetFocus()
>
>
> // Ejecutamos la importacion----------------------------------
> FOR n := 1 TO nTotal
> APPEND BLANK
>
> MSGALERT(OTB:FIELDGET(1))
> * // aquí da el error, o en el primer REPLACE CLIENTES-> si lo quito*
>
>
> REPLACE CLIENTES->CAMPO01 WITH oTb:FieldGet( 1 )
> REPLACE CLIENTES->CAMPO02 WITH oTb:FieldGet( 2 )
> REPLACE CLIENTES->NOMBRE WITH oTb:FieldGet( 9
> )+space(1)+oTb:FieldGet( 10 )+space(1)+oTb:FieldGet( 8 )
> REPLACE CLIENTES->NIF WITH oTb:FieldGet( 11 )
> REPLACE CLIENTES->DIRECCION WITH oTb:FieldGet( 17 )
> REPLACE CLIENTES->POBLACION WITH oTb:FieldGet( 19 )
> REPLACE CLIENTES->TELEFONO WITH oTb:FieldGet( 21 )
> REPLACE CLIENTES->BANCO WITH oTb:FieldGet( 37 )
> REPLACE CLIENTES->OFICINA WITH oTb:FieldGet( 38 )
> REPLACE CLIENTES->SUCURSAL WITH oTb:FieldGet( 39 )
> REPLACE CLIENTES->DC WITH oTb:FieldGet( 40 )
> REPLACE CLIENTES->CUENTA WITH oTb:FieldGet( 41 )
> REPLACE CLIENTES->DIR_BANCO WITH oTb:FieldGet( 42 )
> REPLACE CLIENTES->POB_BANCO WITH oTb:FieldGet( 43 )
> if oTb:FieldGet( 45 ) = 1 // Caja
> REPLACE CLIENTES->FPAGO WITH "Caja"
> else
> REPLACE CLIENTES->FPAGO WITH "Domiciliación"
> endif
>
> // Avanzamos registro
> oTb:Skip( 1 )
> oMeter:SetPos( cActual )
> cActual++
> Sysrefresh()
> n++
>
> NEXT
>
> // Ejecutamos la importacion----------------------------------
> oTb:Close() // Cerramos la TABLA
>
>
>




Do, 28 de Dic, 2008 1:30 am

loloexpo
Sin conexión Sin conexión
Enviar mensaje Enviar mensaje

Reenviar Mensaje #1561 de 1683 |
Desplegar mensajes Autor Ordenar por fecha

Hola a todos: Uso FW 8.09, Harbour 1.0 y el siguiente código genera el error adjunto al hacer FieldGet( 1). No se qué hago mal. Muchas gracias por la ayuda. ...
Moisés Barrio
iepc.programacion@...
Enviar mensaje
27 de Dic, 2008
3:09 pm

Moises: Despues de abrir la tabla, y antes de manipular ningun registro ni pedir ningun fieldget() agrega: oTb:GoTop():Read() Saludos, Daniel Puente Marchione...
Daniel Puente-Grupo P...
puenteda_ar
Sin conexión Enviar mensaje
27 de Dic, 2008
5:00 pm

Daniel, Muchas gracias, pero me devuelve el siguiente errror: Application =========== Path and name: C:\DEVELOP\PROGRAMAS\RT\ICADE\icade.exe (32 bits) Size:...
Moisés Barrio
iepc.programacion@...
Enviar mensaje
27 de Dic, 2008
5:09 pm

Perdon, para tmstable(): oTb:GoTo( n ):Read() Saludos, Daniel Puente Marchione Sistemas Puerto San Julian, Pcia. Santa Cruz ... De: Moisés Barrio Para:...
Daniel Puente-Grupo P...
puenteda_ar
Sin conexión Enviar mensaje
27 de Dic, 2008
5:48 pm

Moisés no dices qué versión de Eagle1 usas, pero aún así creo que estás abriendo la tabla dos veces: una aquí.... // Obtengo Total Registros--- ... //...
Manu
loloexpo
Sin conexión Enviar mensaje
28 de Dic, 2008
1:28 am

Hola Manu: La segunda apertura de la tabla la añadí por comprobar si se habría cerrado. La quito y sigue el error. La cuestión es que: La tabla sí tiene...
Moisés Barrio
iepc.programacion@...
Enviar mensaje
8 de Ene, 2009
9:10 pm

Este mensaje lo he visto ahora, perdona!!! Estoy seguro que el error es de la DLL de MySQL o hay que reconstruir la LIB. Para ver la versión sólo tienes...
loloexpo
Sin conexión Enviar mensaje
8 de Ene, 2009
9:13 pm
Avanzado

Copyright © 2009 Yahoo! Todos los derechos reservados.
Política de Privacidad Actualizada - Condiciones del servicio - Directrices - Ayuda