【问题标题】:Foxpro failing to connect to ODBC, showing dialogue boxFoxpro 无法连接到 ODBC,显示对话框
【发布时间】: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


    【解决方案1】:

    通过设置解决了这个问题

    SQLSETPROP(0, "DispLogin", 3)
    

    在我连接之前。

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多