Фильтрация неправильных записей базы данных в элементе управления DataGridView (Visual Studio 2005) (Visual Basic) (нормализация) - PullRequest
0 голосов
/ 05 июля 2011

У меня есть эта база данных, и мне нужно загрузить ее с визуальной базовой формой в Visual Studio 2005.

База данных содержит 6 таблиц, и они содержат неверные данные, которые я должен фильтровать при загрузке базы данных в форме.

Быстрый пример:

Первая таблица - это Категория, которая имеет 3 поля (идентификатор, имя, описание).В одной записи у меня есть 2a для идентификатора (поле только для чисел), а в другой записи у меня есть 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]')

но действительно трудно фильтровать такие вещи, как Angel *, P3ter и Hood8, все одновременно ...

Пожалуйста, покажите мне пример кода в своем ответе, чтобы я мог его попробовать.

Заранее спасибо.

1 Ответ

0 голосов
/ 06 июля 2011

Если вы определили столбец в таблице 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 («от двух до пятой степени»).

Чтобы выбрать данные, которые вообще не содержат цифр, используйте такое регулярное выражение. (Я не уверен, что вы пытаетесь это сделать.)

SELECT your-column-list
FROM some-table
WHERE some-column-name Not Like "*[0-9]*";
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...