Форумы HiProg.com - MS ACCESS, VBA, VB

 

Ответить на сообщение

Вернуться к теме

Вы отвечаете на сообщение:

ник: Анатолий (Киев)
Олег, я думаю, что это надо делать с помощью Recordset-ов. Типа так:

Do Until rsTabl1.EOF
    s = rsTabl1![Алиас]:  t = rsTabl1![Тип]
    rsTabl2.FindFirst "[Тип]=" & t   
 Do Until rsTabl2.NoMatch
    s = Replace(s, rsTabl2![Старое значение], NZ(rsTabl2![Новое значение], " "))
    rsTabl2.FindNext "[Тип]=" & t   
 Loop    
    s = InsertSpaceBetweenGroupSimbols(s)
 If rsTabl1![Алиас] <> s Then
    rsTabl1.Edit
    rsTabl1![Алиас] = s
    rsTabl1.Update
 End If
    rsTabl1.MoveNext
Loop

Каждая запись будет обрабатываться только 1 раз, причем обновление будет только там, где текст изменился.
Если применить ADODB.Recordset с UpdateBatch или транзакции, то процесс можно значительно ускорить.

Функцию InsertSpaceBetweenGroupSimbols я представляю так:
Проход по строке с предпоследнего по первый символ, анализ текущего и следующего символа с помощью Like и вставка пробела в строку при необходимости.

ДОБАВЛЕНО. А вот и функция:
Function InsertSpaceBetweenGroupSimbols(ByVal s$) As String
Dim i, s1 As String * 1, s2 As String * 1

 For i = Len(s) - 1 To 1 Step -1
    s1 = Mid$(s, i, 1): s2 = Mid$(s, i + 1, 1)
  If s1 = " " Or s2 = " " Then
  ElseIf s1 Like "[A-&#255;]" Then
   If s2 Like "[!A-&#255;]" Then s = Left$(s, i) & " " & Mid$(s, i + 1)
  ElseIf s1 Like "[0-9]" Then
   If s2 Like "[!0-9]" Then s = Left$(s, i) & " " & Mid$(s, i + 1)
  ElseIf s1 Like "[!A-&#255;0-9]" Then
   If s2 Like "[A-&#255;0-9]" Then s = Left$(s, i) & " " & Mid$(s, i + 1)
  End If
 Next
    InsertSpaceBetweenGroupSimbols = s
End Function


Ваше имя:

Пароль:

Цитировать: [quote][/quote] Код: [code][/code]
Жирный: [b][/b] Наклонный: [i][/i]
URL: [url][/url] 

Сообщение:

 Размер файла не более 50 Кбт. Большие файлы можно размещать на www.slil.ru

Прикрепить:

 

Для вставки смайлов в текст щелкните по значку.