Страница: 1 |
|
Вопрос: Как получить размер поля String в таблице Access?
|
Добавлено: 21.09.06 01:21
|
|
Автор вопроса: Marki
|
Для исключения ошибки перед записью данных в таблицу Access необходимо сделать проверку на размер записываемых данных (для типа String).
Вопрос - КАК ПОЛУЧИТЬ РАЗМЕР ПОЛЯ (СТОЛБЦА) ИЗ ТАБЛИЦЫ ACCESS?
На запрос "SELECT <столбец> FROM <таблица>",
где "<столбец>" - имя столбца для хранения данных типа String, в возвращаемом DataSet при проверке
DataSet.Tables(0).Columns(0).MaxLength возвращает -1.
Ответить
|
Номер ответа: 2 Автор ответа: Marki
Вопросов: 42 Ответов: 94
|
Профиль | | #2
|
Добавлено: 21.09.06 23:42
|
Несомненно, я знаю в каком случае возвращается значение -1.
Проблема в вопроса как раз и заключается в том, что я РУЧКАМИ НЕПОСРЕДСТВЕННО в ACCESS создал базу, УСТАНОВИЛ РАЗМЕР ПОЛЯ и знаю что ДОЛЖЕН (согласно моей логике, конечно), получить в ответе на подобный запрос.
Т.к. размер поля указан вполне конкретно и, в отличие от Access, который (если не ошибаюсь) просто обрезает данные до требуемого размера, в этом случае я получаю ошибку.
Использование Try... представляется в данной ситуации не вполне приемлемым, т.к. при ошибке необходимо сообщить пользователю ее причину (предложив ему уменьшить данные до требуемой длины), а не просто сказать "ой!".
Кроме того, возможность получить размер поля не только позволяет корректно обработать данные, но и исключить потенциальную ситуацию с ошибкой ).
Как известно, профилактика лучше лечения ;о).
Соответственно вопрос отсается открытым, буду признателен за реальную помощь.
EROS'у, несомненно, тоже thx )
Ответить
|
Номер ответа: 4 Автор ответа: Marki
Вопросов: 42 Ответов: 94
|
Профиль | | #4
|
Добавлено: 22.09.06 11:00
|
если нет то тогда явно укажи ограничения на длинну
Именно так пока и сделано. Но если потребуется изменить длину поля, то придется менять код. А хотелось бы программу не трогать, если потребуется изменить что-то собственно вне самого кода.
Ответить
|
Номер ответа: 5 Автор ответа: EROS
Вопросов: 58 Ответов: 4255
|
Профиль | | #5
|
Добавлено: 22.09.06 17:56
|
По существу заданного вопроса могу добавить следующее:
Свойсво MaxLength корректно отображает размер поля только в том случае, если объект Column был создан программым методом, и добавлен в коллекцию Columns.. В случае создания DataSet c помощью мастера, он ничего не знает о структуре Таблицы, поскольку эти данные хранятся в виде мета-данных.
К сожалению, ADO.NET не способна выполнить некоторые операции, с БД Access. В качестве примера мoгу привести такую операцию как Compact, Repair. Совершенно очевидно,что используя этот тип БД, использование этих функий крайне необходимо, в противном случае, при активном использовании БД ее размер необоснованно увеличится до гигантских размеров..
Учитывая все вышесказанное, могу предложить использовать через Interop стандартную библиотеку DAO 3.6 (благо таскать за проектом ее не понадобится, поскольку она входит в комплект FW).А вот уже непосредственно DAO позволит получить корректно FieldSize, ну и плюс несколько необходимых свойст поля, и сервисные процедуры.. такие как смена пароля и т.д...
Ответить
|
Страница: 1 |
Поиск по форуму