powered by simpleCommunicator - 2.0.38     © 2025 Programmizd 02
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Объединить несколько recordset в один - VBA
3 сообщений из 3, страница 1 из 1
Объединить несколько recordset в один - VBA
    #39591649
Tonio
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день.

Выгружаю данные из двух файлов Excel (База1 и База2 с одинаковой структурой) в рекордсеты RS1, RS2. Пытаюсь объединить их с помощью UNION ALL. Если можно это сделать, прошу подсказать как. Гуглил, использовал поиск, но в найденном не смог разобраться, так как навыков пока мало. Прошу помочь.

Код: 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.
Option Explicit

Sub ADO_connect_word()
Dim CON1 As Object, CON2 As Object, CON3 As Object, RS1 As Object, RS2 As Object, RS3 As Object, Cmd As Object
Dim i As Integer, j%
Dim varOtgruz1, varOtgruz2, varOtgruz3

Set CON1 = CreateObject("ADODB.connection")
Set CON2 = CreateObject("ADODB.connection")
Set CON3 = CreateObject("ADODB.connection")
Set RS1 = CreateObject("ADODB.recordset")
Set RS2 = CreateObject("ADODB.recordset")
Set RS3 = CreateObject("ADODB.recordset")
Set Cmd = CreateObject("ADODB.command")
CON1.provider = "Microsoft.ACE.OLEDB.12.0"
CON2.provider = "Microsoft.ACE.OLEDB.12.0"
CON1.connectionstring = "Data source=" & ActiveDocument.Path & "\База1.xlsx" & "; extended properties=""Excel 12.0 Xml;HDR=YES"""
CON2.connectionstring = "Data source=" & ActiveDocument.Path & "\База2.xlsx" & "; extended properties=""Excel 12.0 Xml;HDR=YES"""
CON3.connectionstring = ???????????
CON1.Open
CON2.Open
CON3.Open
RS1.CursorType = 2 'adOpenDynamic
RS1.LockType = 3 'adLockOptimistic
RS1.CursorLocation = 3 'adUseClient
RS1.Open "SELECT * FROM [База$]", CON1
RS2.Open "SELECT * FROM [База$]", CON2
'пытаюсь выполнить что-то вроде
RS3.Open "RS1 UNION ALL RS2", CON3

'не получилось и пришлось выгружать в массивы и их объединять

varOtgruz1 = RS1.getrows()
varOtgruz2 = RS2.getrows()

'....и т.д.


Модератор: Учимся использовать тэги оформления кода - FAQ
...
Рейтинг: 0 / 0
Объединить несколько recordset в один - VBA
    #39592291
Фотография klen_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вот пример
https://stackoverflow.com/questions/34294382/how-to-join-two-recordset-created-from-two-different-data-source-in-excel-vba
но я обычно создаю временный акцессовский файл,
линкую к нему разные таблицы (текстовые файлы, dbf-ки, excel-листы, таблицы из баз ms sql, firebird, odbc) в общем всё что угодно,
и запросами выбираю то что нужно.

другие варианты то же интересны!
...
Рейтинг: 0 / 0
Объединить несколько recordset в один - VBA
    #39593023
Tonio
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
klen_вот пример
https://stackoverflow.com/questions/34294382/how-to-join-two-recordset-created-from-two-different-data-source-in-excel-vba
но я обычно создаю временный акцессовский файл,
линкую к нему разные таблицы (текстовые файлы, dbf-ки, excel-листы, таблицы из баз ms sql, firebird, odbc) в общем всё что угодно,
и запросами выбираю то что нужно.

другие варианты то же интересны!

Супер! То, что нужно! Спасибо огромное!

Код получился следующим:
- макрос запускается из документа Word
Код: 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.
Sub ADO_connect_Word()

Dim strConnection As String
Dim strQuery As String
Dim objConnection As Object
Dim objRecordSet As Object

Set objConnection = CreateObject("ADODB.Connection")

    objConnection.provider = "Microsoft.ACE.OLEDB.12.0"
    objConnection.connectionstring = "Data Source=" & ActiveDocument.Path & "\UNION.xlsx" & ";Mode=Read;" & _
            "Extended properties=""Excel 12.0 Xml;HDR=YES"""
    objConnection.Open
    
       strQuery = "SELECT * FROM [База$] " & "IN '" & ActiveDocument.Path & "\База1.xlsx' " & _
        "[Excel 12.0;Provider=Microsoft.ACE.OLEDB.12.0;Mode=Read;Extended Properties='HDR=YES;'] " & _
        "UNION " & _
        "SELECT * FROM [База$] " & "IN '" & ActiveDocument.Path & "\База2.xlsx' " & _
        "[Excel 12.0;Provider=Microsoft.ACE.OLEDB.12.0;Mode=Read;Extended Properties='HDR=YES;']" & "ORDER BY [Номер вагона];"

Set objRecordSet = objConnection.Execute(strQuery)
Debug.Print objRecordSet.getstring
objConnection.Close

End Sub


- макрос запускается из документа Excel
Код: 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.
Sub ADO_connect_Ecxel()

Dim strConnection As String
Dim strQuery As String
Dim objConnection As Object
Dim objRecordSet As Object

Set objConnection = CreateObject("ADODB.Connection")

    objConnection.provider = "Microsoft.ACE.OLEDB.12.0"
    objConnection.connectionstring = "Data Source='" & ThisWorkbook.FullName & "';" & "Mode=Read;" & _
            "Extended properties=""Excel 12.0 Xml;HDR=YES"""
    objConnection.Open
               
       strQuery = "SELECT * FROM [База$] " & "IN '" & ThisWorkbook.Path & "\База1.xlsx' " & _
        "[Excel 12.0;Provider=Microsoft.ACE.OLEDB.12.0;Mode=Read;Extended Properties='HDR=YES;'] " & _
        "UNION " & _
        "SELECT * FROM [База$] " & "IN '" & ThisWorkbook.Path & "\База2.xlsx' " & _
        "[Excel 12.0;Provider=Microsoft.ACE.OLEDB.12.0;Mode=Read;Extended Properties='HDR=YES;']" & "ORDER BY [Номер вагона];"

Set objRecordSet = objConnection.Execute(strQuery)
Debug.Print objRecordSet.getstring
objConnection.Close

End Sub



Всё работает, но единственное, что смущает - при запуске из Word приходится указывать путь к вымышленному файлу Data Source=" & ActiveDocument.Path & "\UNION.xlsx", не знаю, насколько это корректно.
...
Рейтинг: 0 / 0
3 сообщений из 3, страница 1 из 1
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Объединить несколько recordset в один - VBA
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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