2010-10-13 102 views
1

所有。通過JET使用Access 2003 VBA功能

我需要在n Access 2003數據庫上執行的查詢中運行'替換([column],[new],[old])''。我知道我可以在SQL中使用的所有相當的東西,並相信我很想,但我現在沒有這個選項。我試圖做一個查詢,其中所有的字母字符被剝離出一列,即。 '(111)111-1111'簡單地變成''。我也可以編寫一個awsum自定義VBA函數並使用它來執行查詢,但是再次不能通過JET來使用這些函數。有任何想法嗎?


Thanx for reply guys。好的,讓我澄清一下情況。我正在運行一個.NET Web應用程序。這個應用程序使用Access 2003數據庫。我試圖做一個升級,我加入了一種搜索頁面。此頁面執行如下查詢:SELECT * FROM [table] WHERE replace([telnumber],' - ','')LIKE'1234567890'。問題是在[telnumber]列中有很多記錄,例如'(123)123-1234'中有alpha字符。在做比較之前,我需要過濾掉。所以當我在一個測試環境中運行查詢時,使用內置VBA函數的查詢執行得很好,但是當我從我的web應用運行查詢時,它會拋出一個異常,聲明類似「替換函數未找到」。有任何想法嗎?

+1

這個問題是如何包含正確的信息,以確保您得到一個有用的教訓。您運行更新的上下文是至關重要的,因爲根據您使用的是Access還是.NET或Delphi等,答案完全不同。 – 2010-10-16 17:02:19

+0

....好哥們... – joshuafreelance 2010-10-16 17:06:48

回答

1

根據您的評論樣本查詢,我不知道這可能是「足夠好」使用通配符以考慮可能的非數字字符來重寫你的匹配模式?

SELECT * FROM [table] WHERE telnumber LIKE '*123*456*7890' 
+0

即使是比特。爲什麼我沒有想到這一點。感謝名單 – joshuafreelance 2010-10-15 11:45:24

1

您的問題有點不清楚,但Access允許您在查詢中使用VBA功能。這是完全合法的訪問要做到這一點:

SELECT replace(mycolumn,'x','y') FROM myTable 

它可能不執行,以及沒有被嵌入的這樣功能的查詢,但它會奏效。另外,如果它是一次性查詢,並且您不擔心鎖定正在系統中工作的其他用戶的一堆行,那麼也可以打開表並執行查找並用Control-H替換。

0

正如JohnFx所說,使用VBA函數(無論是內置的還是自己編寫的)都應該可以工作。

如果你無法在查詢中使用VBA函數(無論出於何種原因),那麼可能每個代碼都是這樣做的嗎?
如果這是一次性動作和/或不關鍵性能,那麼您可以將整個表格加載到一個Recordset中,循環遍歷它併爲每一行分別進行替換。


編輯:

好吧,這是一個完全不同的事情,當你從.NET應用程序查詢Access數據庫。
在這種情況下,不可能使用任何內置或自寫的VBA函數,因爲.net不知道它們。沒門。

那麼,我們還有什麼其他選擇?
如果我理解正確,這不是一次性操作...您需要在每次有人使用您的搜索頁時更換東西,對嗎?

在這種情況下,我會做一些完全不同的事情。
即使做了替換查詢將作品,表演明智這不是因爲它會將您的數據庫可能放緩的最佳選擇。

如果你不寫,往往到您的數據庫,而是做了很多的讀取(這似乎根據你的描述是這樣),我將做到以下幾點:

  • 添加列「TelNumberSearch」你的表
  • 每次當你保存記錄,保存的電話號碼,在「TelNumber」一欄,你上的電話號碼的更換,並保存在剝離數「 TelNumberSearch」列

- >當你做一個搜索,你已經擁有了所有的剝離號碼TelNumberSearch列...沒有必要再剝奪他們在每一次搜索。並且您仍然具有原始數字(帶有字母字符)的列用於顯示目的。

當然,你需要填寫一次新列,但這是一次性的行動,通過記錄,這樣的循環,做一個獨立的更換爲每一個會是在這種情況下還行。

+0

我更新了原來的問題,重述一些東西。 – joshuafreelance 2010-10-14 16:23:50

+0

鍵。感謝名單。這回答了我的問題。我不能使用從.Net應用程序查詢函數中建立的訪問。所以沒有捷徑,更長的路線也會導致更快的搜索。所以是的,它是漫長的。問題在於,這是一個類似CRM的系統,在我的時間之前由其他開發人員編寫,它是一個真實的混亂故事。但是,這是答案。 Thanx – joshuafreelance 2010-10-15 07:58:38