Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft Access Новый топик    Ответить
 о копировании данных  [new]
Маюша
Member

Откуда:
Сообщений: 9
Всем с Новым Годом! Help me please!!!
Есть таблица с множеством столбцов. В одном из полей данные объеденены через пробел.
|A|B|C|D E G H|K|L|.....

Нужно разложить их отдельно на свою строку.
|A|B|C|D|K|L|
|A|B|C|E|K|L|
|A|B|C|G|K|L|
|A|B|C|H|K|L|

С вашей помощью ранне удалось успешно разложить всё по полочкам, вот только, как скопировать данные с других полей? Что дописать в нижеприведенной функции? голова совсем туго соображет после нового года

Function SplitMemoToRecs()
'
Const MyTable = "Table1" 'имя таблицы
Const MyField = "Field1" 'имя разделяемого поля
Const MyDelim = " " 'разделитель
'
On Error GoTo err1
Dim i As Long
Dim r As Long
Dim n As Long
Dim s As String
Dim z() As String

Dim db As DAO.Database
Set db = CurrentDb()

'Открыть рекордсет для этой таблицы.
Dim ds As DAO.Recordset
Set ds = db.OpenRecordset(MyTable, dbOpenDynaset)
ds.MoveLast
n = ds.RecordCount
ds.MoveFirst

'Идти по записям от начала до конца.
Do While Not ds.EOF
'подсчитываем число обработанных записей
'если оно стало больше начального числа записей - конец обработки
r = r + 1: If r > n Then Exit Do

'Для каждой записи брать значение этого поля
s = Nz(ds(MyField).Value, "")

'Разбить это значение на части по пробелам - сделать массив значений.
z = Split(s, MyDelim)

'Обновить поле текущей записи значением 1-го элемента массива.
'Добавить новые записи в рекордсет для прочих элементов массива.
For i = 0 To UBound(z)
If i = 0 Then ds.Edit Else ds.AddNew
ds(MyField).Value = z(i)
ds.Update
Next i
ds.MoveNext
Loop
MsgBox "Процесс успешно завершен", 64
Exit Function

err1:
MsgBox Error, 48
Exit Function
End Function
2 янв 06, 19:05    [2226611]     Ответить | Цитировать Сообщить модератору
 Re: о копировании данных  [new]
Karfaqen
Member

Откуда:
Сообщений: 7010
Маюша
вот только, как скопировать данные с других полей?


Как же как же...:
Karfaqen
У вас в "большущей таблице" одно это поле? Решите, надо ли что-то записывать в прочие поля для вновь добавляемых записей
Маюша
В таблице, такое поле для разбиения одно и в другие поля ничего добавлять не нужно.


Можно считать значения всех полей в массив (там же, где вы читаете значение MField). A ниже, там где добавляете записи - переписать этот массив а поля новых записей (все, кроме MField - оно из отдельного массива). Успехов!
2 янв 06, 19:40    [2226647]     Ответить | Цитировать Сообщить модератору
 Re: о копировании данных  [new]
Маюша
Member

Откуда:
Сообщений: 9
Спасибо ещё раз за помощь Karfagen :)
2 янв 06, 21:23    [2226735]     Ответить | Цитировать Сообщить модератору
 Re: о копировании данных  [new]
Мшсещырф
Guest
в принципе, это можно сделать одним запросом.
"теория вопроса" здесь
https://www.sql.ru/articles/mssql/03060701ArraysAndListsInSQLServer.shtml#tblnum

пример прикладывается

К сообщению приложен файл (TestCharsAndNumbers.zip - 8Kb) cкачать
2 янв 06, 22:30    [2226787]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft Access Ответить