powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Удалить верхний апостроф
16 сообщений из 16, страница 1 из 1
Удалить верхний апостроф
    #35916537
Ёклмн
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Парни всем привет, есть вопрос:
Импортирую данные из Экселя в dbf в Аксесе, вобщем получаю такие данные во всех полях перед данными стоит пробел, нашел функцию по удалению пробела вот такую:
Function TrimAll(ByVal strText As String) As String
Dim strTemp As String
Dim strOut As String
Dim intI As Integer
Dim strCh As String * 1

' Удаление пробелов вначале и в конце строки.
strTemp = Trim(strText)
For intI = 1 To Len(strTemp)
' Поочередный просмотр каждого символа.
strCh = Mid$(strTemp, intI, 1)
If Not strCh = " " Then
strOut = strOut & strCh
End If
Next intI
TrimAll = strOut
End Function


А запрос соответственно переделываешь на:
UPDATE tbl2 SET tbl2.License = TrimAll([License]);

Но после исполнения запроса все осталось как было, вобщем просмотрел данные в Экселе оказывается во всех полях, столбцах идет не пробел первым а вот такой символ:' Иванов. Причем в аксесе верхний апостроф визуально не отображается виден только пробел. Подскажите как его удалить вместе с пробелом?
...
Рейтинг: 0 / 0
Удалить верхний апостроф
    #35916550
Код: plaintext
1.
UPDATE tbl2 SET tbl2.License = Replace(Nz([License], ""), "' ", "");
...
Рейтинг: 0 / 0
Удалить верхний апостроф
    #35916563
Ёклмн
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...............................
Код: plaintext
1.
UPDATE tbl2 SET tbl2.License = Replace(Nz([License], ""), "' ", "");

Неа не проходит, предлогает обновить записи обновляем, а на деле как было так и осталось!
...
Рейтинг: 0 / 0
Удалить верхний апостроф
    #35916581
Ёклмн...............................
Код: plaintext
1.
UPDATE tbl2 SET tbl2.License = Replace(Nz([License], ""), "' ", "");

Неа не проходит, предлогает обновить записи обновляем, а на деле как было так и осталось!


вот это сделай
Код: plaintext
1.
SELECT Asc(Mid(tbl2.License,  1 ,  1 )) As p1, Asc(Mid(tbl2.License,  2 ,  1 )) As p2 FROM tbl2 WHERE tbl2.License IS NOT NULL
и покажеш что вывело
...
Рейтинг: 0 / 0
Удалить верхний апостроф
    #35916597
Ёклмн
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...............................Ёклмн...............................
Код: plaintext
1.
UPDATE tbl2 SET tbl2.License = Replace(Nz([License], ""), "' ", "");

Неа не проходит, предлогает обновить записи обновляем, а на деле как было так и осталось!


вот это сделай
Код: plaintext
1.
SELECT Asc(Mid(tbl2.License,  1 ,  1 )) As p1, Asc(Mid(tbl2.License,  2 ,  1 )) As p2 FROM tbl2 WHERE tbl2.License IS NOT NULL
и покажеш что вывело
Вывел таблицу с двумя полями:
p1 p2
209 235
207 240
160 193
160 202
Это что?
...
Рейтинг: 0 / 0
Удалить верхний апостроф
    #35916625
Rivkin Dmitry
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ёклмн,

Похоже, это мусор! Вопрос, как он туда попал. А как ты "импортируешь данные из Экселя в dbf в Аксесе"?
...
Рейтинг: 0 / 0
Удалить верхний апостроф
    #35916631
Ёклмн...
Это что?

это ASCI-кода первых 2-х символов
Код: plaintext
1.
2.
3.
4.
?Asc("'")
  39  
?Asc(" ")
  32  
ни апострофа ни пробела - вначале нет

другое дело что вот это
Код: plaintext
1.
2.
?Chr( 160 )
 
какой-то служебный символ...
вот так попробуй
Код: plaintext
1.
UPDATE tbl2 SET tbl2.License = Replace(Nz([License], ""), Chr( 160 ), "");
...
Рейтинг: 0 / 0
Удалить верхний апостроф
    #35916675
Ёклмн
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...............................Ёклмн...
Это что?

это ASCI-кода первых 2-х символов
Код: plaintext
1.
2.
3.
4.
?Asc("'")
  39  
?Asc(" ")
  32  
ни апострофа ни пробела - вначале нет

другое дело что вот это
Код: plaintext
1.
2.
?Chr( 160 )
 
какой-то служебный символ...
вот так попробуй
Код: plaintext
1.
UPDATE tbl2 SET tbl2.License = Replace(Nz([License], ""), Chr( 160 ), "");


Ок спасибо, я так вначале и подумал что мусор какой то!
Теперь все нормально
...
Рейтинг: 0 / 0
Удалить верхний апостроф
    #35916692
Rivkin Dmitry
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...............................,

А вдруг с мусором придет какой-нибудь еще символ? Желательно понять источник мусора...
...
Рейтинг: 0 / 0
Удалить верхний апостроф
    #35916701
Фотография CoolMind
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ёклмн, или я чего-то не понимаю, или тут всё просто.
Во-первых, данные в Экселе хранятся так, видимо, в целях правильности написания текста. Т.е. в Экселе если в начале ячейки стоит апостроф, то дальше понимается как текст.
Во-вторых, импорт из Экселя можно было сделать сразу с учётом этой особенности.
В-третьих, даже если импорт проведён стандартными средствами, а требуется лишь написать обновление таблицы, то непонятно, зачем вы пишете такую функцию TrimAll. Если вы хотите все пробелы удалить из исходных записей, то есть проще: Replace([License], " ", "").
В-четвёртых, что касается апострофа. Если даже допустить, что он не всегда присутствует в каждой записи, то чем вам не нравится сочетание Replace, InStr и Mid или Replace, IIf, Mid?
InStr определит, где находится апостроф (если в первом символе, то работать дальше нужно).
А вернее, надо так: [License] = IIf(InStr([License], "'", 1) = 1; Mid([License], 2), [License]),
в кавычках написан апостроф.
...
Рейтинг: 0 / 0
Удалить верхний апостроф
    #35916725
Rivkin Dmitry...............................,

А вдруг с мусором придет какой-нибудь еще символ? Желательно понять источник мусора...

согласен, это было б лучше

..в своё время тоже столкнулся с такой проблемой (и тоже был этот 160 символ), но у меня была уже заполненная БД в Аксе из Экселя (не мною) - и откуда он там взялся - выяснить уже было не реально....
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Удалить верхний апостроф
    #39630951
kulib
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ёклмн
Код: sql
1.
UPDATE tbl2 SET tbl2.License = Replace(Nz([License], ""), Chr(160), "");


Ок спасибо, я так вначале и подумал что мусор какой то!
Теперь все нормально
Здравствуйте спустя века!)))
А вот у меня не сработало.
Предложите пожалуйста вариант как справиться с этой "болезнью" в таком раскладе: простейший экспорт запроса (исходные таблицы прилинкованные dbf) в эксель приводит к тому же в результате - в текстовых полях апострофы в начале!
Проапдейтил предложенным методом исходную таблицу, но безрезультатно.

Причем в самом Экселе Application.Replace отрабатывает, но они не убираются, а пользовательский метод "Найти/Заменить" говорит что таких данных на листе вообще не обнаружено, хотя визуально они видны!
...
Рейтинг: 0 / 0
Удалить верхний апостроф
    #39630956
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Отображение апострофа не означает, что он есть в данных - это признак принудительного форматирования в текст.
...
Рейтинг: 0 / 0
Удалить верхний апостроф
    #39630963
kulib
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ёклмнвот это сделай
Код: vbnet
1.
SELECT Asc(Mid(tbl2.License, 1, 1)) As p1, Asc(Mid(tbl2.License, 2, 1)) As p2 FROM tbl2 WHERE tbl2.License IS NOT NULL


и покажеш что вывело
У меня это вывело то, что 160-го у меня нигде нет. (32-го и 39-го тоже). Тогда откуда же берутся эти апострофы в итоге?
...
Рейтинг: 0 / 0
Удалить верхний апостроф
    #39630966
kulib
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
AkinaОтображение апострофа не означает, что он есть в данных - это признак принудительного форматирования в текст.
Это именно признак, или признак-последствие того, что данные были переформатированы в текст? Просто с другими-то текстовыми полями таких трюков не происходит никогда.
...
Рейтинг: 0 / 0
Удалить верхний апостроф
    #39631716
kulib, а каким способов и в каком офисе вы выгружаете данные в Ёксель?
Я (в Офис 2010) перепробовал несколько методов но апостроф не получил (в т.ч. и для текстового поля с числовой строкой). Хотя в раньше (оф 2003) я такое получал и даже боролся.
Попробуйте получить массив значений диапазона, а затем присвоить его обратно диапазону.
Вот пример (в модуле Ёкселя):
Код: vbnet
1.
2.
3.
4.
5.
6.
Sub test()
Dim v, rng As Range
    Set rng = ActiveSheet.UsedRange
    v = rng.Value
    rng.Value = v
End Sub

Проверил.
...
Рейтинг: 0 / 0
16 сообщений из 16, страница 1 из 1
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Удалить верхний апостроф
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]