Rambler's Top100
Форум: MS ACCESSVBVBA MS OfficeMS SQL server
Новые сообщения: 0000

Форум: MS ACCESS

Вопросы связанные с MS ACCESS

Обновить визитку
Участники «Online»
Все участники

 
 

Доброго времени суток, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Подскажите как с поля перенести значения, разделенные «/» или «, » в отдельные поля.
 
 автор: Amer   (24.03.2009 в 14:51)   личное сообщение
 
 

Подскажите как с поля имеющее следующее содержание:
ASTM A312/ASME SA312/EN 10216-5, TC1 перенести значения, разделенные «/» или «, » в отдельные поля.

  Ответить  
 
 автор: Дрюня   (24.03.2009 в 15:00)   личное сообщение
 
 

используйте Split()

  Ответить  
 
 автор: Анатолий (Киев)   (24.03.2009 в 18:57)   личное сообщение
 
 

Если предполагаются различные символы-разделители одновременно, то лучше выполнить последовательный перебор символов и сравнение с образцами. Например:

Function SplitString(sText As String, ParamArray Seps()) As Collection
Dim i&, j&, x%, s As String * 1
    Set SplitString = New Collection: i = 1
 For j = i To Len(sText)
    s = Mid$(sText, j, 1)
  For x = LBound(Seps) To UBound(Seps)
   If s = Seps(x) Then
    SplitString.Add Mid$(sText, i, j - i): i = j + 1: Exit For
   End If
  Next x
 Next j
    j = Len(sText): If i < j Then SplitString.Add Mid$(sText, i)
End Function


А это пример вызова:

Sub TestSplitString()
Dim col As Collection, v As Variant
    Set col = SplitString("ASTM A312/ASME SA312/EN 10216-5, TC1", "/", ",")
 For Each v In col
Debug.Print Trim$(v)
 Next
End Sub

  Ответить  
 
 автор: Amer   (24.03.2009 в 21:53)   личное сообщение
6 Кб.
 
 

Если можно в примере.

  Ответить  
 
 автор: Анатолий (Киев)   (25.03.2009 в 10:07)   личное сообщение
 
 

Открываете Recordset на таблице "Стандарт". В цикле по записям читаете значение поля, передаете в функцию, получаете коллекцию подстрок. В цикле по коллекции вставляете значение подстроки через Recordset (или запросом INSERT INTO...VALUES...) в другую (или эту же?) таблицу.

Что значит "перенести значения ... в отдельные поля"? Это поля в той же записи той же таблицы? Из вашего примера непонятно, куда вставлять.

  Ответить  
 
 автор: Amer   (25.03.2009 в 10:32)   личное сообщение
6 Кб.
 
 

Вставлять значения в другую таблицу (Стандарт2).

  Ответить  
 
 автор: Анатолий (Киев)   (25.03.2009 в 11:50)   личное сообщение
 
 

Добавьте в модуль и запускайте:

Sub SplitRecords()
Dim rsFrom As Recordset, rsTo As Recordset, v As Variant
    Set rsFrom = CurrentDb.OpenRecordset("Стандарт")
    Set rsTo = CurrentDb.OpenRecordset("Стандарт2")
 Do Until rsFrom.EOF
  For Each v In SplitString(rsFrom![Стандарт], "/", ",")
    rsTo.AddNew
    rsTo![Стандарт2] = Trim$(v)
    rsTo.Update
  Next
'    rsFrom.Delete  'Исходную запись можно и удалить
    rsFrom.MoveNext
 Loop
    rsFrom.Close: rsTo.Close
End Sub

Amer, у меня такое подозрение, что вам не знакомо слово "Recordset".

  Ответить  
 
 автор: Amer   (25.03.2009 в 12:53)   личное сообщение
 
 

Функция в Access 97 вызывает ошибку, применить не получается. А так, что надо. Спасибо. Помогите подключить в 97, т. к. есть существующая база.

  Ответить  
 
 автор: Анатолий (Киев)   (25.03.2009 в 17:54)   личное сообщение
 
 

У меня нет А97. В формате А2000 проверил. Преобразовал в А97 - работает тоже, но ссылки на библиотеки остались новые.

На какой строке кода вылетает ошибка и что рассказывает?

  Ответить  
 
 автор: Amer   (25.03.2009 в 18:01)   личное сообщение
 
 


Private Sub Кнопка2_Click()
On Error GoTo Err_Кнопка2_Click

Dim rsFrom As Recordset, rsTo As Recordset, v As Variant
    Set rsFrom = CurrentDb.OpenRecordset("Стандарт")
    Set rsTo = CurrentDb.OpenRecordset("Стандарт2")
 Do Until rsFrom.EOF
    MsgBox 123
  For Each v In SplitString(rsFrom![Стандарт], "/", ",") 'Вызывает  окно закрытия приложения.
    MsgBox 457
    rsTo.AddNew
    rsTo![Стандарт2] = Trim$(v)
    rsTo.Update
  Next
'    rsFrom.Delete  'Исходную запись можно и удалить
    rsFrom.MoveNext
 Loop
    rsFrom.Close: rsTo.Close

Exit_Кнопка2_Click:
    Exit Sub

Err_Кнопка2_Click:
    MsgBox Err.Description
    Resume Exit_Кнопка2_Click
    
End Sub

на другой машине то же.

  Ответить  
 
 автор: Анатолий (Киев)   (22.04.2009 в 13:40)   личное сообщение
 
 


For Each v In SplitString(rsFrom![Стандарт], "/", ",") 'Вызывает окно закрытия приложения.

Попробуйте эту стоку заменить на:

Dim col As Collection
Set col = SplitString(rsFrom![Стандарт], "/", ",")
For Each v In col

Возможно А97 не поддерживает такие циклы.

  Ответить  
 
 автор: Amer   (25.03.2009 в 16:57)   личное сообщение
 
 

  Ответить  
 
 автор: AlexeyFirst   (22.04.2009 в 09:12)   личное сообщение
 
 

Может быть не в тему...

Если мне нужно разнести строку с разделителями по разным полям, я использую Left и Right...

  Ответить  
HiProg.com - Технологии программирования
Rambler's Top100 TopList