2011-07-05 36 views
0

我有這個數據庫,我需要在Visual Studio 2005過濾錯誤的數據庫記錄(Visual Studio 2005中)(Visual Basic中)(標準化)

數據庫有一個可視化的基本形式加載它6個表格,它們包含我在表單中加載數據庫時必須過濾的錯誤數據。

一個簡單的例子:

第一表是類別,它具有3個字段(ID,名稱,描述)。在一個記錄中,我有2a for id(僅限數字字段),而在其他記錄中,我有名稱爲m1lk(僅限字符串字段)。

當我點擊一個按鈕,我將數據庫加載到DataGridView控件。如何停止將Visual Basic加載到DataGridView控件中具有無效數據的記錄(如我的示例中那樣)。

我有一個SQL查詢嘗試使用WHERE和LIKE,像

SELECT IdCategoría, NombreCategoría, Descripción 
FROM  Categorías 
WHERE (NombreCategoría LIKE '[!l]%') AND (IdCategoría LIKE '[!abcdefghijklmnñopqrstuvwxyz]') 

但它確實很難過濾的東西像天使*和P3ter和Hood8,所有在同一時間...

請在回答中給我看一個示例代碼,以便我可以試試。

在此先感謝。

+0

-1,沒有顯示任何研究工作。而不是「在我的答案中顯示示例代碼,以便我可以嘗試」,請嘗試編輯您的問題以包含代碼*您*寫下並嘗試過,因此我們可以向您顯示您出錯的位置。 (這也會鼓勵我取消我的「-1」。) –

+0

StackOverflow有一個FAQ。請參閱http://stackoverflow.com/faq#questions –

+0

感謝您發佈您的SQL語句。我爲你的問題刪除了我的-1,但我標記了你的毫無建設性的評論。 –

回答

0

如果您使用數字數據類型在MS Access表中定義列,則它不會允許像「2a」這樣的值。但文本列允許值,如「m1lk」,因爲「m1lk」是一個有效的字符串。

快速的解決方法

只選擇那些可以被解釋爲數字值,可以使用ISNUMERIC()函數。你需要一個SQL語句沿着這些線。

SELECT your-column-list 
FROM some-table 
WHERE isnumeric(numeric-column-having-bad-data) 

要知道,像isnumeric("2e5")isnumeric("2d5")表達式將返回True。 VBA將「2d5」和「2e5」解釋爲2^5(「2到5次方」)。

要選擇完全不包含數字的數據,請使用像這樣的正則表達式。 (我不確定你是否試圖做到這一點。)

SELECT your-column-list 
FROM some-table 
WHERE some-column-name Not Like "*[0-9]*"; 
+0

是的,通常情況下,規範化數據庫(或定義良好)不應接受也不包含除已由其數據類型定義的數據類型以外的數據類型,但此數據庫未歸一化,這就是爲什麼它具有像2a或m1lk這樣的東西。我嘗試了'不喜歡'* [0-9] *''但它不起作用,我仍然得到P3ter和Wooh8,並且記錄如下... – Ashir

+0

@Ashir:「明確定義」是正確的術語;當你談論SQL數據庫時,「規範化」意味着完全不同的東西。表達式「不相似」* [0-9] *「'確實消除了」P3ter「和」Wooh8「的值;確保你將它應用到右欄。 –