2013-06-04 107 views
2

我使用後顯示空白記錄:QT 5.0.2 + MinGW的4.7 + 32位+ ODBC驅動程序+的Windows 7(32)+ SQL Server 2012點的快速的SQL Server ODBC + QT +:交易

「問題「:

1)我有一個窗口顯示數據庫表中的記錄。

2)如果某個應用程序中,我有沒有使用「交易」的一切工作正常更新數據庫。

3)如果某個應用程序中,我必須更新使用「交易」的記錄(1)(*)消失在窗口顯示的數據庫,併成爲空白記錄。

注(*):如果我有多個窗口(MDI),顯示幾個表中,所有窗口,所有表記錄的同時會變成空白。

我決定請與「SQL Server事件探查器」當有人使用在服務器端發生的事情與QSqlTableModel \ QSqlQueryModel,我想我已經「發現」服務器上的(我的)的問題,但我不知道哪兒出了問題在我的/ QT方:

1)窗口打開時,與QSqlTableModel \ QSqlQueryModel(我認爲)創建一個光標「的exec sp_cursoropen 180150003」在服務器上

2)獲取一些記錄「EXEC sp_cursorfetch 180150003」

3)如果窗口重繪/刷新再次檢索一些記錄「exec sp_c ursorfetch 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

你要進入的服務器正確的SQL INSERT的值和變量? 我知道,這已經無關,與你的要求,但在MySQL服務器的小錯誤可能會導致他人發生。祝你好運:)

+0

謝謝您的回答。 我敢肯定,SQL語法是正確的。如果有幫助的背後我的問題完整的故事+一個小的測試應用程序演示這種情況的例子可以在這裏找到: http://qt-project.org/forums/viewthread/28390/ 我沒想到這種行爲,到目前爲止,我無法找到它的解釋。我希望有人在ODBC或SQL Server或QT一定的專業知識能幫助我理解甚至解決這種情況。 – antseq