2013-09-23 46 views
1

我需要使用OleDb從我的VB.net程序中創建一個保存的MS Access查詢。但在創建查詢之前,我需要檢查數據庫中是否已經存在。如果它確實存在,我想更新它。如何使用OleDb檢查MS Access中的現有查詢?在MS Access中檢查現有的已保存查詢

+5

您是否排除嘗試創建Access查詢並在錯誤已存在時捕獲錯誤? – HansUp

+2

如果您打算在VBA中創建查詢,則可以在查詢定義之前始終將'On Error Resume Next'放在行上。然後在查詢之後放上'On Error Goto Err_Handler'。很明顯,Err_Handler的命名可能不同。這隻會創建查詢,如果它不存在,並且如果它存在則不會生成錯誤。 – Linger

+0

@HansUp我從來沒有做過任何錯誤陷阱。你能舉個簡單的例子嗎? – gromit1

回答

2

「如果確實存在,我想更新它。」

根據評論討論,我明白你會在OleDB連接上執行一條語句來創建查詢。 (在訪問說法中,一個QueryDef對象。)

當查詢尚不存在時,執行成功並完成。

如果查詢確實存在,則執行嘗試將拋出一個錯誤,您將在您的VB.Net代碼中捕獲錯誤。此時,您想要修改現有的查詢。不幸的是,我不知道用OleDb來改變現有查詢的方法。但是,您可以放棄現有查詢並重新執行您的語句以創建新版本。

您可以執行Access DDL語句來放棄現有的查詢。其中這兩個版本會做你的需要:

  1. DROP VIEW YourQueryNameHere;
  2. DROP PROCEDURE YourQueryNameHere;

首先針對的是普通SELECT查詢。第二個是Access訪問「動作查詢」的次數:INSERT; UPDATE; DELETE。當我記得(檢查以確認是否需要它)時,「make table」查詢(SELECT <field list> INTO NewTable FROM ...)也屬於第二個(PROCEDURE)類別。我認爲SELECTPARAMETERS查詢也屬於第二類(檢查是否需要)。

注意這只是一個建議的方向。我不能爲您提供VB.Net的代碼。我希望你知道,或者可以計算出如何在VB.Net中執行所需的錯誤處理。

+1

據我所知,這兩種觀點和程序都是「選擇」陳述。如果Access沒有使用任何參數(如表單控件的值),則會將其稱爲視圖,如果它使用了某個過程,則稱它爲過程。 – Yawar

+2

我喜歡放棄現有查詢並創建新查詢的想法。更容易解決可能的「不存在」錯誤,而不是找出如何改變查詢。 – Yawar

+0

@HansUp這看起來像要走的路!我會開始研究它!謝謝! – gromit1