2009-05-06 4 views
2

Я пытаюсь обрезать посторонние пробелы в конце поля memo в MS Access. Я попытался сделать это несколькими способами:Функция VBA Trim(), усекающая текст странно!

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

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

3) такой же, как и выше, но с RTrim()

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

-Sam

+0

Я думаю, у вас есть какой-то «невидимый» символ ascii, такой как Line Return или Carriage Feed в конце вашей строки. Можете ли вы написать небольшую процедуру, перечисляющую коды ascii всех символов один за другим? –

ответ

0

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

+0

ACE/Jet имеет разные типы данных для NCHAR и NVARCHAR соответственно (они также могут быть отмечены WITH COMPRESSION, что, возможно, эквивалентно их CHAR и VARCHAR). Тем не менее, OP сказал, что это столбец MEMO, который является блочными данными (FWIW, ближайшим совпадением на земле SQL Server является NTEXT). – onedaywhen

1

В соответствии с этим article:

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

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

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

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

ASC(Right(MyFieldName,1)) 

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

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

+0

Мне кажутся как пробелы, так и разрывы строк. По крайней мере, если я поместил свой курсор в последнюю букву/пунктуацию в поле memo и стрелку вправо, удерживая клавишу shift, пробелы и разрывы строк обнаруживаются подсветкой. – 2009-05-06 21:43:46

+0

Если я отправляю сообщение слияния в документ Word, пробел в конце отображается как пробелы и символы абзаца, когда я включаю невидимые символы в Word. Поэтому я считаю, что это пробелы и разрывы строк. Как бы то ни было, я мог подтвердить, что это они? – 2009-05-06 21:51:04

+0

Используйте функцию ASC(). – onedaywhen