04.11.2009, 01:56 | #1 |
Участник
|
Пробелы теряются в текстовом поле
Привет знатоки,
Столкнулся с простой, но хитрой проблемой: 1. Создаю новую таблицу. 2. Добавляю одно текстовое поле (не важно с EDT или без). 3. Открываю в табличном браузере, создаю новую запись и вписываю N-пробелов в текстовое поле. 4. Сохраняю строку. Пробелы вижу. 5. Закрываю браузер. 6. Открываю браузер, текстовое поле пустое - Пробелов НЕТ! Кто-то знает, как сохранить пробелы в строком поле? Заранее спасибо. |
|
04.11.2009, 08:12 | #2 |
Участник
|
Есть предложение, посмотреть, что в базе через клиента СУБД.
Есть ли пробелы? Браузер не показатель. И ещё создать job. Смотреть чё туда уходит.
__________________
Энергия молодых и неравнодушных способна изменить мир к лучшему. |
|
04.11.2009, 11:08 | #3 |
Участник
|
Я это сразу проверил. В базу данных пишется значение без пробелов, поэтому после повторного чтения записи из БД (при открытии табличного браузера), пробелы отсутствуют.
Думал может свойство Adjustment поможет, менял на Left и Right, но результат тот же. Есть ещё у кого-то идеи? |
|
04.11.2009, 11:27 | #4 |
Участник
|
Кстати, это проблема существует в любом строковом поле Аксапты. Всегда убираются крайние пробелы.
Кто-нибудь знает пример таблицы со строковым полем в стандартной Аксапте, где можно сохранять крайние пробелы? |
|
04.11.2009, 11:57 | #5 |
MCTS
|
Это не проблема
Это фича Если желаете хранить полноценный текст с пробелами etc. вместо поля типа String используйте тип Container. Например, что то вроде EDT Addressing. Хотя действительно после обновления конечные пробелы исчезают... Ну раз исчезают может строку символом переноса строки ограничивать X++: static void Job5552(Args _args) { Table table; str _str = "aaabbbcc \r"; ; ttsbegin; select forupdate table where table.RecId == 76446763; table.Addressing = _str; table.update(); ttscommit; } Кстати, а зачем пробелы понадобились?
__________________
В глухомани, в лесу Несмотря на красу Дни проводит Лиса Патрикевна. Я никак не пойму Отчего, почему Не пускают куму На деревню Последний раз редактировалось Russland; 04.11.2009 в 12:17. |
|
04.11.2009, 12:29 | #6 |
Участник
|
Спасибо за вариант. Но не совсем то. Будем искать..
Мне сохранять пробелы нужно аж в нескольких сценариях в моей текущей задаче, 1) у меня есть таблица с конвертацией специальных символом текста в HTML, к примеру « » пробел в « » и т.п. (см. для примера http://www.utexas.edu/learn/html/spchar.html ), поэтому мне нужно чтобы пробел сохранялся. 2) у меня есть таблица которая используется для динамического формирования имени номенклатуры, там много разных полей, к примеру подгружать строку из указанного метода и т.п., одни из которых строковые поля, где указывается точный текст который должен будет добавляться к имени номенклатуры, и нужно чтобы этот текст сохранялся в точно такой же форме, в какой пользователь его ввёл (где по бокам могут быть и пробелы). |
|
04.11.2009, 12:47 | #7 |
Участник
|
Цитата:
table.field = " ' <еще пробелы> ' "; |
|
04.11.2009, 13:05 | #8 |
Участник
|
Если брать в кавычки, то их нужно потом убирать, а как узнать, что это кавычки для пробелов или настоящие, которые пользователь хочет видеть в тексте..
Вообщем, раз нет простого решения, будем жить с тем что есть, т.к. эта задача не приницпиальная. Сделаю чекбокс, который будет говорить, что поле - пробел, а для другой задачи буду использовать числовое поле которое будет указывать кол-во пробелов после текста. Всем спасибо за отзывы и попытку помочь! |
|
04.11.2009, 14:17 | #9 |
Участник
|
Цитата:
Пользователю его не показывай, а добавляй и убирай при работе с базой |
|
04.11.2009, 14:39 | #10 |
MCTS
|
собственно я и предлагал терминировать строку спецсимволом, а при обработке строки просто его отбрасывать.
Не айс, конечно.
__________________
В глухомани, в лесу Несмотря на красу Дни проводит Лиса Патрикевна. Я никак не пойму Отчего, почему Не пускают куму На деревню |
|
05.11.2009, 08:45 | #11 |
Участник
|
Цитата:
P.S. Кстати, если Adjustment = Righ, то отсекаются пробелы не с конца, а с начала строки (что понятно). Так что в общем случае, только конечным спец.символом не обойтись |
|
07.04.2011, 12:02 | #12 |
Участник
|
Вот тоже понадобилось вводить концевые пробелы. Решение заключается в том, чтобы использовать, так называемый, "неразрывный пробел".
Неразрывный пробел визаульно выглядит как обычный пробел. Отличия заключаются в ASCII-коде который соответствует данному символу. Если "обычный" пробел имеет ASCII-код равный 32, то неразрывный пробел имеет ASCII-код равный 160. Как следствие, неразрывный пробел по другому интерпретируется и обрабатывается программной средой. В данном случае, подобные символы не удаляются при передаче серверу SQL, что, собственно, и требуется Чтобы ввести неразрывный пробел необходимо нажать левую клавишу Alt и не отпуская ее набрать на альтернативной цифровой клавиатуре (клавиши с цифрами, расположенные в правой части клавиатуры) число 255. После чего отпустите клавишу Alt. Решение подходит для любой версии Axapta. |
|
|
За это сообщение автора поблагодарили: alex55 (1), kpoxa (1). |
07.04.2011, 12:53 | #13 |
Участник
|
ИМХО. Можно сделать edit-метод на таблице, в котором записывать в поле значение строки из edit-метода, добавив к нему два спец-символа по бокам (даже не обязательно запрещённые в строке), а при чтении брать значение из поля, убирая два крайних символа по бокам.
|
|
|
За это сообщение автора поблагодарили: Владимир Максимов (5). |
07.04.2011, 13:04 | #14 |
Участник
|
Владимир, а почему код ascii 160, а набирать нужно 255 ?
|
|
07.04.2011, 13:55 | #15 |
Участник
|
Использование неразрывного пробела не требует вообще никакой модификации кода.
|
|
07.04.2011, 13:56 | #16 |
Участник
|
Откуда я знаю? Так получается. Нужную комбинацию клавишь я искал методом "научного тыка"
Если смотреть в таблице символов Windows: кнопка Пуск \ Программы \ Стандартные \ Служебные (System Tools) \ Таблица символов то ASCII-код надо заводить с ведущим нулем. Т.е. Alt + 0160 Последний раз редактировалось Владимир Максимов; 07.04.2011 в 14:10. |
|
07.04.2011, 14:11 | #17 |
Axapta
|
Насколько я понимаю, есть как минимум две кодировки ASCII: OEM (IBM) и ANSI (Windows). В первой неразрывный пробел имеет номер 255, во второй - 160.
Ну а дальше все просто: Цитата:
Alt+Numpad: A method of entering characters by typing in the character’s decimal code with the Numeric Pad keys (Num Lock turned on). In Windows:
Alt+<xxx>, where xxx is the decimal value of a code point, generates an OEM-encoded character. Alt+<0xxx>, where xxx is the decimal value of a code point, generates a Windows-encoded character. Alt+<+>+<xxxx>, where xxxx is the hexadecimal Unicode code point, generates a Unicode-encoded (UTF-16) character. То есть, Alt+255=Alt+0160. Если говорить об истории ASCII, то в исходной версии в ней было 7 бит (0-127). Затем IBM расширила ее до восьми бит. Ну а MS сделал в винде свою восьмибитную кодировку ANSI. То есть, первые 127 символов в обеих кодировках совпадают (но есть нюансы в отображении некоторых символов), различия появляются дальше. Последний раз редактировалось oip; 07.04.2011 в 14:21. Причина: добавил про историю |
|
|
За это сообщение автора поблагодарили: S.Kuskov (1). |
07.04.2011, 14:14 | #18 |
Участник
|
|
|
07.04.2011, 14:22 | #19 |
Участник
|
Необходимость сохранения концевого пробела - это очень исключительная ситуация. Как правило, связана со специфической программной обработкой некой настроечной информации. Т.е. доступ к этим данным имеет ну очень ограниченный круг пользователей. Поэтому не вижу проблемы обучить пользователя...
|
|
07.04.2011, 15:06 | #20 |
Участник
|
Цитата:
Сообщение от Владимир Максимов
Необходимость сохранения концевого пробела - это очень исключительная ситуация. Как правило, связана со специфической программной обработкой некой настроечной информации. Т.е. доступ к этим данным имеет ну очень ограниченный круг пользователей. Поэтому не вижу проблемы обучить пользователя...
P.S. Делали подобную модификацию для выгрузки - там тоже нужны были концевые пробелы. Модификация несложная, но пользователю удобно и видно всё. Правда, мы концевые символы не скрывали, просто убирали их при использовании внутри системы. |
|