Page 1 of 1

Error al intentar un MOVEFIRST()

Posted: Thu Oct 09, 2008 1:40 am
by Laurel
Hola a todos!

Ya hacia mucho que no me atoraba con ADO, pero ya tengo dos dias con el problema. Estoy grabando en una tabla y despues de pasar 5 veces y grabarla manda el error de:

Error description: Error adodb.recordset/16389 E_FAIL: MOVEFIRST
Args:


Ya borre la tabla y la volvia a crear, grabo todos _ requeridos, la tabla tiene valores por default, solo tengo una llave autoincremental...

la conexion es la siguiente:

oMiConexion:=TOleAuto():New("adodb.connection")

oMiConexion:Open("Driver={MySQL ODBC 3.51 Driver};server=localhost;Port=3306;Database=test;UID=myuid;pwd=mypss";DSN=prueba;OPTION=3")

de hecho si logra grabar 5 registros pero hasta ahi ya no avanzo.



Anexo la parte del codigo en donde marca error:

IF oRsNOACONT:RecordCount()>0
oRsNOACONT:Movefirst()
DO WHILE !oRsNOACONT:EOF()
IF oRsACUMENSU:Fields('EM_CODICIA'):Value=oRsNOACONT:Fields('EM_CODICIA'):Value .AND. ;
oRsACUMENSU:Fields('MP_CODPROC'):Value=oRsNOACONT:Fields('MP_CODPROC'):Value .AND. ;
ALLTRIM(MAYOR)= ALLTRIM(oRsNOACONT:Fields('COD_MAY_CO'):Value) .AND. ;
ALLTRIM(CUENTA)=ALLTRIM(oRsNOACONT:Fields('COD_CTA_CO'):Value) .AND. ;
ALLTRIM(SUBCTA)=ALLTRIM(oRsNOACONT:Fields('COD_SUB_CO'):Value)

oRsNOACONT:Fields('COD_IMP_CO'):Value=oRsNOACONT:Fields('COD_IMP_CO'):Value+oRsACUMENSU:Fields('AP_IMPXPER'):Value

EXIT
ENDIF

oRsNOACONT:MoveNext()
ENDDO
ENDIF

Posted: Thu Oct 09, 2008 2:03 am
by Armando
Laurel:

Los expertos recomiendan no usar RECORDCOUNT() en su lugar debes usar IFs.

Code: Select all

IF oRsNOACONT:BOF() .AND. oRsNOACONT:EOF()
// El record set esta vacio
ELSE
    IF oRsNOACONT:MOVEFIRST()
    DO ....
        oRsNOACONT:MOVENEXT()
    ENDDO
ENDIF
Saludos

Posted: Thu Oct 09, 2008 2:05 am
by Armando
Laurel:

Disculpa, puse un if extra.

Code: Select all

IF oRsNOACONT:BOF() .AND. oRsNOACONT:EOF()
// El record set esta vacio
ELSE
    oRsNOACONT:MOVEFIRST()
    DO ....
        oRsNOACONT:MOVENEXT()
    ENDDO
ENDIF
Saludos

Posted: Thu Oct 09, 2008 4:10 pm
by Laurel
Armando:

Gracias por contestar... ya hice lo que me indicaste pero sigo en lo mismo... de hecho es una actualización de datos... si hay información trato de sumarle a lo que ya tiene y sigue con el error... ya me desesperé... tengo 3 días en esto e intento y no logro hacer que funcione


Saludos

Posted: Thu Oct 09, 2008 6:57 pm
by Armando
Laurel:

Veo que aún sigues con el switch de las DBFs :( , trata de usar comandos
SQL, aqui te va un ejemplo:

Code: Select all

	IF oRsOdc:EOF .AND. oRsOdc:BOF
		MsgInfo("La tabla HDRODC esta vacia !",oApp:cAplicacion)
	ELSE
		oRsOdc:MoveFirst()
		DO WHILE !  oRsOdc:EOF()
			cCmdSql	:= "UPDATE " +;
								"proyecto " +;
							"SET " +;
								"PRO_AUT = 1 " +;
							"WHERE " +;
								"PRO_PRO = " + "'" + oRsOdc:Fields("HDR_PRO"):Value + "'"
			TRY
				oApp:oCon:Execute(cCmdSql)
			CATCH oError
				MsgInfo("No pude ejecutar el comando " + cCmdSql,oApp:cAplicacion)
				EXIT
			END
			oRsOdc:MoveNext()
		ENDDO
	ENDIF
Saludos

Posted: Fri Oct 10, 2008 3:32 am
by Laurel
Funciono!!!

Muchas Gracias Armando!! ya funcionó... Lo raro es que tengo ya muchos programas que funcionan bien con oRs:Fields('micampo'):value:= oRs:Fields('micampo'):Value+9999.99 y no había tenido problema... uff

Mil gracias de nuevo :D