Сохранение и чтение AnsiString в таблицах Paradox
Попытка записи AnsiString длиной больше, чем размер строкового поля не вызывает проблем. "Обрезание" строки, вроде бы, происходит. Как написано в help-е до 254 символов.
Попытка прочитать значение из поля в переменную AnsiString приводит к тому, что после 254 символов есть ещё "хвостик" всякого мусора произвольной длины.
Кто-то сталкивался с такой ситуацией. Как с ней бороться.
P.S.: контролировать всегда и везде в программе длину строки - не удобно! Есть ли другое решение?
Memo->
поле для хранения символов, суммарная длина которых более 255 байт. Может иметь любую длину. При этом размер, указываемый при создании таблицы, означает количество символов, сохраняемых в таблице (1-240) - остальные символы сохраняются в отдельном файле с расширением .MB
Formatted Memo->
поле, аналогичное Memo, с добавлением возможности задавать шрифт текста. Также может иметь любую длину. При этом размер, указываемый при создании таблицы, означает количество символов, сохраняемых в таблице (0-240) - остальные символы сохраняются в отдельном файле с расширением .MB. Однако, Delphi в стандартной поставке не обладает возможностью работать с полями типа Formatted Memo
Цитата:
Попытка прочитать значение из поля в переменную AnsiString приводит к тому, что после 254 символов есть ещё "хвостик" всякого мусора произвольной длины.
Судя по всему, при записи строки "обрезается" нулевой символ в конце. Поэтому при чтении, BDE считывает ВСЕ данные до нуля. Соответственно, этот символьный массив и передаётся конструктору AnsiString (const char*)
Цитата: nikipelovav
Столкнулся с проблемой.
Попытка записи AnsiString длиной больше, чем размер строкового поля не вызывает проблем. "Обрезание" строки, вроде бы, происходит. Как написано в help-е до 254 символов.
Попытка прочитать значение из поля в переменную AnsiString приводит к тому, что после 254 символов есть ещё "хвостик" всякого мусора произвольной длины.
Кто-то сталкивался с такой ситуацией. Как с ней бороться.
P.S.: контролировать всегда и везде в программе длину строки - не удобно! Есть ли другое решение?
Попытка записи AnsiString длиной больше, чем размер строкового поля не вызывает проблем. "Обрезание" строки, вроде бы, происходит. Как написано в help-е до 254 символов.
Попытка прочитать значение из поля в переменную AnsiString приводит к тому, что после 254 символов есть ещё "хвостик" всякого мусора произвольной длины.
Кто-то сталкивался с такой ситуацией. Как с ней бороться.
P.S.: контролировать всегда и везде в программе длину строки - не удобно! Есть ли другое решение?
Не забывать записывать в поле завершающий символ "\0". Т.е. контролировать что строка содержит не более 253 символа и добавлять завершающий.
Я пишу программу небольшой БД. До сих пор данные записывались в Excel. Сейчас занимаюсь функцией преобразования данных. Поля Memo использовать буду обязательно. Просто на этап конвертирования данных, возникла потребность в их "коррекции". Чтобы узнать все возможные варианты строк по полям, посчитал, что быстрее всего смогу этого достичь используя SQL запрос типа:
Код:
SELECT DISTINCT T.Field FROM "cnvtemp" T ORDER BY T.Field
Но Blob поля недопустимы для оператора DISTINCT.
Пришлось сохранять данные в строковые поля. Вот после этого и начались проблемы. Некоторые ячейки Excel содержали строки длиной более 500 символов.
Неужели разработчики BDE не предусмотрели такой ситуации? Может, всётаки, Я делаю что-то не так?
Универсальный совет: если какие-то глюки с Access, Excel или другими мелкомягкими продуктами - перейди на ADO :)