Форум программистов, компьютерный форум, киберфорум
Microsoft Access
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/4: Рейтинг темы: голосов - 4, средняя оценка - 5.00
1 / 1 / 0
Регистрация: 06.06.2023
Сообщений: 8

Выгрузка запроса в xml

09.12.2024, 13:55. Показов 1301. Ответов 19

Студворк — интернет-сервис помощи студентам
Здравствуйте.
Мне необходимо выгрузить данные и БД Access в формате xml. Я в этой теме абсолютный новичок.
Проблема в том, что мне нужны данные одной таблицы развернуть в данных другой (несколько должников в одном иске). Не понимаю, как мне прописать связку таблиц.
На данный момент имею вот такой код:
Visual Basic
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
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
Private Sub knVgrzMAGIS_Click()
Dim ii As Integer
Dim gg As DAO.QueryDef
Dim dl As DAO.QueryDef
Dim ig As DAO.Recordset
Dim id As DAO.Recordset
Dim cc As Integer
ii = FreeFile
Set gg = CurrentDb.QueryDefs("RgstrIsk_MAGIS_IskRkvzt(zv)")
Set dl = CurrentDb.QueryDefs("RgstrIsk_MAGIS_Dlgnk(zv)")
Set ig = gg.OpenRecordset(dbOpenDynaset, dbSeeChanges)
Set id = dl.OpenRecordset("SELECT [RgstrIsk_MAGIS_Dlgnk(zv)].Fullname, [RgstrIsk_MAGIS_Dlgnk(zv)].inn, [RgstrIsk_MAGIS_Dlgnk(zv)].birthday, [RgstrIsk_MAGIS_Dlgnk(zv)].birthplace, [RgstrIsk_MAGIS_Dlgnk(zv)].passport_series [RgstrIsk_MAGIS_Dlgnk(zv)].passport_number FROM [RgstrIsk_MAGIS_IskRkvzt(zv)] INNER JOIN [RgstrIsk_MAGIS_Dlgnk(zv)] ON [RgstrIsk_MAGIS_IskRkvzt(zv)].app_num = [RgstrIsk_MAGIS_Dlgnk(zv)].app_num;", dbOpenDynaset, dbSeeChanges)
'Создаем пустой файл
Open "C:\Users\mvpanteleeva\Desktop\Test\Prikaz_" & Format(Date, "YYYY-MM-DD") & ".xml" For Output As #ii
'Объявляем начало исполнения файла xml
Print #ii, oem2utf("<?xml version=""1.0"" encoding=""UTF-8""?>")
'Начало выгрузки приказов
Print #ii, oem2utf("<claims>")
'Выполняем пока не кончится
While Not ig.EOF
'Главный блок
Print #ii, oem2utf("<claim>")
'Код организации-постоянное обозначение организации, передающие данные в суд (ИНН)
Print #ii, oem2utf("<organization>" & ig!organization & "</organization>")
'Взыскатель
Print #ii, oem2utf("<app_claimer>" & ig!app_claimer & "</app_claimer>")
'Юридический адрес взыскателя
Print #ii, oem2utf("<app_claimer_jur_address>" & ig!app_claimer_jur_address & "</app_claimer_jur_address>")
'Адрес взыскателя
Print #ii, oem2utf("<app_claimer_address>" & ig!app_claimer_jur_address & "</app_claimer_address>")
'Телефон взыскателя
Print #ii, oem2utf("<app_claimer_phone>" & ig!app_claimer_phone & "</app_claimer_phone>")
'Номер заявления (номер иска)
Print #ii, oem2utf("<app_num>" & ig!app_num & "</app_num>")
'Дата подачи заявления (Дата иска)
Print #ii, oem2utf("<app_date>" & ig!app_date & "</app_date>")
'Порядок взыскания: солидарно или пропорционально
Print #ii, oem2utf("<app_text>" & ig!app_text & "</app_text>")
'Сущность взыскания(За водоснабжение и водоотведение)
Print #ii, oem2utf("<app_entity>" & ig!app_entity & "</app_entity>")
'Адрес взыскания(Адрес ответчика)
Print #ii, oem2utf("<claim_address>" & ig!claim_address & "</claim_address>")
'Сумма взыскания в рублях(Цена Иска)
Print #ii, oem2utf("<debt_sum>" & ig!debt_sum & "</debt_sum>")
'Госпошлина в рублях(Сумма ГП)
Print #ii, oem2utf("<state_fee>" & ig!state_fee & "</state_fee>")
'Блок должников
Print #ii, oem2utf("<debtors>")
  While Not id.EOF 
    Print #ii, oem2utf("<debtor>")
    'ФИО лица
    Print #ii, oem2utf("<fullname>" & id!FullName & "</fullname>")
    'ИНН лица
    Print #ii, oem2utf("<inn>" & id!INN & "</inn>")
    'Дата рождения лица (Из дополнительной вкладки "Данные должника" - "Дата рождения")
    Print #ii, oem2utf("<birthday>" & id!birthday & "</birthday>")
    'Место рождения лица (Из дополнительной вкладки "Данные должника" - "Место рождения")
    Print #ii, oem2utf("<birthplace>" & id!birthplace & "</birthplace>")
    'Серия паспорта лица (Из дополнительной вкладки "Данные должника" - "Серия")
    Print #ii, oem2utf("<passport_series>" & id!passport_series & "</passport_series>")
    'Номер паспорта лица (Из дополнительной вкладки "Данные должника" - "Номер")
    Print #ii, oem2utf("<passport_number>" & id!passport_number & "</passport_number>")
    Print #ii, oem2utf("</debtor>")
id.MoveNext
   Wend
Print #ii, oem2utf("</debtors>")
'Блок взысканий
Print #ii, oem2utf("<arrears>")
Print #ii, oem2utf("<arrear>")
'Тип взыскания (задолженность)
Print #ii, oem2utf("<type>" & ig!Type & "</type>")
'Сумма взыскания(Цена Иска)
Print #ii, oem2utf("<arrear_sum>" & ig!arrear_sum & "</arrear_sum>")
'Начало периода взыскания
Print #ii, oem2utf("<date_begin>" & ig!date_begin & "</date_begin>")
'Окончание периода взыскания
Print #ii, oem2utf("<date_end>" & ig!date_end & "</date_end>")
'Блок разбивки суммы взыскания по услугам
Print #ii, oem2utf("<items>")
Print #ii, oem2utf("<item>")
'Наименование услуги (водоснабжение и водоотведение)
Print #ii, oem2utf("<item_name>" & ig!item_name & "</item_name>")
'Сумма взыскания по услуге (Цена иска)
Print #ii, oem2utf("<item_sum>" & ig!item_sum & "</item_sum>")
Print #ii, oem2utf("</item>")
Print #ii, oem2utf("</items>")
Print #ii, oem2utf("</arrear>")
Print #ii, oem2utf("</arrears>")
Print #ii, oem2utf("</claim>")
ig.MoveNext
Wend
Print #ii, oem2utf("</claims>")
Close #ii
ig.Close
id.Close
Set ig = Nothing
Set id = Nothing
MsgBox ("Конец формирования файла!")
 
End Sub
На строчку "Set id = dl.OpenRecordset("SELECT [RgstrIsk_MAGIS_Dlgnk(zv)].Fullname, [RgstrIsk_MAGIS_Dlgnk(zv)].inn, [RgstrIsk_MAGIS_Dlgnk(zv)].birthday, [RgstrIsk_MAGIS_Dlgnk(zv)].birthplace, [RgstrIsk_MAGIS_Dlgnk(zv)].passport_series [RgstrIsk_MAGIS_Dlgnk(zv)].passport_number FROM [RgstrIsk_MAGIS_IskRkvzt(zv)] INNER JOIN [RgstrIsk_MAGIS_Dlgnk(zv)] ON [RgstrIsk_MAGIS_IskRkvzt(zv)].app_num = [RgstrIsk_MAGIS_Dlgnk(zv)].app_num;", dbOpenDynaset, dbSeeChanges)" ругается на ошибку преобразования данных.

Очень прошу помощи.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
09.12.2024, 13:55
Ответы с готовыми решениями:

Выгрузка в XML файл результатов запроса. Создание xml схемы с имеющегося xml файла
Доброго времени суток. Имеется необходимый для загрузки пример XML файла и из него необходимо построить XML схему для выгрузки данных...

Выгрузка запроса в эксель
Добрый день, как выгрузить запрос в эксель я знаю. Делаю выгрузку на бланк документа определенной формы, внизу после выгрузки нужно...

Выгрузка запроса в шаблон Excell
Привет, выгружаю в шаблон Excel запрос Dim xlApp As Object Dim xlWb As Object Dim xlWs As Object Dim sFileName As String Dim rst As...

19
1306 / 360 / 98
Регистрация: 14.10.2022
Сообщений: 1,103
09.12.2024, 14:13
Не тот раздел. Вам в MS Access.
В MSSQLSERVER в xml выгружают совсем по-другому.

А про ошибку, скорее всего, она тут: [RgstrIsk_MAGIS_IskRkvzt(zv)].app_num = [RgstrIsk_MAGIS_Dlgnk(zv)].app_num
Хрустальный шар показывает, что поля [RgstrIsk_MAGIS_IskRkvzt(zv)].app_num и [RgstrIsk_MAGIS_Dlgnk(zv)].app_num - имеют разный тип. Например, одно поле - строковое, а другое - числовое. И в строковом поле хранится еще что-то, кроме цифр (буквы, пробелы, запятые и т.д.).
При таком сравнении: [RgstrIsk_MAGIS_IskRkvzt(zv)].app_num = [RgstrIsk_MAGIS_Dlgnk(zv)].app_num если одно из полей числовое (int или что-то того), второе поле будет тоже преобразовываться к числу. А если там кроме цифр - что-то еще есть, то вся конструкция упадет с ошибкой.

Явно преобразуйте ваше числовое поле к текстовому значению, с помощью CAST (не помню, как в VBA, CSTR, вроде) и ошибка уйдет.
0
1 / 1 / 0
Регистрация: 06.06.2023
Сообщений: 8
09.12.2024, 14:20  [ТС]
Цитата Сообщение от uaggster Посмотреть сообщение
Не тот раздел. Вам в MS Access.
Прошу прощения, мне просто пересоздать тему в нужном разделе?

Цитата Сообщение от uaggster Посмотреть сообщение
Хрустальный шар показывает, что поля [RgstrIsk_MAGIS_IskRkvzt(zv)].app_num и [RgstrIsk_MAGIS_Dlgnk(zv)].app_num - имеют разный тип.
Оба поля числовые. Кроме чисел там ничего нет
0
10.12.2024, 05:04
 Комментарий модератора 
Тема перенесена в Access
0
Модератор
Эксперт MS Access
 Аватар для shanemac51
12231 / 5078 / 814
Регистрация: 07.08.2010
Сообщений: 14,941
Записей в блоге: 4
10.12.2024, 07:52
явно пропущена запятая

SQL
1
2
3
4
5
6
7
8
9
10
11
12
SELECT [RgstrIsk_MAGIS_Dlgnk(zv)].Fullname,
 [RgstrIsk_MAGIS_Dlgnk(zv)].inn,
 [RgstrIsk_MAGIS_Dlgnk(zv)].birthday,
 [RgstrIsk_MAGIS_Dlgnk(zv)].birthplace,
 [RgstrIsk_MAGIS_Dlgnk(zv)].passport_series [RgstrIsk_MAGIS_Dlgnk(zv)].passport_number 
 
----error --нет запятой после серии паспорта
 
 
FROM [RgstrIsk_MAGIS_IskRkvzt(zv)]
 INNER JOIN [RgstrIsk_MAGIS_Dlgnk(zv)] 
ON [RgstrIsk_MAGIS_IskRkvzt(zv)].app_num = [RgstrIsk_MAGIS_Dlgnk(zv)].app_num;
и так ли необходимы скобки в именах запросов
0
Мы один, давай на "ты"
3858 / 1400 / 348
Регистрация: 16.06.2016
Сообщений: 3,298
10.12.2024, 07:58
Цитата Сообщение от Antarielle Посмотреть сообщение
Мне необходимо выгрузить данные и БД Access в формате xml. Я в этой теме абсолютный новичок.
Проблема в том, что мне нужны данные одной таблицы развернуть в данных другой (несколько должников в одном иске). Не понимаю, как мне прописать связку таблиц.
Нужны данные (можно фейковые) в реальных таблицах и результирующий XML (структура).
0
ᴁ ©
Эксперт MS Access
 Аватар для АЕ
4171 / 2457 / 511
Регистрация: 13.12.2016
Сообщений: 8,343
Записей в блоге: 5
10.12.2024, 09:04
Antarielle, в вашей SQL строке нет переменных, следовательно она должна просто открыться в запросе.
Проверьте так ли это.
SQL
1
2
3
4
SELECT [RgstrIsk_MAGIS_Dlgnk(zv)].Fullname, [RgstrIsk_MAGIS_Dlgnk(zv)].inn, 
[RgstrIsk_MAGIS_Dlgnk(zv)].birthday, [RgstrIsk_MAGIS_Dlgnk(zv)].birthplace, [RgstrIsk_MAGIS_Dlgnk(zv)].passport_series [RgstrIsk_MAGIS_Dlgnk(zv)].passport_number 
FROM [RgstrIsk_MAGIS_IskRkvzt(zv)] INNER JOIN [RgstrIsk_MAGIS_Dlgnk(zv)] 
ON [RgstrIsk_MAGIS_IskRkvzt(zv)].app_num = [RgstrIsk_MAGIS_Dlgnk(zv)].app_num;
Добавлено через 9 минут
Visual Basic
1
, dbOpenDynaset, dbSeeChanges
Сочетание этих параметров тоже может приводить к ошибке, если база многопользовательская.

Добавлено через 18 минут
попробуйте просто убрать параметр dbSeeChanges
0
1 / 1 / 0
Регистрация: 06.06.2023
Сообщений: 8
10.12.2024, 09:11  [ТС]
Панург,
Цитата Сообщение от Панург Посмотреть сообщение
Нужны данные (можно фейковые) в реальных таблицах и результирующий XML (структура).
Сделала балванку.

Цитата Сообщение от АЕ Посмотреть сообщение
Visual Basic
Выделить код
1
, dbOpenDynaset, dbSeeChanges
Сочетание этих параметров тоже может приводить к ошибке, если база многопользовательская.
Так там стоит в самом конце.

Цитата Сообщение от shanemac51 Посмотреть сообщение
явно пропущена запятая
Запятую проставила, ошибка не ушла. И запросы должны быть в кавычках, иначе сразу выпадает в ошибку вся строка.
Вложения
Тип файла: 7z test.7z (27.1 Кб, 11 просмотров)
0
ᴁ ©
Эксперт MS Access
 Аватар для АЕ
4171 / 2457 / 511
Регистрация: 13.12.2016
Сообщений: 8,343
Записей в блоге: 5
10.12.2024, 09:22
Antarielle, удалите лишнее и начинайте так
Visual Basic
1
Set id = CurrentDb.OpenRecordset("SE..........
0
1 / 1 / 0
Регистрация: 06.06.2023
Сообщений: 8
10.12.2024, 09:26  [ТС]
Цитата Сообщение от АЕ Посмотреть сообщение
удалите лишнее и начинайте так
Если убрать селект вообще, то все должники разворачиваются в первом иске, а последующие выгружаются без должников вовсе
0
ᴁ ©
Эксперт MS Access
 Аватар для АЕ
4171 / 2457 / 511
Регистрация: 13.12.2016
Сообщений: 8,343
Записей в блоге: 5
10.12.2024, 09:35
Цитата Сообщение от Antarielle Посмотреть сообщение
Если убрать селект вообще, то
Visual Basic
1
Set id = CurrentDb.OpenRecordset("SELECT [RgstrIsk_MAGIS_Dlgnk(zv)].Fullname, [RgstrIsk_MAGIS_Dlgnk(zv)].inn, [RgstrIsk_MAGIS_Dlgnk(zv)].birthday, [RgstrIsk_MAGIS_Dlgnk(zv)].birthplace, [RgstrIsk_MAGIS_Dlgnk(zv)].passport_series [RgstrIsk_MAGIS_Dlgnk(zv)].passport_number FROM [RgstrIsk_MAGIS_IskRkvzt(zv)] INNER JOIN [RgstrIsk_MAGIS_Dlgnk(zv)] ON [RgstrIsk_MAGIS_IskRkvzt(zv)].app_num = [RgstrIsk_MAGIS_Dlgnk(zv)].app_num;", dbOpenDynaset, dbSeeChanges)
Так понятнее? Или вы разницы не видите?
0
1 / 1 / 0
Регистрация: 06.06.2023
Сообщений: 8
10.12.2024, 09:47  [ТС]
Цитата Сообщение от АЕ Посмотреть сообщение
Так понятнее? Или вы разницы не видите?
Спасибо за уточнение. Действительно не увидела изначально, о чем вы говорили. Тем не менее, в таком виде так же все должники разворачиваются в первом иске. Но на ошибку преобразования типов данных уже не ругается
0
ᴁ ©
Эксперт MS Access
 Аватар для АЕ
4171 / 2457 / 511
Регистрация: 13.12.2016
Сообщений: 8,343
Записей в блоге: 5
10.12.2024, 10:05
Цитата Сообщение от Antarielle Посмотреть сообщение
в таком виде так же все должники разворачиваются в первом иске.
У вас только один цикл по должникам While Not id.EOF , а он по идее должен быть вложен в цикл исков.
0
1 / 1 / 0
Регистрация: 06.06.2023
Сообщений: 8
10.12.2024, 10:10  [ТС]
Цитата Сообщение от АЕ Посмотреть сообщение
У вас только один цикл по должникам While Not id.EOF , а он по идее должен быть вложен в цикл исков.
По сути, он вложен в цикл по искам While Not ig.EOF.
Где-то не хватает какой-то связки, мне кажется. Но я не понимаю где и какой.
0
ᴁ ©
Эксперт MS Access
 Аватар для АЕ
4171 / 2457 / 511
Регистрация: 13.12.2016
Сообщений: 8,343
Записей в блоге: 5
10.12.2024, 10:33
Цитата Сообщение от Antarielle Посмотреть сообщение
По сути, он вложен в цикл по искам While Not ig.EOF.
да, не заметил. Тогда ID иска - это переменная и она каждый раз должна меняться в SQL строке
типа "SELECT [........." & ID & " остаток запроса"

Добавлено через 14 минут
внутри внешнего цикла исков
1
1 / 1 / 0
Регистрация: 06.06.2023
Сообщений: 8
10.12.2024, 11:44  [ТС]
Цитата Сообщение от АЕ Посмотреть сообщение
типа "SELECT [........." & ID & " остаток запроса"
Спасибо большое за идею. Теперь выгрузка считывает переменную и выгружает всех должников из первого иска в оба иска
Сейчас код выглядит вот так:

Visual Basic
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
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
Private Sub knVgrzMAGIS_Click()
Dim db As Database
    Dim ii As Integer
    Dim gg As QueryDef
    Dim dl As QueryDef
    Dim ig As DAO.Recordset
    Dim id As DAO.Recordset
    Dim zIDIsk As DAO.Recordset
    Dim cc As Integer
    Set db = CurrentDb
    Set zIDIsk = db.OpenRecordset("RgstrIsk_MAGIS_IskRkvzt(zv)", dbOpenDynaset, dbSeeChanges)
    ii = FreeFile
    Set gg = CurrentDb.QueryDefs("RgstrIsk_MAGIS_IskRkvzt(zv)")
    Set ig = gg.OpenRecordset(dbOpenDynaset, dbSeeChanges)
'Обнуляем счетчики
cc = 0
'Создаем пустой файл
Open "C:\Users\mvpanteleeva\Desktop\Test\Prikaz_" & Format(Date, "YYYY-MM-DD") & ".xml" For Output As #ii
'Объявляем начало исполнения файла xml
Print #ii, oem2utf("<?xml version=""1.0"" encoding=""UTF-8""?>")
'Начало выгрузки приказов
Print #ii, oem2utf("<claims>")
'Выполняем пока не кончится
While Not ig.EOF
'Начинаем отсчет циклов
cc = cc + 1
'Главный блок
Print #ii, oem2utf("<claim>")
'Код организации-постоянное обозначение организации, передающие данные в суд (ИНН)
Print #ii, oem2utf("<organization>" & ig!organization & "</organization>")
'Взыскатель
Print #ii, oem2utf("<app_claimer>" & ig!app_claimer & "</app_claimer>")
'Юридический адрес взыскателя
Print #ii, oem2utf("<app_claimer_jur_address>" & ig!app_claimer_jur_address & "</app_claimer_jur_address>")
'Адрес взыскателя
Print #ii, oem2utf("<app_claimer_address>" & ig!app_claimer_jur_address & "</app_claimer_address>")
'Телефон взыскателя
Print #ii, oem2utf("<app_claimer_phone>" & ig!app_claimer_phone & "</app_claimer_phone>")
'Номер заявления (номер иска)
Print #ii, oem2utf("<app_num>" & ig!app_num & "</app_num>")
'Дата подачи заявления (Дата иска)
Print #ii, oem2utf("<app_date>" & ig!app_date & "</app_date>")
'Порядок взыскания: солидарно или пропорционально
Print #ii, oem2utf("<app_text>" & ig!app_text & "</app_text>")
'Сущность взыскания(За водоснабжение и водоотведение)
Print #ii, oem2utf("<app_entity>" & ig!app_entity & "</app_entity>")
'Адрес взыскания(Адрес ответчика)
Print #ii, oem2utf("<claim_address>" & ig!claim_address & "</claim_address>")
'Сумма взыскания в рублях(Цена Иска)
Print #ii, oem2utf("<debt_sum>" & ig!debt_sum & "</debt_sum>")
'Госпошлина в рублях(Сумма ГП)
Print #ii, oem2utf("<state_fee>" & ig!state_fee & "</state_fee>")
'Блок должников
Print #ii, oem2utf("<debtors>")
zIDIsk.MoveFirst
vrIDIsk = zIDIsk![app_num]
Set dl = CurrentDb.QueryDefs("RgstrIsk_MAGIS_Dlgnk(zv)")
Set id = CurrentDb.OpenRecordset("SELECT [RgstrIsk_MAGIS_Dlgnk(zv)].Fullname, [RgstrIsk_MAGIS_Dlgnk(zv)].inn, [RgstrIsk_MAGIS_Dlgnk(zv)].birthday, [RgstrIsk_MAGIS_Dlgnk(zv)].birthplace, [RgstrIsk_MAGIS_Dlgnk(zv)].passport_series, [RgstrIsk_MAGIS_Dlgnk(zv)].passport_number, [RgstrIsk_MAGIS_Dlgnk(zv)].app_num FROM [RgstrIsk_MAGIS_Dlgnk(zv)] WHERE ((([RgstrIsk_MAGIS_Dlgnk(zv)].app_num)=IDIsk()));", dbOpenDynaset, dbSeeChanges)
  While Not id.EOF
    Print #ii, oem2utf("<debtor>")
    'ФИО лица
    Print #ii, oem2utf("<fullname>" & id!FullName & "</fullname>")
    'ИНН лица
    Print #ii, oem2utf("<inn>" & id!INN & "</inn>")
    'Дата рождения лица (Из дополнительной вкладки "Данные должника" - "Дата рождения")
    Print #ii, oem2utf("<birthday>" & id!birthday & "</birthday>")
    'Место рождения лица (Из дополнительной вкладки "Данные должника" - "Место рождения")
    Print #ii, oem2utf("<birthplace>" & id!birthplace & "</birthplace>")
    'Серия паспорта лица (Из дополнительной вкладки "Данные должника" - "Серия")
    Print #ii, oem2utf("<passport_series>" & id!passport_series & "</passport_series>")
    'Номер паспорта лица (Из дополнительной вкладки "Данные должника" - "Номер")
    Print #ii, oem2utf("<passport_number>" & id!passport_number & "</passport_number>")
    Print #ii, oem2utf("</debtor>")
id.MoveNext
  Wend
Print #ii, oem2utf("</debtors>")
'Блок взысканий
Print #ii, oem2utf("<arrears>")
Print #ii, oem2utf("<arrear>")
'Тип взыскания (задолженность)
Print #ii, oem2utf("<type>" & ig!Type & "</type>")
'Сумма взыскания(Цена Иска)
Print #ii, oem2utf("<arrear_sum>" & ig!arrear_sum & "</arrear_sum>")
'Начало периода взыскания
Print #ii, oem2utf("<date_begin>" & ig!date_begin & "</date_begin>")
'Окончание периода взыскания
Print #ii, oem2utf("<date_end>" & ig!date_end & "</date_end>")
'Блок разбивки суммы взыскания по услугам
Print #ii, oem2utf("<items>")
Print #ii, oem2utf("<item>")
'Наименование услуги (водоснабжение и водоотведение)
Print #ii, oem2utf("<item_name>" & ig!item_name & "</item_name>")
'Сумма взыскания по услуге (Цена иска)
Print #ii, oem2utf("<item_sum>" & ig!item_sum & "</item_sum>")
Print #ii, oem2utf("</item>")
Print #ii, oem2utf("</items>")
Print #ii, oem2utf("</arrear>")
Print #ii, oem2utf("</arrears>")
Print #ii, oem2utf("</claim>")
ig.MoveNext
Wend
Print #ii, oem2utf("</claims>")
Close #ii
ig.Close
id.Close
Set ig = Nothing
Set id = Nothing
MsgBox ("Конец формирования файла!")
End Sub
0
ᴁ ©
Эксперт MS Access
 Аватар для АЕ
4171 / 2457 / 511
Регистрация: 13.12.2016
Сообщений: 8,343
Записей в блоге: 5
10.12.2024, 11:56
Цитата Сообщение от Antarielle Посмотреть сообщение
Спасибо большое за идею
могли бы и кнопку нажать. Ну да ладно
1
1 / 1 / 0
Регистрация: 06.06.2023
Сообщений: 8
10.12.2024, 12:18  [ТС]
"Я ещё только учусь" , так что прошу сильно не пинать
Но проблема пока осталась

Добавлено через 15 минут
АЕ, огромнейшее спасибо за помощь!

Итоговый код получился следующим:
Visual Basic
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
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
Private Sub knVgrzMAGIS_Click()
Dim db As Database
Dim ii As Integer
Dim gg As QueryDef
Dim dl As QueryDef
Dim ig As DAO.Recordset
Dim id As DAO.Recordset
Dim zIDIsk As DAO.Recordset
Dim cc As Integer
Set db = CurrentDb
Set zIDIsk = db.OpenRecordset("RgstrIsk_MAGIS_IskRkvzt(zv)", dbOpenDynaset, dbSeeChanges)
ii = FreeFile
Set gg = CurrentDb.QueryDefs("RgstrIsk_MAGIS_IskRkvzt(zv)")
Set ig = gg.OpenRecordset(dbOpenDynaset, dbSeeChanges)
'Обнуляем счетчики
cc = 0
'Создаем пустой файл
Open "C:\Users\mvpanteleeva\Desktop\Test\Prikaz_" & Format(Date, "YYYY-MM-DD") & ".xml" For Output As #ii
'Объявляем начало исполнения файла xml
Print #ii, oem2utf("<?xml version=""1.0"" encoding=""UTF-8""?>")
'Начало выгрузки приказов
Print #ii, oem2utf("<claims>")
'Выполняем пока не кончится
While Not ig.EOF
'Начинаем отсчет циклов
cc = cc + 1
'Главный блок
Print #ii, oem2utf("<claim>")
'Код организации-постоянное обозначение организации, передающие данные в суд (ИНН)
Print #ii, oem2utf("<organization>" & ig!organization & "</organization>")
'Взыскатель
Print #ii, oem2utf("<app_claimer>" & ig!app_claimer & "</app_claimer>")
'Юридический адрес взыскателя
Print #ii, oem2utf("<app_claimer_jur_address>" & ig!app_claimer_jur_address & "</app_claimer_jur_address>")
'Адрес взыскателя
Print #ii, oem2utf("<app_claimer_address>" & ig!app_claimer_jur_address & "</app_claimer_address>")
'Телефон взыскателя
Print #ii, oem2utf("<app_claimer_phone>" & ig!app_claimer_phone & "</app_claimer_phone>")
'Номер заявления (номер иска)
Print #ii, oem2utf("<app_num>" & ig!app_num & "</app_num>")
'Дата подачи заявления (Дата иска)
Print #ii, oem2utf("<app_date>" & ig!app_date & "</app_date>")
'Порядок взыскания: солидарно или пропорционально
Print #ii, oem2utf("<app_text>" & ig!app_text & "</app_text>")
'Сущность взыскания(За водоснабжение и водоотведение)
Print #ii, oem2utf("<app_entity>" & ig!app_entity & "</app_entity>")
'Адрес взыскания(Адрес ответчика)
Print #ii, oem2utf("<claim_address>" & ig!claim_address & "</claim_address>")
'Сумма взыскания в рублях(Цена Иска)
Print #ii, oem2utf("<debt_sum>" & ig!debt_sum & "</debt_sum>")
'Госпошлина в рублях(Сумма ГП)
Print #ii, oem2utf("<state_fee>" & ig!state_fee & "</state_fee>")
'Блок должников
Print #ii, oem2utf("<debtors>")
vrIDIsk = zIDIsk![app_num]
zIDIsk.MoveFirst
Set dl = CurrentDb.QueryDefs("RgstrIsk_MAGIS_Dlgnk(zv)")
Set id = CurrentDb.OpenRecordset("SELECT [RgstrIsk_MAGIS_Dlgnk(zv)].Fullname, [RgstrIsk_MAGIS_Dlgnk(zv)].inn, [RgstrIsk_MAGIS_Dlgnk(zv)].birthday, [RgstrIsk_MAGIS_Dlgnk(zv)].birthplace, [RgstrIsk_MAGIS_Dlgnk(zv)].passport_series, [RgstrIsk_MAGIS_Dlgnk(zv)].passport_number, [RgstrIsk_MAGIS_Dlgnk(zv)].app_num FROM [RgstrIsk_MAGIS_Dlgnk(zv)] WHERE ((([RgstrIsk_MAGIS_Dlgnk(zv)].app_num)=IDIsk()));", dbOpenDynaset, dbSeeChanges)
If zIDIsk.RecordCount <> 0 Then
  While Not id.EOF
    Print #ii, oem2utf("<debtor>")
    'ФИО лица
    Print #ii, oem2utf("<fullname>" & id!FullName & "</fullname>")
    'ИНН лица
    Print #ii, oem2utf("<inn>" & id!INN & "</inn>")
    'Дата рождения лица (Из дополнительной вкладки "Данные должника" - "Дата рождения")
    Print #ii, oem2utf("<birthday>" & id!birthday & "</birthday>")
    'Место рождения лица (Из дополнительной вкладки "Данные должника" - "Место рождения")
    Print #ii, oem2utf("<birthplace>" & id!birthplace & "</birthplace>")
    'Серия паспорта лица (Из дополнительной вкладки "Данные должника" - "Серия")
    Print #ii, oem2utf("<passport_series>" & id!passport_series & "</passport_series>")
    'Номер паспорта лица (Из дополнительной вкладки "Данные должника" - "Номер")
    Print #ii, oem2utf("<passport_number>" & id!passport_number & "</passport_number>")
    Print #ii, oem2utf("</debtor>")
id.MoveNext
  Wend
 zIDIsk.MoveNext
  End If
Print #ii, oem2utf("</debtors>")
'Блок взысканий
Print #ii, oem2utf("<arrears>")
Print #ii, oem2utf("<arrear>")
'Тип взыскания (задолженность)
Print #ii, oem2utf("<type>" & ig!Type & "</type>")
'Сумма взыскания(Цена Иска)
Print #ii, oem2utf("<arrear_sum>" & ig!arrear_sum & "</arrear_sum>")
'Начало периода взыскания
Print #ii, oem2utf("<date_begin>" & ig!date_begin & "</date_begin>")
'Окончание периода взыскания
Print #ii, oem2utf("<date_end>" & ig!date_end & "</date_end>")
'Блок разбивки суммы взыскания по услугам
Print #ii, oem2utf("<items>")
Print #ii, oem2utf("<item>")
'Наименование услуги (водоснабжение и водоотведение)
Print #ii, oem2utf("<item_name>" & ig!item_name & "</item_name>")
'Сумма взыскания по услуге (Цена иска)
Print #ii, oem2utf("<item_sum>" & ig!item_sum & "</item_sum>")
Print #ii, oem2utf("</item>")
Print #ii, oem2utf("</items>")
Print #ii, oem2utf("</arrear>")
Print #ii, oem2utf("</arrears>")
Print #ii, oem2utf("</claim>")
ig.MoveNext
Wend
Print #ii, oem2utf("</claims>")
Close #ii
ig.Close
id.Close
Set ig = Nothing
Set id = Nothing
MsgBox ("Конец формирования файла!")
End Sub
1
ᴁ ©
Эксперт MS Access
 Аватар для АЕ
4171 / 2457 / 511
Регистрация: 13.12.2016
Сообщений: 8,343
Записей в блоге: 5
10.12.2024, 14:18
Antarielle, не возьму в толк. Для чего вам запросы в коде? Особенно групповой.
По моему разумению открывать достаточно таблицу исков. Ну на худой конец отсортированную запросом таблицу задолженностей и проходя по каждой записи таблицы искать должников (пусть тоже отсортированных) соответствующих данному конкретному иску из цикла по коду иска. где
Цитата Сообщение от АЕ Посмотреть сообщение
"SELECT [........." & ID & " остаток запроса"
я писал об этом. У вас ключевое поле RgstrIsk_MAGIS_id - по по нему и ищите должников конкретной записи в таблице должников. У вас нет схемы данных. Не соображу где код иска у должников. Но смысл должны понять.
0
918 / 291 / 58
Регистрация: 01.06.2023
Сообщений: 816
10.12.2024, 16:39
Следующую ошибку словите здесь.

Цитата Сообщение от Antarielle Посмотреть сообщение
Visual Basic
1
2
3
4
'Создаем пустой файл
Open "C:\Users\mvpanteleeva\Desktop\Test\Prikaz_" & Format(Date, "YYYY-MM-DD") & ".xml" For Output As #ii
'Объявляем начало исполнения файла xml
Print #ii, oem2utf("<?xml version=""1.0"" encoding=""UTF-8""?>")
Файл создается по умолчанию в кодировке Win1251. А в файле задекларирована кодировка UTF-8.

Можно сначала собрать все в переменную а потом сохранить таким образом

Visual Basic
1
2
3
4
5
6
7
8
9
  Dim s
  Set s=CreateObject("ADODB.Stream")
  s.Type=2 ''adTypeText
  s.Charset='UTF-8'
  s.Open()
  s.writeText(Здесь_Пременная_в_которой_собрано_содержимое_XML)
  s.saveToFile(ИмяФайлаКудаСохранять_ПолныйПуть)
  s.close
  set s=nothing
ЗЫ: не обратил внимание на преобразование.

Обратите еще внимание на форматирование дат и чисел.

Visual Basic
1
Print #ii, oem2utf("<app_date>" & ig!app_date & "</app_date>")
Сверьтесь с XSD схемой в каком формате следует передавать дату

Мне больше нравится такие файлы формировать блоками. За работоспособность кода не ручаюсь так как не на чем проверить.

Кликните здесь для просмотра всего текста
Visual Basic
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
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
Public Function XMLElement(spTag, spAttribute, spContent)
'Формирует один закрытый тэг
  XMLElement = "<" & spTag
  If spAttribute <> "" Then XMLElement = XMLElement & " " & spAttribute
  XMLElement = XMLElement & ">" & spContent & "</" & spTag & ">" & vbCrLf
End Function
 
Public Function XMLValue(sValue)
'Экранирует символы недопустимые в XML
  XMLValue = Replace(Replace(Replace(Replace(Replace(Replace(sValue, "&", "&amp;"), "«", """"), "»", """"), """", "&quot;"), "<", "&lt;"), ">", "&gt;")
End Function
 
 
Public Function ToSQL(ByRef pValue As Variant)
'На основе типа данных преобразует значение в SQL литерал
'#param pValue - Значение для преобразования
  Select Case VarType(pValue)
  Case vbString
    ToSQL = "'" & Replace(pValue & "", "'", "''") & "'"
  Case vbDate
    If pValue = CLng(pValue) Then
      ToSQL = "#" & Format(pValue, "mm\/dd\/yyyy") & "#"
    ElseIf pValue < 1 Then
      ToSQL = "#" & Format(pValue, "hh:nn:ss") & "#"
    Else
      ToSQL = "#" & Format(pValue, "mm\/dd\/yyyy hh:nn:ss") & "#"
    End If
  Case vbEmpty, vbNull
    ToSQL = "NULL"
  Case vbBoolean
    If pValue Then ToSQL = "true" Else ToSQL = "false"
  Case vbInteger, vbLong, 20
    ToSQL = pValue & vbNullString
  Case vbSingle, vbDouble, vbCurrency, vbDecimal
    ToSQL = Replace(pValue & vbNullString, ",", ".")
    'vbByte ?? char
  Case Else
    If IsArray(pValue) Then
      Dim vElement
      ToSQL = vbNullString
      For Each vElement In pValue
        If Len(ToSQL) = 0 Then
          ToSQL = ToSQL(vElement)
        Else
          ToSQL = ToSQL & ", " & ToSQL(vElement)
        End If
      Next
      If ToSQL = vbNullString Then ToSQL = "NULL"
    Else
      Err.Raise 1001, , "Unsupported type of SQL value!"
    End If
  End Select
End Function
 
 
Private Sub knVgrzMAGIS_Click()
Dim ig As DAO.Recordset
Dim id As DAO.Recordset
Dim cc As Integer
 
Dim claims As String, claim As String, deptors As String
Set ig = CurrentDb.QueryDefs("RgstrIsk_MAGIS_IskRkvzt(zv)").OpenRecordset(dbOpenDynaset, dbSeeChanges)
'Обнуляем счетчики
cc = 0
 
'Выполняем пока не кончится
 
claims = ""
While Not ig.EOF
'Начинаем отсчет циклов
cc = cc + 1
'Главный блок
 
'Код организации-постоянное обозначение организации, передающие данные в суд (ИНН)
claim = XMLElement("organization", "", ig!organization)
'Взыскатель
claim = claim & XMLElement("app_claimer", "", ig!app_claimer)
'Юридический адрес взыскателя
claim = claim & XMLElement("app_claimer_jur_address", "", XMLValue(ig!app_claimer_jur_address))
'Адрес взыскателя
claim = claim & XMLElement("app_claimer_address", "", XMLValue(ig!app_claimer_jur_address))
'Телефон взыскателя
claim = claim & XMLElement("app_claimer_phone", "", XMLValue(ig!app_claimer_phone))
'Номер заявления (номер иска)
claim = claim & XMLElement("app_num", "", XMLValue(ig!app_num))
'Дата подачи заявления (Дата иска)
claim = claim & XMLElement("app_date", "", ig!app_date)
'Порядок взыскания: солидарно или пропорционально
claim = claim & XMLElement("app_text", "", XMLValue(ig!app_text))
'Сущность взыскания(За водоснабжение и водоотведение)
claim = claim & XMLElement("app_entity", "", XMLValue(ig!app_entity))
'Адрес взыскания(Адрес ответчика)
claim = claim & XMLElement("claim_address", "", XMLValue(ig!claim_address))
'Сумма взыскания в рублях(Цена Иска)
claim = claim & XMLElement("debt_sum", "", ig!debt_sum)
'Госпошлина в рублях(Сумма ГП)
claim = claim & XMLElement("state_fee", "", ig!state_fee)
'Блок должников
 
deptors = ""
Set id = CurrentDb.OpenRecordset("SELECT [RgstrIsk_MAGIS_Dlgnk(zv)].Fullname, [RgstrIsk_MAGIS_Dlgnk(zv)].inn, [RgstrIsk_MAGIS_Dlgnk(zv)].birthday, [RgstrIsk_MAGIS_Dlgnk(zv)].birthplace, " & _
    "[RgstrIsk_MAGIS_Dlgnk(zv)].passport_series, [RgstrIsk_MAGIS_Dlgnk(zv)].passport_number, [RgstrIsk_MAGIS_Dlgnk(zv)].app_num " & _
    "FROM [RgstrIsk_MAGIS_Dlgnk(zv)] WHERE ((([RgstrIsk_MAGIS_Dlgnk(zv)].app_num)=" & ToSQL(ig!app_num) & "));")
  While Not id.EOF
    deptors = deptors & XMLElement("debtor", "", XMLElement("fullname", "", XMLValue(id!FullName)) & _
                                                 XMLElement("inn", "", id!INN) & _
                                                 XMLElement("birthday", "", id!birthday) & _
                                                 XMLElement("birthplace", "", id!birthplace) & _
                                                 XMLElement("passport_series", "", id!passport_series) & _
                                                 XMLElement("passport_number", "", id!passport_number) _
                                  )
    id.MoveNext
  Wend
id.Close
Set id = Nothing
claim = claim & XMLElement("debtors", "", deptors)
 
claim = claim & XMLElement("arrears", "", XMLElement("arrear", "", XMLElement("type", "", ig!Type) & _
                                                                   XMLElement("arrear_sum", "", ig!arrear_sum) & _
                                                                   XMLElement("date_begin", "", ig!date_begin) & _
                                                                   XMLElement("date_end", "", ig!date_end) & _
                                                                   XMLElement("items", "", XMLElement("item", "", XMLElement("item_name", "", XMLValue(ig!item_name)) & _
                                                                                                                  XMLElement("item_sum", "", ig!item_sum) _
                                                               )) _
                          ))
 
claims = claims & claim
ig.MoveNext
Wend
claims = "<?xml version=""1.0"" encoding=""UTF-8""?>" & vbCrLf & XMLElement("claims", "", claims)
 
 
Dim s
Set s = CreateObject("ADODB.Stream")
s.Type = 2 ''adTypeText
s.Charset = "UTF-8"
s.Open
s.writeText (claims)
s.saveToFile ("C:\Users\mvpanteleeva\Desktop\Test\Prikaz_" & Format(Date, "YYYY-MM-DD") & ".xml")
s.Close
Set s = Nothing
  
ig.Close
id.Close
Set ig = Nothing
Set id = Nothing
MsgBox ("Конец формирования файла!")
End Sub
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
10.12.2024, 16:39
Помогаю со студенческими работами здесь

Выгрузка запроса в гугл таблицу
Всем привет, есть ли возможность выгрузки запроса в гуглтаблицу?

Выгрузка данных из БД в xml
Доброго времени суток! Подскажите имеется запрос в MS Access на выборку данных. Необходимо его результат выгрузиться в формат xml по...

Выгрузка запроса и генерация формул в Excel
Доброе утро, делаю выгрузку запроса в Excel (количество строк всегда разное). После этого нужно нужно в определенном столбце...

Выгрузка Запроса Access в Форму Excel
Всем доброго дня. Есть необходимость выбрать данные запросом из базы и вывести их на форму в Excel. Все уже готово и нормально работает,...

Выгрузка запроса sql в шаблон ворд
Добрый вечер. Уважаемые участники просьба подсказать, как можно выгрузить результат запроса в аксесс (таблица) в шаблон ворд....


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Модель заражения группы наркоманов
alhaos 17.04.2026
Условия задачи сформулированы тут Суть: - Группа наркоманов из 10 человек. - Только один инфицирован ВИЧ. - Колются одной иглой. - Колются раз в день. - Колются последовательно через. . .
Мысли в слух. Про "навсегда".
kumehtar 16.04.2026
Подумалось тут, что наверное очень глупо использовать во всяких своих установках понятие "навсегда". Это очень сильное понятие, и я только начинаю понимать край его смысла, не смотря на то что давно. . .
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
Фиксация колонок в отчете СКД
Maks 14.04.2026
Фиксация колонок в СКД отчета типа Таблица. Задача: зафиксировать три левых колонки в отчете. Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) / / . . .
Настройки VS Code
Loafer 13.04.2026
{ "cmake. configureOnOpen": false, "diffEditor. ignoreTrimWhitespace": true, "editor. guides. bracketPairs": "active", "extensions. ignoreRecommendations": true, . . .
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2. Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива. Было так:. . .
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru