Con el cambio que me comentan al parecer está funcionando el obtener los datos correctamente, pero ahora la duda por qué se se detiene después de leer las primeras 4 filas.
Éste es el código hasta el momento:
Code: Select all
#include "hmg.ch"
#xcommand TRY => BEGIN SEQUENCE WITH {| oErr | Break( oErr ) }
#xcommand CATCH [<!oErr!>] => RECOVER [USING <oErr>] <-oErr->
#xcommand FINALLY => ALWAYS
FUNCTION Main()
LOCAL lastRow
LOCAL oErr, oErrRS
LOCAL oCnn, oRs
LOCAL oExcel, cQry
LOCAL oWorkBook, oHoja, nFilas
LOCAL i
LOCAL codigo, descripcion, costo, precio
LOCAL cTime := Time()
LOCAL numRows
LOCAL numColumns
LOCAL aExcel := {}
LOCAL cEnde
LOCAL nRow
LOCAL j
IF ( oCnn := win_OleCreateObject( "ADODB.Connection" ) ) == NIL
? 'No es posible crear objeto conexión, ' + win_OleErrorText()
RETURN NIL
ENDIF
TRY
oCnn:Open( "Provider=SQLNCLI11;Server=JPARADA\COMPAC;Database=adMI_EMPRESA;Uid=sa;Pwd=sapito;" )
CATCH oErr
? "Error al intentar conectar a la base de datos " + e"\n" + hb_StrToUtf8(oErr:Description)
RETURN NIL
END
//aquí RecordSet
//oRs := win_OleCreateObject( "ADODB.Recordset" )
//
IF ( oExcel := win_oleCreateObject( "Excel.Application" ) ) == NIL
? 'Error: Microsoft Excel no está disponible, ', win_OleErrorText()
RETURN NIL
ENDIF
oExcel:Visible := .F.
oExcel:Application:DisplayAlerts := .F.
oExcel:Application:Workbooks:open( "C:\desarrollo_hmg\actualizar_precios_hmg\lista_precios_2020.xlsx" )
oWorkBook := oExcel:activeWorkBook
oExcel:Application:Worksheets(1):activate()
oSheet := oExcel:Worksheets(1):cells
//oWorkBook:WorkSheets(1):usedRange:Select // ***** ERROR ***** //
//numRows := oWorkBook:workSheets(1):usedRange:Rows:Count
//numColumns := oWorkBook:workSheets(1):usedRange:Columns:Count
numRows := 2091
numColumns := 4
FOR i := 1 TO numRows
AADD( aExcel, Array(numColumns) )
NEXT
cEnde := DataToChr(numColumns)
aExcel := oSheet:Range( "A2:"+cEnde+LTrim(Str(numRows)) ):Value
//? ValtoPrg( aExcel )
FOR j:=1 TO Len(aExcel)
codigo := aExcel [1][j]
descripcion := aExcel [2][j]
costo := aExcel [3][j]
precio := aExcel [4][j]
? 'Registro ' + Alltrim( Str(j) )
? hb_utf8ToStr('Código: ') + codigo
? hb_utf8ToStr('Descripción: ') + descripcion
? 'Costo: ' + str(costo)
? 'Precio: ' + str(precio)
cQry := "UPDATE admProductos SET " + ;
"cprecio1 = " + DataToSQL(precio) + ", " + ;
"cprecio2 = " + DataToSQL(precio) + ", " + ;
"cprecio3 = " + DataToSQL(precio) + ", " + ;
"cprecio4 = " + DataToSQL(precio) + ", " + ;
"cprecio5 = " + DataToSQL(costo) + ", " + ;
"cprecio6 = " + DataToSQL(precio) + ", " + ;
"cprecio7 = " + DataToSQL(precio) + ", " + ;
"cprecio8 = " + DataToSQL(precio) + ", " + ;
"cprecio9 = " + DataToSQL(precio) + ", " + ;
"cprecio10 = " + DataToSQL(precio) + " " + "WHERE ccodigoproducto = " + DataToSQL(codigo)
//MsgInfo( cQry )
QOut( cQry )
//?
//?
//HB_TimeSleep( 0.10 )
/*
TRY
oCnn:Execute( cQry )
CATCH oErrRS
? "Error al actualizar datos en la tabla" + e"\n" + hb_StrToUtf8(oErrRS:Description)
RETURN .F.
END
*/
NEXT
oExcel:Quit()
?
? "Todo OK, Tiempo transcurrido : " + ElapTime( cTime, time() )
?
//cerrar conexión y recordset (si es que utilizamos RecordSet)
oCnn:Close()
oCnn := NIL
// RecordSet
//oRS:Close()
//oRS := NIL
RETURN NIL
/*******/
Saludos,
Javier