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