gpt4 book ai didi

c++ - 在 Windows 7、Windows 8.x 和 Windows 10 下,ODBC 导出到 Excel 失败

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:42:11 25 4
gpt4 key购买 nike

我刚刚从头开始创建了一些代码(位于底部),用于显示简单的 Excel 导出。当调用 database.OpenEx 时,代码失败并出现异常。

显示的异常是:

Reservierter Fehler (-5016); es gibt keine Meldung für diesen Fehler.
Ungültiges Attribut für die Verbindungszeichenfolge. CREATE_DB
Ungültiges Attribut für die Verbindungszeichenfolge. CREATE_DB
Ungültiges Attribut für die Verbindungszeichenfolge. CREATE_DB
Ungültiges Attribut für die Verbindungszeichenfolge. CREATE_DB
Allgemeine Warnung Registrierungsschlüssel 'Temporary (volatile) Jet DSN for process 0x844 Thread 0x1850 DBC 0xab824c Excel' kann nicht geöffnet werden.
Ungültiges Attribut für die Verbindu

英文翻译应该是“保留错误”和“无效连接字符串属性”!

我们可以在 Windows 7、Windows 8.1 和 Windows 10 上重现此问题。我们认为 Windows 安全更新存在问题,但我们不确定。类似的代码多年来一直有效。

有人能看到连接字符串中的失败吗?

有人可以重现这个问题吗?

编辑:Windows 7 接缝也会受到影响。

以下安全补丁会导致此问题:

Windows 7   KB4041681
Windows 8.1 KB40416393
Windows 10 KB4040724
KB4041676

这里是代码(代码只是从 Codeproject 快速复制的)。我唯一的改变是让它兼容 unicode。

CDatabase database;
CString sDriver = _T("MICROSOFT EXCEL DRIVER (*.XLS)"); // exactly the same name as in the ODBC-Manager
CString sExcelFile = _T("demo.xls"); // Filename and path for the file to be created
CString sSql;

TRY
{
// Build the creation string for access without DSN
sSql.Format(_T("DRIVER={%s};DSN='';READONLY=FALSE;CREATE_DB=\"%s\";DBQ=%s"),
sDriver.GetString(), sExcelFile.GetString(), sExcelFile.GetString());

// Create the database (i.e. Excel sheet)
if (database.OpenEx(sSql,CDatabase::noOdbcDialog))
{
// Create table structure
sSql = _T("CREATE TABLE demo (Name TEXT,Age NUMBER)");
database.ExecuteSQL(sSql);

// Insert data
sSql = _T("INSERT INTO demo (Name,Age) VALUES ('Bruno Brutalinsky',45)");
database.ExecuteSQL(sSql);

sSql = _T("INSERT INTO demo (Name,Age) VALUES ('Fritz Pappenheimer',30)");
database.ExecuteSQL(sSql);

sSql = _T("INSERT INTO demo (Name,Age) VALUES ('Hella Wahnsinn',28)");
database.ExecuteSQL(sSql);
}

// Close database
database.Close();
}
CATCH_ALL(e)
{
e->ReportError();
e->Delete();
}
END_CATCH_ALL;

最佳答案

问题的出现实际上是由于安全更新中的错误。目前,除了卸载、安全补丁或使用其他导出格式外,我看不到其他解决方案。

受影响的补丁是:

Windows 7 SP1 和 Windows Server 2008 R2 SP

KB4041681 -- 基于 x86 系统的 Windows 7 2017-10 安全质量月度汇总KB4041678 -- 适用于基于 x64 的系统的 Windows Embedded Standard 7 的 2017-10 仅安全质量更新

Windows 8.1 和 Windows Server 2012 R2

KB4041693 -- 基于 x86 系统的 Windows 8.1 的 2017-10 安全质量月度汇总KB4041687 -- 适用于基于 x86 的系统的 Windows 8.1 的 2017-10 安全质量更新

Windows 10 和 Windows Server 2016(版本 1607)

KB4041691 -- Windows 10 版本 1607 和 Windows Server 2016 的 2017-10 累积更新

Windows 10 和 Windows Server 2016(版本 1703)

KB4041676 -- Windows 10 版本 1703 的 2017-10 累积更新

其他社区(Tectnet、Answers、Social MSDN)中有多个线程讨论同一个问题,除了卸载补丁外没有任何解决方法。

编辑 (2017-11-21):对于 Windows 10,该错误已通过 KB4048955 修复!

关于c++ - 在 Windows 7、Windows 8.x 和 Windows 10 下,ODBC 导出到 Excel 失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46706128/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com