Tengo el siguiente código:
Code: Select all
temporal->(dbGotop())
//aDatos:=AddRegistro( "DET_NOTA_VENTA")
DO WHILE !temporal->(Eof())
aDatos:=AddRegistro( "DET_NOTA_VENTA")
IF aDatos[1]
aDatos[3]:AddNew()
aDatos[3]:Fields( "idnotadeventa"):value:=nIdNotadeVenta
aDatos[3]:Fields( "idproducto"):value:=temporal->idproducto
aDatos[3]:Fields( "pventa"):value:=temporal->pventa
aDatos[3]:Fields( "cantidad"):value:=temporal->cantidad
aDatos[3]:Fields( "total"):value:=temporal->total
TRY
aDatos[3]:Update()
CATCH oError
MsgStop( oError:Description, "Error")
END
TRY
aDatos[3]:Close()
CATCH oError
lError:=.T.
MsgStop( "Se ha producido un error al agregar el Detalle", "ERROR:Linea 992")
END
aDatos[2]:Close()
ELSE
aDatos[2]:Close()
MsgStop( "Se ha producido un error al agregar el Detalle", "ERROR:Linea 997")
lError:=.T.
ENDIF
IF lError
EXIT
ENDIF
temporal->(dbSkip())
ENDDO
/*aDatos[3]:Update()
TRY
aDatos[3]:Close()
CATCH oError
lError:=.T.
MsgStop( "Se ha producido un error al agregar el Detalle", "ERROR:Linea 1022")
END
aDatos[2]:Close()*/
Code: Select all
FUNCTION AddRegistro( cTabla)
LOCAL lOK:=.T., aResultados:=Array(3)
LOCAL oCon, oError, oDatos
TRY
oCon:=toleauto():new("adodb.connection")
CATCH oError
MsgStop( "Línea 125: Error al crear la conexión" + CRLF + ;
"Sql()", "rutinasdeconexion.prg")
lOK:=.F.
END
IF lOk
oCon:ConnectionString:="Provider=OraOLEDB.Oracle;Data Source=192.168.0.150:1521/xe;User ID=usuario;Password=password;"
oCon:ConnectionTimeout:=3600
TRY
oCon:Open()
CATCH oError
lOK:=.F.
END
IF lOk
TRY
oDatos:=TOleAuto():New("adodb.recordset")
CATCH oError
lOK:=.F.
oDatos:=NIL
END
IF lOk
oDatos:CursorLocation := adUseClient //adUseServer
//oDatos:CursorLocation := adUseServer
oDatos:LockType := adLockOptimistic
oDatos:CursorType := adOpenKeyset
oDatos:Source := cTabla
oDatos:ActiveConnection(oCon)
TRY
oDatos:Open()
CATCH oError
lOK:=.F.
END
ENDIF
ENDIF
ENDIF
aResultados[1]:=lOk
aResultados[2]:=oCon
aResultados[3]:=oDatos
RETURN aResultados
1.- Cuando agrego un único registro el proceso funciona espectacular!!.
2.- Si este mismo proceso lo realiza para más de un registro que tenga en una .DBF se cae y solamente me guarda en el servidor el primer registro. O sea, cuando utilizo el :addnew() más de una vez, el :update() falla.
3.- Intenté colocando la llamada a la función fuera del do while y solamente utilizando el addnew() y el update() dentro del do while y falló.
4.- Intenté lo mismo que en el punto 3, pero colocando el update() después del do while e igual se cae.
Intenté jugando con los valores de oDatos:CursorLocation y nada.
Agradeceré si me pueden ayudar. Debo estar pasando algo por alto.
Saludos y gracias
David Lagos S.
Coquimbo-Chile