2012-08-03 72 views
1

不確定是否有明確的答案,但我有一個帶有SQL Server 2008的Ms Access應用程序作爲數據存儲所有表都從Access應用程序鏈接到SQL Server,應用程序託管在Citrix服務器上。 應用程序中的所有表單都是綁定表單。當我試圖編輯或保存表單掛起的數據時,最近有一種特殊形式會引發問題,我必須殺掉會話。表單鏈接到SQL服務器上的一個表格,並且該表格具有Identity列作爲主鍵,我發現奇怪的是,此表單甚至沒有像任何其他表單那樣大量使用,並且表格甚至沒有任何一半的記錄其他大量使用的表格。只有4個字段的表單中只有一個字段是Nvarchar,其他表單字段的Nvarchar字段的方式更多,數據利用率也更高,並且它們似乎沒有引起任何問題。我正在排除網絡問題,因爲這會影響整個應用程序,而不僅僅是一種形式,SQL服務器上的索引也是每天構建的,所以我不認爲這也是索引問題。有沒有人知道爲什麼會發生這種情況。鏈接到SQL Server的訪問表單無響應

+0

即使我在PC上本地運行應用程序,也會發生這種情況。 – Irfarino 2012-08-03 02:46:53

回答

2

如果您懷疑表單已損壞,則可以使用SaveAsTextLoadFromText方法將表單定義另存爲文本文件,然後使用其他名稱重新加載。

Application.SaveAsText acForm, "frmMainMenu", "frmMainMenu.txt" 
Application.LoadFromText acForm, "frmMainMenu_new", "frmMainMenu.txt" 

這些方法並不像Erik的建議那麼全面,但它們很快捷。您也可以嘗試反編譯來修復損壞。請參閱此鏈接上的2個答案:HOW TO decompile and recompile

如果損壞不是問題的原因,您可以嘗試在break(調試)模式下逐個瀏覽表單的代碼。在表單的打開過程中的第一個可執行行放置一個臨時中斷點。如果您沒有表單打開的過程,請添加一個。如果你不熟悉設置臨時破發點,你可以添加單詞Stop

Private Sub Form_Open(Cancel As Integer) 
    Stop 

然後打開表單後,您可以通過一行代碼在與F8關鍵一步一個腳印。希望你能夠識別導致代碼掛起的行。

+0

我經過了幾遍代碼,我甚至爲ODBC跟蹤啓用了我的註冊表項[link](http://msdn.microsoft.com/zh-cn/library/bb188204%28v=SQL.90%29的.aspx)。當表單打開時,它被過濾爲記錄,但是當我查看ODBC跟蹤時,它每分鐘都會在場景後面加載10條記錄,直到我猜所有記錄都從表中拉下來,但對於所有表單綁定他們有更多的記錄所有記錄被拉下來的場景。就像我說過,它會加載額外的數據,這是不需要的 – Irfarino 2012-08-03 03:40:27

+0

因此,然後你的表單的記錄源是一個大的記錄集,但你過濾設置爲一個?這可能有助於向我們展示該表單的記錄來源屬性。 – HansUp 2012-08-03 03:42:40

+0

表單綁定到一個表,記錄源是表單屬性中的表(表名)。很抱歉忘記提及db的close屬性上的compact也被啓用,所以每次任何人關閉應用程序時db都會被壓縮。 – Irfarino 2012-08-03 03:48:40

2

嘗試重建您的Access前端。創建一個新的數據庫,設置特定於數據庫的選項匹配(字段行爲,關閉或打開自動名稱跟蹤,SQL語法級別等),然後導入舊Access中的所有表單,報表,宏,vb代碼和數據數據庫轉換成新的數據庫。正確設置啓動選項,並查看是否有更好的方法。

訪問數據庫可能會微妙地損壞,並且總重建有時是修復它們的唯一方法。

請確保您保留備份。

+0

我改寫了造成問題的表單,而不是將其綁定到表格,我通過代碼提取數據並通過代碼更新它。該表單僅用於基於來自其他表單的過濾器來編輯一條記錄,因此將其綁定到表格並訪問將整個表格拖到場景後面是不必要的。我認爲這將解決問題,但我只是好奇,爲什麼會發生,因爲這種形式多年來從未引起問題,也許你的權利,形式可能會由於某種原因損壞。 – Irfarino 2012-08-03 02:51:33

相關問題