Функция VBA Trim () обрезает текст странным образом! - PullRequest
2 голосов
/ 06 мая 2009

Я пытаюсь обрезать посторонние пробелы в конце мемо-поля в MS Access. Я пытался сделать это несколькими способами:

1) запрос на обновление с обновлением поля до Trim ([fieldname]). По какой-то причине это ничего не делает. Пробелы все еще там.

2) обновление с использованием функции Macro, в которой содержимое поля передается в виде строки, а затем обрабатывается с помощью функции Trim () и возвращается обратно. Это действительно странно, потому что кажется, что обрезает текст в поле в совершенно случайных местах (разных для каждой записи). Иногда 366 символов, иногда 312, иногда 280.

3) то же, что и выше, но с RTrim ()

Как я могу испортить такую ​​простую функцию ?! Любая помощь высоко ценится. Хотел бы сохранить мои волосы.

-Sam

Ответы [ 2 ]

1 голос
/ 07 мая 2009

Согласно этой статье :

Оба типа данных Text и Memo хранят только символы, введенные в поле; пробелы для неиспользуемых позиций в поле не сохраняются.

Как предположил гипоксид, на самом деле они не могут быть пробелами

Редактировать

Я подозреваю, что последний символ в поле - это символ возврата каретки или перевода строки. Если это так, то Trim (или любые варианты Trim - RTrim \ LTrim) не будут работать, так как они удаляют только пробелы. Как указано в комментарии «onedaywhen», попробуйте использовать функцию ASC, чтобы определить действительный код символа последнего символа в поле memo. Вы можете использовать что-то вроде следующего в запросе, чтобы сделать это:

ASC(Right(MyFieldName,1))

Сравните результат запроса с набором символов, чтобы определить фактический символ, который заканчивается в памятном поле. (Пробел = 32, перевод строки = 10, возврат каретки = 13).

Возможно, вам придется проверить последний символ и, если это перевод строки или возврат каретки, удалите символ и затем примените функцию обрезки к остальной части строки.

0 голосов
/ 06 мая 2009

Это может датировать меня, но есть ли в Access разные типы символов для фиксированной и переменной длины? в SQL CHAR (10) всегда будет иметь длину 10 символов, дополненную, если необходимо, в то время как VARCHAR (10) будет иметь размер «до» до 10. Усечение CHAR (10) просто возвращает пробелы.

...