Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Сохранение и чтение AnsiString в таблицах Paradox

3.2K
31 августа 2007 года
nikipelovav
152 / / 12.04.2006
Столкнулся с проблемой.

Попытка записи AnsiString длиной больше, чем размер строкового поля не вызывает проблем. "Обрезание" строки, вроде бы, происходит. Как написано в help-е до 254 символов.

Попытка прочитать значение из поля в переменную AnsiString приводит к тому, что после 254 символов есть ещё "хвостик" всякого мусора произвольной длины.

Кто-то сталкивался с такой ситуацией. Как с ней бороться.

P.S.: контролировать всегда и везде в программе длину строки - не удобно! Есть ли другое решение?
9.3K
01 сентября 2007 года
iridum
175 / / 26.08.2007
Нащёт контроля то чего тут мучится просто точно так же назвать ф-ю которая считывает всё это дело только например на большую букву, и всё делать через неё а в ней всё контроллировать. Делал я когда то что то в Парадоксе может ты не тот тип поля используешь ??? Когда то помучался я с этим - так и не зделал )))

Memo->
поле для хранения символов, суммарная длина которых более 255 байт. Может иметь любую длину. При этом размер, указываемый при создании таблицы, означает количество символов, сохраняемых в таблице (1-240) - остальные символы сохраняются в отдельном файле с расширением .MB

Formatted Memo->
поле, аналогичное Memo, с добавлением возможности задавать шрифт текста. Также может иметь любую длину. При этом размер, указываемый при создании таблицы, означает количество символов, сохраняемых в таблице (0-240) - остальные символы сохраняются в отдельном файле с расширением .MB. Однако, Delphi в стандартной поставке не обладает возможностью работать с полями типа Formatted Memo
309
01 сентября 2007 года
el scorpio
1.1K / / 19.09.2006
Цитата:
Попытка прочитать значение из поля в переменную AnsiString приводит к тому, что после 254 символов есть ещё "хвостик" всякого мусора произвольной длины.


Судя по всему, при записи строки "обрезается" нулевой символ в конце. Поэтому при чтении, BDE считывает ВСЕ данные до нуля. Соответственно, этот символьный массив и передаётся конструктору AnsiString (const char*)

1
01 сентября 2007 года
kot_
7.3K / / 20.01.2000
Цитата: nikipelovav
Столкнулся с проблемой.

Попытка записи AnsiString длиной больше, чем размер строкового поля не вызывает проблем. "Обрезание" строки, вроде бы, происходит. Как написано в help-е до 254 символов.

Попытка прочитать значение из поля в переменную AnsiString приводит к тому, что после 254 символов есть ещё "хвостик" всякого мусора произвольной длины.

Кто-то сталкивался с такой ситуацией. Как с ней бороться.

P.S.: контролировать всегда и везде в программе длину строки - не удобно! Есть ли другое решение?


Не забывать записывать в поле завершающий символ "\0". Т.е. контролировать что строка содержит не более 253 символа и добавлять завершающий.

3.2K
01 сентября 2007 года
nikipelovav
152 / / 12.04.2006
Спасибо, но про Memo поле Я знаю.

Я пишу программу небольшой БД. До сих пор данные записывались в Excel. Сейчас занимаюсь функцией преобразования данных. Поля Memo использовать буду обязательно. Просто на этап конвертирования данных, возникла потребность в их "коррекции". Чтобы узнать все возможные варианты строк по полям, посчитал, что быстрее всего смогу этого достичь используя SQL запрос типа:

 
Код:
SELECT DISTINCT T.Field FROM "cnvtemp" T ORDER BY T.Field


Но Blob поля недопустимы для оператора DISTINCT.
Пришлось сохранять данные в строковые поля. Вот после этого и начались проблемы. Некоторые ячейки Excel содержали строки длиной более 500 символов.

Неужели разработчики BDE не предусмотрели такой ситуации? Может, всётаки, Я делаю что-то не так?
309
02 сентября 2007 года
el scorpio
1.1K / / 19.09.2006
Универсальный совет: если какие-то глюки с Access, Excel или другими мелкомягкими продуктами - перейди на ADO :)
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог