powered by simpleCommunicator - 2.0.36     © 2025 Programmizd 02
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Экспорт данных каждой строки из Access в отдельный XML файл при помощи макроса
13 сообщений из 13, страница 1 из 1
Экспорт данных каждой строки из Access в отдельный XML файл при помощи макроса
    #39992988
serg_vba123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Привет друзья!
Помогите переделать макрос позаимствованный у 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
Экспорт данных каждой строки из Access в отдельный XML файл при помощи макроса
    #39992989
Roman Mejtes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
кто то понял, что хочет автор?
...
Рейтинг: 0 / 0
Экспорт данных каждой строки из Access в отдельный XML файл при помощи макроса
    #39992999
serg_vba123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Roman Mejtes,
в таблице Acсess 3 строки с данными (пример выше), требуется данные из каждой строки сохранить в отдельный xml файл

а у меня получается так, прикрепил
...
Рейтинг: 0 / 0
Экспорт данных каждой строки из Access в отдельный XML файл при помощи макроса
    #39993239
Фотография HandKot
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Экспорт данных каждой строки из Access в отдельный XML файл при помощи макроса
    #39993262
serg_vba123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
HandKot,

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

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



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

serg_vba123
HandKot,

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



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


у Вас уже все есть
Код: vbnet
1.
Format(rst.fields("field_3"), "dd\.mm\.yyyy hh\.mm\.ss")
...
Рейтинг: 0 / 0
Экспорт данных каждой строки из Access в отдельный XML файл при помощи макроса
    #39993328
serg_vba123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
мне нужно эту дату в формат 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
Экспорт данных каждой строки из Access в отдельный XML файл при помощи макроса
    #39993331
serg_vba123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
мне нужно эту дату в формат 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
Экспорт данных каждой строки из Access в отдельный XML файл при помощи макроса
    #39993337
serg_vba123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
т.е. у меня в примере есть поля 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
Экспорт данных каждой строки из Access в отдельный XML файл при помощи макроса
    #39993342
serg_vba123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
HandKot,

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

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


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