cdbeexception(错误)处理在c++ (VS2010, MFC, Excel/ODBC)
CDBException (error) handling in C++ (VS2010, MFC, Excel/ODBC)
初学
我有一个用MFC visual c++构建的应用程序,使用VS2010编译。我有一个DSN作为ODBC连接到一个实时Excel电子表格(通过Excel驱动程序)。
我的应用程序每秒查询一个电子表格。如果一个单元格的值发生了变化(这是一个简单计算的结果,涉及到接收实时数据的其他单元格),应用程序打印新的值,然后返回查询更改。
App在一段时间内正常工作,在新数据到达提要时忠实地打印单元格值的变化。然后,它总是生成一个错误:
" Microsoft Jet Engine找不到对象'(unknown)',请确保该对象存在,并正确拼写其名称和路径名。"
文件路径都是绝对给出的。
我推测,每当查询恰好与正在更新的单元格内容一致时,就会生成错误。我可以生成完全相同的错误消息和行为,总是,立即,通过单击调查单元格并触摸一个键(开始编辑单元格,这里通过覆盖单元格公式)。
一个Afx错误对话框运行。如果我"OK"并选择excel文件,应用程序将返回并运行,直到出现新的相同错误。但如果我选择"取消",应用程序将退出。
如果我注释掉我自己的错误捕获,这个对话框仍然出现。
我希望应用程序运行"无头",仅仅重试与数据库连接。
我有办法重写这里吗?
我意识到Excel不适合并发(多用户)访问。但是我不需要并发访问——当"其他东西"正在改变单元格时,我不在乎看到它。我只是想(等待并)重试。
为在这里询问恐龙骨骼技术提前道歉。由于需要查询实时数据,我反复尝试使用ODBC (libxl只能看到文件数据和公式,而不能看到它们的值)。
您应该这样处理CDBException
:
try
{
// DB calls
}
catch(CDBException *err)
{
// simply ignore the error
err->Delete();
}
所以,我终于得到了这个工作。在执行SQL的函数中,我捕获异常,销毁,然后调用"ExitThread()",而不是简单地允许应用程序继续退出。调用该函数的线程将终止,但应用程序没有退出。然后,我将这个调用线程的创建放在一个工作线程中,该线程使用WaitForSingleObject()每半秒测试一次,以查看调用线程是否正在运行。在调用线程中,我还添加了一个电子表格文件是否存在的检查,该文件始终存在,但由于Excel缺乏并发性支持,可能对应用程序不可见。
所以,你可以在一个应用程序中通过ODBC从Visual c++中查询Excel电子表格,这对于那些不小心触摸电子表格中的键或单元格更新(这里,来自市场数据提要)导致讨厌的"不存在的链接"错误的人来说是强大的。它不是特别优雅,但速度很快,而且到目前为止还很健壮。
- C++ MFC Libraries in Travis CI
- 从 bmp 文件数据创建 MFC CBitmap
- 如何在 MFC 中显示文件的所有行
- 目录删除 MFC 的问题
- MFC:如何设置CEdit框的焦点?
- MFC 中的抗锯齿
- 双击更改 mfc 中列表控件中的行的颜色
- C++MFC编辑框处理双击
- C++ MFC CObject 派生类摘要?
- 如何在 MFC 对话框中使用 OnDraw
- 在 1 个服务器 n 客户端套接字 C++ MFC 应用程序中更新数据的客户端
- MFC:你能在CDateTimeCtrl中改变自旋的加速度吗?
- MFC:我们如何轻松地从CTreeCtrl切换到CTreeView?
- __int64 CString 返回错误的值 - C++ MFC
- 如何在MFC中的静态文本控件上插入图标?
- 使用 MFC 的表/网格
- 使用 MFC 时导出到 Excel 文件
- C 如何通过同一MFC应用程序通过System Command打开Excel文件后关闭CMD EXE
- 一个相当奇怪的现象Excel MFC ADO数据库编程
- cdbeexception(错误)处理在c++ (VS2010, MFC, Excel/ODBC)