【问题标题】:SQL Server + ODBC + QT : Showing BLANK records after transactionSQL Server + ODBC + QT:事务后显示空白记录
【发布时间】:2013-06-04 20:29:17
【问题描述】:

我正在使用:QT 5.0.2 + MinGW 4.7 + 32 位 + ODBC 驱动程序 + Windows 7 (32) + SQL Server 2012 Express

“问题”:

1) 我有一个窗口显示数据库表中的记录。

2) 如果在应用程序的某个地方,我必须在不使用“事务”的情况下更新数据库,一切正常。

3) 如果在应用程序的某个地方,我必须使用“事务”更新数据库,窗口 (1) (*) 中显示的记录消失并变成空白记录。

注意 (*):如果我有更多的窗口 (MDI) 显示几个表,所有窗口,所有表记录同时变为空白。

我决定使用“SQL Server Profiler”检查当有人使用 QSqlTableModel\QSqlQueryModel 时服务器端会发生什么,我认为我已经“发现”了服务器上的(我的)问题,但我不确定问题到底出在哪里我/QT端:

1)当窗口打开时,QSqlTableModel\QSqlQueryModel(我认为)在服务器上创建一个游标“exec sp_cursoropen 180150003”

2) 检索一些记录“exec sp_cursorfetch 180150003”

3) 如果窗口重绘/刷新再次检索到一些记录“exec sp_cursorfetch 180150003”

4) 在执行“事务”之后,某人(谁?)关闭了 QSqlTableModel\QSqlQueryModel “exec sp_cursorclose 180150003”正在使用的游标(我认为)

5) 之后,不再有“exec sp_cursorfetch...”的条目。这就是(我认为)QTableView 显示空白记录的原因。

注意 (*):当使用 MDI 子窗口时,每个子窗口都会显示一个完全不同且不相关的表。在“事务”之后,所有子窗口/QTableView 自动显示空白记录。我检查了“SQL Server Profiler”,在“事务”之后,“exec sp_cursorfetch”的数量与打开的子窗口一样多。

似乎所有“游标”都会自动关闭,无论它们是否与正在进行的更新(单个表)相关。

假设“问题”是那些“exec sp_cursorclose”,有没有人知道为什么会自动发生那些(exec sp_cursorclose):

  • 是不是 ODBC(一般来说)限制?

  • 是 ODBC(QT 实现)限制吗?

  • 是 ODBC(MSSQL 实现)限制吗?

  • 是 QSqlxxxxxx 实现/限制吗?

我在这里错过了什么?

任何建议或cmets将不胜感激

【问题讨论】:

    标签: sql-server qt odbc


    【解决方案1】:

    您要输入到服务器的sql insert 的值和变量是否正确? 我知道这与您的要求无关,但是 mysql 服务器中的小错误可能会导致其他错误发生。祝你好运:)

    【讨论】:

    • 感谢您的回答。我很确定 SQL 语法是正确的。如果它有助于我的问题背后的完整故事 + 一个演示这种情况的小型测试应用程序的示例,请参见此处:qt-project.org/forums/viewthread/28390 我没想到这种行为,到目前为止我无法找到它的解释。我希望在 ODBC 或 SQL Server 或 QT 方面具有一定专业知识的人可以帮助我理解甚至解决这种情况。
    猜你喜欢
    • 1970-01-01
    • 2019-06-08
    • 1970-01-01
    • 1970-01-01
    • 2015-03-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多