Гость
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Экспорт данных каждой строки из Access в отдельный XML файл при помощи макроса / 13 сообщений из 13, страница 1 из 1
27.08.2020, 14:25
    #39992988
serg_vba123
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Экспорт данных каждой строки из Access в отдельный XML файл при помощи макроса
Привет друзья!
Помогите переделать макрос позаимствованный у qwerty112
Задача экспортировать данные каждой отдельной строки из Access в отдельные XML файлы с нодами (по шаблону) макросом VB с преобразованием формата даты ("dd\.mm\.yyyy hh\.mm\.ss") в UNIX.
Код для преобразование обычного формата даты в UNIX Epoch нашел вот этот
Visual Basic
Код: vbnet
1.
DateDiff("s", "01/01/1970 00:00:00", поле даты)



, но не знаю как применить.


данные в xml попадают с накоплением, т.е. в первом xml данные первой строки Access, во втором xml из первой и второй строки Access, в третьем из трех. Как исправить?

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
Sub ExportXML()
    Dim xmlParser As Object ' MSXML2.DOMDocument
    Dim xmlInstr As Object ' MSXML2.IXMLDOMProcessingInstruction
    Dim rootNode As Object ' MSXML2.IXMLDOMElement
    Dim subNode1 As Object ' MSXML2.IXMLDOMElement
    Dim subNode2 As Object ' MSXML2.IXMLDOMElement
    Dim subNode3 As Object ' MSXML2.IXMLDOMElement
    Dim subNode4 As Object ' MSXML2.IXMLDOMElement
    
    Dim rst As Object 'Dao.recordset
    
Set xmlParser = CreateObject("Msxml2.DOMDocument")
Set xmlInstr = xmlParser.createProcessingInstruction("xml", "version='1.0' encoding='UTF-8'")
xmlParser.appendChild xmlInstr
    
Set rootNode = xmlParser.appendChild(xmlParser.createElement("root")) 'создаем рутовую ноду

Set rst = CurrentDb.OpenRecordset("select * from ExportXML order by field_1") ' ExportXML это название запроса в базе Access
    
Do While Not rst.EOF

'Этот "кусок кода" будет повторяться в цикле, для всех значений в field_1
        
Set subNode1 = rootNode.appendChild(xmlParser.createElement("orders"))
Set subNode2 = subNode1.appendChild(xmlParser.createElement("order"))
    subNode2.setAttribute "descr", "Заказ"
    subNode2.setAttribute "field_1", rst.fields("field_1")
    subNode2.setAttribute "field_2", rst.fields("field_2")
    subNode2.setAttribute "order_bd", "какие то данные"
    subNode2.setAttribute "order_jst", "какие то данные"
    subNode2.setAttribute "field_3", Format(rst.fields("field_3"), "dd\.mm\.yyyy hh\.mm\.ss")
    subNode2.setAttribute "field_4", Format(rst.fields("field_4"), "dd\.mm\.yyyy hh\.mm\.ss")
    
    
Set subNode3 = rootNode.appendChild(xmlParser.createElement("params"))
Set subNode4 = subNode3.appendChild(xmlParser.createElement("param"))
    subNode4.setAttribute "field_5", rst.fields("field_5")
    subNode4.setAttribute "dscr", "какая то инфа"
    subNode4.setAttribute "field_6", rst.fields("field_6")
  
  
'Debug.Print xmlParser.XML

xmlParser.Save CurrentProject.Path & "\" & rst.fields("field_1") & ".xml"

'конец "куска кода"

DoEvents

rst.MoveNext

Loop

rst.Close
     
    Set xmlParser = Nothing
    Set rst = Nothing

End Sub


прикрепил пример Access с выполнением кода по нажатию Кнопки.
...
Рейтинг: 0 / 0
27.08.2020, 14:28
    #39992989
Roman Mejtes
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Экспорт данных каждой строки из Access в отдельный XML файл при помощи макроса
кто то понял, что хочет автор?
...
Рейтинг: 0 / 0
27.08.2020, 14:48
    #39992999
serg_vba123
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Экспорт данных каждой строки из Access в отдельный XML файл при помощи макроса
Roman Mejtes,
в таблице Acсess 3 строки с данными (пример выше), требуется данные из каждой строки сохранить в отдельный xml файл

а у меня получается так, прикрепил
...
Рейтинг: 0 / 0
28.08.2020, 08:50
    #39993239
HandKot
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Экспорт данных каждой строки из Access в отдельный XML файл при помощи макроса
serg_vba123,
Вам надо в цикле каждый раз пересоздавать документ
А не в самом начале

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
Do While Not rst.EOF

Set xmlParser = CreateObject("Msxml2.DOMDocument")
Set xmlInstr = xmlParser.createProcessingInstruction("xml", "version='1.0' encoding='UTF-8'")
xmlParser.appendChild xmlInstr
    
Set rootNode = xmlParser.appendChild(xmlParser.createElement("root")) 'создаем рутовую ноду

'Этот "кусок кода" будет повторяться в цикле, для всех значений в field_1
        
Set subNode1 = rootNode.appendChild(xmlParser.createElement("orders"))
Set subNode2 = subNode1.appendChild(xmlParser.createElement("order"))
    subNode2.setAttribute "descr", "Заказ"
    subNode2.setAttribute "field_1", rst.fields("field_1")
    subNode2.setAttribute "field_2", rst.fields("field_2")
    subNode2.setAttribute "order_bd", "какие то данные"
    subNode2.setAttribute "order_jst", "какие то данные"
    subNode2.setAttribute "field_3", Format(rst.fields("field_3"), "dd\.mm\.yyyy hh\.mm\.ss")
    subNode2.setAttribute "field_4", Format(rst.fields("field_4"), "dd\.mm\.yyyy hh\.mm\.ss")
    
    
Set subNode3 = rootNode.appendChild(xmlParser.createElement("params"))
Set subNode4 = subNode3.appendChild(xmlParser.createElement("param"))
    subNode4.setAttribute "field_5", rst.fields("field_5")
    subNode4.setAttribute "dscr", "какая то инфа"
    subNode4.setAttribute "field_6", rst.fields("field_6")
  
  
'Debug.Print xmlParser.XML

xmlParser.Save CurrentProject.Path & "\" & rst.fields("field_1") & ".xml"

'конец "куска кода"

DoEvents

rst.MoveNext

Loop
...
Рейтинг: 0 / 0
28.08.2020, 09:55
    #39993262
serg_vba123
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Экспорт данных каждой строки из Access в отдельный XML файл при помощи макроса
HandKot,

попробовал, VB ругается на присутствие Do While в начале формирования XML
...
Рейтинг: 0 / 0
28.08.2020, 09:57
    #39993263
serg_vba123
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Экспорт данных каждой строки из Access в отдельный XML файл при помощи макроса
HandKot,

не увидел у вас вот эту строку
Код: vbnet
1.
Set rst = CurrentDb.OpenRecordset("select * from ExportXML order by field_1") ' ExportXML это название запроса в базе Access



вы ее поместили до Do While?
...
Рейтинг: 0 / 0
28.08.2020, 09:59
    #39993265
serg_vba123
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Экспорт данных каждой строки из Access в отдельный XML файл при помощи макроса
да, все понял. разобрался. Спасибо вам большое. А с форматом времени поможете?

serg_vba123
HandKot,

не увидел у вас вот эту строку
Код: vbnet
1.
Set rst = CurrentDb.OpenRecordset("select * from ExportXML order by field_1") ' ExportXML это название запроса в базе Access



вы ее поместили до Do While?
...
Рейтинг: 0 / 0
28.08.2020, 10:12
    #39993273
HandKot
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Экспорт данных каждой строки из Access в отдельный XML файл при помощи макроса
serg_vba123
да, все понял. разобрался. Спасибо вам большое. А с форматом времени поможете?


у Вас уже все есть
Код: vbnet
1.
Format(rst.fields("field_3"), "dd\.mm\.yyyy hh\.mm\.ss")
...
Рейтинг: 0 / 0
28.08.2020, 11:14
    #39993328
serg_vba123
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Экспорт данных каждой строки из Access в отдельный XML файл при помощи макроса
мне нужно эту дату в формат UNIX Epoch конвертировать
нашел вот это

текущая дата
Код: vbnet
1.
DateDiff("s", "01/01/1970 00:00:00", Now())



указанная дата
Код: vbnet
1.
DateDiff("s", "01/01/1970 00:00:00", поле даты)



, как применить не знаю(((

*Сервер не понимает обычный формат даты(

у Вас уже все есть
Код: vbnet
1.
Format(rst.fields("field_3"), "dd\.mm\.yyyy hh\.mm\.ss")

[/quot]
...
Рейтинг: 0 / 0
28.08.2020, 11:15
    #39993331
serg_vba123
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Экспорт данных каждой строки из Access в отдельный XML файл при помощи макроса
мне нужно эту дату в формат UNIX Epoch конвертировать
нашел вот это

текущая дата
Код: vbnet
1.
DateDiff("s", "01/01/1970 00:00:00", Now())



указанная дата
Код: vbnet
1.
DateDiff("s", "01/01/1970 00:00:00", поле даты)



, как применить не знаю(((

*Сервер не понимает обычный формат даты(

у Вас уже все есть
Код: vbnet
1.
Format(rst.fields("field_3"), "dd\.mm\.yyyy hh\.mm\.ss")
...
Рейтинг: 0 / 0
28.08.2020, 11:24
    #39993337
serg_vba123
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Экспорт данных каждой строки из Access в отдельный XML файл при помощи макроса
т.е. у меня в примере есть поля field_3 и field_4
в них будет дата формата 01.07.2020 11:00:00 , а UNIX это 1593601200 (колво секунд от 01.01.1970)

вот как сделать, чтобы дата dd.mm.yyyy hh.mm.ss экспортировалась в XML в формате UNIX

в моем коде формат
Код: vbnet
1.
Format(rst.fields("field_3"), "dd\.mm\.yyyy hh\.mm\.ss")

взят в качестве примера, что там должна быть дата
...
Рейтинг: 0 / 0
28.08.2020, 11:28
    #39993342
serg_vba123
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Экспорт данных каждой строки из Access в отдельный XML файл при помощи макроса
HandKot,

Сможете подсказать?
...
Рейтинг: 0 / 0
28.08.2020, 15:04
    #39993469
serg_vba123
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Экспорт данных каждой строки из Access в отдельный XML файл при помощи макроса
преобразование даты сделал САМ

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


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