我正在使用:QT 5.0.2 + MinGW 4.7 + 32位+ ODBC驱动程序+ Windows 7(32)+ SQL Server 2012 Express
“问题”:
1)我有一个窗口显示数据库表中的记录。
2)如果在应用程序的某个地方,我必须更新数据库而不使用'Transactions'一切正常。
3)如果在应用程序的某个地方,我必须使用“事务”更新数据库,窗口中显示的记录(1)(*)消失并变为空白记录。
注意(*):如果我有更多的窗口(MDI)显示几个表,所有窗口,所有表记录同时变为BLANK。
我决定查看“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显示BLANK记录。
注意(*):使用MDI子窗口时,每个子窗口显示一个完全不同且不相关的表。在“事务”之后,所有子窗口/ QTableView都会自动显示BLANK记录。我已经使用“SQL Server Profiler”进行了检查,在“事务”之后,“exec sp_cursorfetch”与打开的子窗口一样多。
似乎所有“游标”都会自动关闭,无论它们是否与正在进行的更新(单个表)相关。
假设“问题”是那些“exec sp_cursorclose”,有没有人知道为什么那些(exec sp_cursorclose)会自动发生:
是ODBC(一般来说)限制吗?
是ODBC(QT实施)限制吗?
是ODBC(MSSQL实现)限制吗?
是QSqlxxxxxx的实施/限制吗?
我在这里缺少什么?
非常感谢任何建议或意见
答案 0 :(得分:0)
您想要输入服务器的sql insert的值和变量是否正确? 我知道这与你提出的要求无关,但是mysql服务器中的小错误可能会导致其他错误发生。祝你好运:)