|
|
|
| Подскажите как с поля имеющее следующее содержание:
ASTM A312/ASME SA312/EN 10216-5, TC1 перенести значения, разделенные «/» или «, » в отдельные поля. | |
|
| |
|
|
|
|
| Если предполагаются различные символы-разделители одновременно, то лучше выполнить последовательный перебор символов и сравнение с образцами. Например:
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
|
| |
|
| |
|
6 Кб. |
|
| Если можно в примере. | |
|
| |
|
|
|
| Открываете Recordset на таблице "Стандарт". В цикле по записям читаете значение поля, передаете в функцию, получаете коллекцию подстрок. В цикле по коллекции вставляете значение подстроки через Recordset (или запросом INSERT INTO...VALUES...) в другую (или эту же?) таблицу.
Что значит "перенести значения ... в отдельные поля"? Это поля в той же записи той же таблицы? Из вашего примера непонятно, куда вставлять. | |
|
| |
|
6 Кб. |
|
| Вставлять значения в другую таблицу (Стандарт2). | |
|
| |
|
|
|
| Добавьте в модуль и запускайте:
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". | |
|
| |
|
|
|
| Функция в Access 97 вызывает ошибку, применить не получается. А так, что надо. Спасибо. Помогите подключить в 97, т. к. есть существующая база. | |
|
| |
|
|
|
| У меня нет А97. В формате А2000 проверил. Преобразовал в А97 - работает тоже, но ссылки на библиотеки остались новые.
На какой строке кода вылетает ошибка и что рассказывает? | |
|
| |
|
|
|
|
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
|
на другой машине то же. | |
|
| |
|
|
|
|
For Each v In SplitString(rsFrom![Стандарт], "/", ",") 'Вызывает окно закрытия приложения.
| Попробуйте эту стоку заменить на:
Dim col As Collection
Set col = SplitString(rsFrom![Стандарт], "/", ",")
For Each v In col
|
Возможно А97 не поддерживает такие циклы. | |
|
| |
|
|
|
|
| Может быть не в тему...
Если мне нужно разнести строку с разделителями по разным полям, я использую Left и Right... | |
|
| |