2010-05-09 37 views
0

我已經做了如何以編程方式更改的QueryDef SQL在MS Access

Dim qd as querydef 
set qd = Querydefs("MyQuery") 
qd.sql = "..." 

在調試qd.sql已經更新,但是身體仍更改爲MyQuery包含舊的SQL。

如何更新此物理查詢?

微軟這裏給出的源代碼 http://msdn.microsoft.com/en-us/library/bb177500.aspx

也不起作用。

+2

的'CreateQueryDef'方法似乎是正確的方法來做到這一點。它接受一個SQL字符串,並創建QueryDef。 – 2010-05-09 15:17:50

+0

是的,這就是我不明白爲什麼它不起作用的原因 – user310291 2010-05-09 16:12:12

+0

如果查詢已經存在,您可以編輯它,否則可以使用CreateQueyDef。我懷疑這個問題可能出現在SQL中,因爲這是我經常使用的,並且有許多版本的Access。 – Fionnuala 2010-05-09 17:09:35

回答

4

除了對象之外,不應該使用SET。你需要一個QueryDefs的對象,所以:

Dim qd As QueryDef 
Set qd = CurrentDb.QueryDefs("MyQuery") 
qd.SQL = "SELECT Category FROM Categories" 

確保SQL有效,否則會出錯。

+0

是的,這是一個mistypo。但即使在上面也行不通。 當我使用DoCmd.RunSQL時,我的SQL可以正常工作qd.SQL – user310291 2010-05-09 16:11:28

+0

請發佈sql – Fionnuala 2010-05-09 17:07:39

+2

您確定* SQL是否使用RunSQL執行更正?如果您關閉了SetWarnings,則永遠不會知道是否有錯誤。檢查的唯一方法是將SQL粘貼到QBE中的新QueryDef中,並嘗試在QBE中運行該查詢。 – 2010-05-09 19:06:23

1

我知道這是一個古老的線程,但當我正在尋找類似問題的解決方案時發現它。所以任何人找到這個線程出於同樣的原因可能會發現我的解決方案有用

在我的情況下,問題是由於使用工作區begintrans/commitrans的一系列操作查詢,加上一些選擇查詢顯示在窗體中供用戶審查繼續之前(使用query.nameofquery的子窗體作爲sourceobject ) - 在committrans代碼運行之前,querydef對象沒有被更新。

嵌套的BeginTrans並沒有爲我工作(壽」我可能已經錯過了一些東西),所以我必須首先修改代碼要經過所有的確認和再啓動的BeginTrans

相關問題