Hola, tengo una función que toma un excel y lo convierte a cursor de fox via ODBC.
Esta funciona correctamente en los siguientes entornos: windows 7 con office instalado windows 2k3 con AccessDatabaseEngine2010 instalado pero no me funciona con w2k8 y AccessDatabaseEngine2010 instalado. El error es "el origen de datos para este objeto debe ser una referencia a variable" y este es la función que uso: FUNCTION excelACursor LPARAMETERS lcXLBook as String, lcSheet as String, lcCursor as String LOCAL lcXLBook AS STRING, lnSQLHand AS INTEGER, ; lcSQLCmd AS STRING, lnSuccess AS INTEGER, ; lcConnstr AS STRING SET NULLDISPLAY TO '' lcSheet = '[' + lcSheet + '$]' lcCursor = 'cur' + lcCursor lcConnstr = [Driver=] + ; [{Microsoft Excel Driver (*.xls, *.xlsx, *.xlsm, *.xlsb)};] + ; [DBQ=] + lcXLBook IF !FILE( lcXLBook ) MESSAGEBOX('No se encontro el archivo Excel ' + lcXLbook + '. ', 16,'') RETURN .F. ENDIF lnSQLHand = SQLSTRINGCONNECT( lcConnstr ) IF lnSQLHand <= 0 && agrego = 0 ** 18/03/2015 MESSAGEBOX('No se pudo establecer la conexión con el archivo Excel '+ lcXLbook + '. ', 16,'') RETURN .F. ENDIF lcSQLCmd = [Select * FROM ] + lcSheet lnSuccess = SQLEXEC( lnSQLHand, lcSQLCmd, [xlResults] ) IF lnSuccess <= 0 LOCAL ARRAY laErr[1] AERROR( laErr ) MESSAGEBOX( 'No se pudo extraer datos del archivo.'+CHR(13)+'Error: ' + laErr(3),16,'') SQLDISCONNECT( lnSQLHand ) RETURN .F. ENDIF *** Transformo memo en string SELECT xlResults cSql = "" = AFIELDS(aFlds) FOR i = 1 TO ALEN(aFlds,1) cSql = cSql + IIF(EMPTY(cSql),"",",") + IIF(aFlds[i,2]='M', "LEFT(" + aFlds[i,1] + ",50) "+ aFlds[i,1], aFlds[i,1]) ENDFOR *** SELECT &csql FROM xlResults INTO CURSOR &lcCursor READWRITE USE IN xlResults SELECT &lcCursor SQLDISCONNECT( lnSQLHand ) RETURN .t. Alguna idea que puede ser? Gracias, saludos