2

我正在使用: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”</p>

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

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

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 实现/限制吗?

我在这里想念什么?

任何建议或意见将不胜感激

4

1 回答 1

0

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

于 2013-06-04T20:39:51.080 回答