【发布时间】:2017-11-02 01:45:37
【问题描述】:
我正在开发 Foxpro 9 程序。我有一个连接到 Excel 并带回列信息的功能。在 Foxpro 中运行,这按预期工作。但是,当运行构建的可执行文件时,会显示一个 Windows 的“选择数据源”对话框,提供文件或机器数据源选项。选择正确的也不起作用,但无论如何我不想要对话。
这是在 64 位 Windows 8 中运行的,但我也在 32 位中进行了测试。具有 Excel 功能的程序文件内置于可执行文件中。谁能告诉我为什么构建的程序运行不同?
RELEASE aCols
DIMENSION aCols(1)
AWorkSheetColumns(@aCols, m.tmpFile, m.tmpSheet, "DSN=Microsoft Excel Driver")
**********************************
FUNCTION AWorkSheetColumns(taArray, tcXLSFile, tcSheet, tnDSN)
**********************************
**********************************
* PARAMETER Information
* taArray := an array sent in by reference to fill with the specified worksheet's column information
* tcXLSFile := a string specifying an excel file (*.xls, *.xlsx, *.xlsm, *.xlsb) on disk
* tcSheet := a string specifying the worksheet or table to use when retrieving column information
*
* RETURN Information
* returns numeric, the number of columns found in the worksheet/table
**********************************
LOCAL lnSQL, laErr[1], lnResult, lnReturn, lcSQLAlias, loExc
m.lnReturn = 0
IF !EMPTY(m.tnDSN)
m.lnSQL = SQLSTRINGCONNECT(m.tnDSN+ ";" ;
+"DBQ="+FULLPATH(m.tcXLSFile)+";")
ELSE
m.lnSQL = SQLSTRINGCONNECT("Driver={Microsoft Excel Driver (*.xls, *.xlsx, *.xlsm, *.xlsb)};" ;
+"DBQ="+FULLPATH(m.tcXLSFile)+";")
ENDIF
*!* Alternate using DSN that comes with Office install (MSDASQL = OLEDB wrapper for ODBC)
*!* m.lnSQL = SQLSTRINGCONNECT("Provider=MSDASQL.1;" ;
*!* +"Persist Security Info=False;" ;
*!* +"DSN=Excel Files;" ;
*!* +"DBQ="+FULLPATH(m.tcXLSFile)+";" ;
*!* +"DriverId=790;" ;
*!* +"MaxBufferSize=2048;" ;
*!* +"PageTimeout=5;")
*!* Try a few other drivers that may be on the user's machine
IF m.lnSQL < 0
IF UPPER(ALLTRIM(JUSTEXT(m.tcXLSFile))) == "XLS" && can we try using the older driver?
m.lnSQL = SQLSTRINGCONNECT("Driver={Microsoft Excel Driver (*.xls, *.xlsx, *.xlsm, *.xlsb)};" ;
+ "DBQ="+FULLPATH(m.tcXLSFile)+";")
IF m.lnSQL < 0
m.lnSQL = SQLSTRINGCONNECT("Driver={Microsoft Excel Driver (*.xls)};" ;
+ "DBQ="+FULLPATH(m.tcXLSFile)+";")
ENDIF
ELSE
m.lnSQL = SQLSTRINGCONNECT("Driver={Microsoft Excel Driver (*.xls, *.xlsx, *.xlsm, *.xlsb)};" ;
+ "DBQ="+FULLPATH(m.tcXLSFile)+";")
ENDIF
IF m.lnSQL < 0
AERROR(m.laErr)
ERROR m.laErr[2]
ENDIF
ENDIF
m.lcSQLAlias = SYS(2015)
m.lnResult = SQLEXEC(m.lnSQL,[SELECT * FROM "] + m.tcSheet + [$" Where 1=0], m.lcSQLAlias)
IF m.lnSQL > 0
SQLDISCONNECT(m.lnSQL)
ENDIF
IF m.lnResult < 0
AERROR(m.laErr)
ERROR m.laErr[2]
ENDIF
IF USED(m.lcSQLAlias)
TRY
m.lnReturn = AFIELDS(m.taArray, m.lcSQLAlias)
CATCH TO m.loExc
THROW
FINALLY
USE IN SELECT(m.lcSQLAlias)
ENDTRY
ENDIF
RETURN m.lnReturn
ENDFUNC
【问题讨论】:
标签: foxpro