Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - .NET

Страница: 1 |

 

  Вопрос: Как получить размер поля String в таблице Access? Добавлено: 21.09.06 01:21  

Автор вопроса:  Marki
Для исключения ошибки перед записью данных в таблицу Access необходимо сделать проверку на размер записываемых данных (для типа String).

Вопрос - КАК ПОЛУЧИТЬ РАЗМЕР ПОЛЯ (СТОЛБЦА) ИЗ ТАБЛИЦЫ ACCESS?

На запрос "SELECT <столбец> FROM <таблица>",
где "<столбец>" - имя столбца для хранения данных типа String, в возвращаемом DataSet при проверке
DataSet.Tables(0).Columns(0).MaxLength возвращает -1.

Ответить

  Ответы Всего ответов: 6  

Номер ответа: 1
Автор ответа:
 EROS



Вопросов: 58
Ответов: 4255
 Профиль | | #1 Добавлено: 21.09.06 23:05
Return Values:
The maximum length of the column in characters. If the column has no maximum length, the value is –1 (default).

Судя по этому, если получаешь -1, значит это свойство не задано вообще, а это значит ты сам должен учитывать тот факт, что поле типа String в БД Access может содержать максимум 255 знаков.
В любом случае, я бы рекомендовал эти операции размещать в блоке Try.. Catch, чтобы исключить любые непредвиденные обстаятельства..

Ответить

Номер ответа: 2
Автор ответа:
 Marki



Вопросов: 42
Ответов: 94
 Профиль | | #2 Добавлено: 21.09.06 23:42
Несомненно, я знаю в каком случае возвращается значение -1.
Проблема в вопроса как раз и заключается в том, что я РУЧКАМИ НЕПОСРЕДСТВЕННО в ACCESS создал базу, УСТАНОВИЛ РАЗМЕР ПОЛЯ и знаю что ДОЛЖЕН (согласно моей логике, конечно), получить в ответе на подобный запрос.
Т.к. размер поля указан вполне конкретно и, в отличие от Access, который (если не ошибаюсь) просто обрезает данные до требуемого размера, в этом случае я получаю ошибку.
Использование Try... представляется в данной ситуации не вполне приемлемым, т.к. при ошибке необходимо сообщить пользователю ее причину (предложив ему уменьшить данные до требуемой длины), а не просто сказать "ой!".
Кроме того, возможность получить размер поля не только позволяет корректно обработать данные, но и исключить потенциальную ситуацию с ошибкой ).
Как известно, профилактика лучше лечения ;о).

Соответственно вопрос отсается открытым, буду признателен за реальную помощь.
EROS'у, несомненно, тоже thx )

Ответить

Номер ответа: 3
Автор ответа:
 ПтирЯ



Вопросов: 11
Ответов: 71
 Профиль | | #3 Добавлено: 22.09.06 10:32
Есть такой (не самый удобный) вариант:
у тебя через форму, в которой идет обращение к твоей таблице, происходит обращение к другим таблицам?
если нет то тогда явно укажи ограничения на длинну, или сам проверяй запись на соответствие ограничениям

Ответить

Номер ответа: 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, ну и плюс несколько необходимых свойст поля, и сервисные процедуры.. такие как смена пароля и т.д...

Ответить

Номер ответа: 6
Автор ответа:
 Marki



Вопросов: 42
Ответов: 94
 Профиль | | #6 Добавлено: 22.09.06 22:44
Учитывая все вышесказанное,

понял только суть, что тем путем каким я ижу желаемого мне не получить. :)
Остальное ("использовать через Interop";) пока оказалось вне осмысления, попробую вернуться чуть позже и чуть более внимательно - спасибо.

ps DataSet создается не мастером, а программно, и просто заполняется данными из базы.

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам