powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Вопрос по ADODB
6 сообщений из 6, страница 1 из 1
Вопрос по ADODB
    #32517827
guest
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый день, вопрос наверное простой, однако в Helpe сходу не нашел (только начал работать через ADODB в VB).
В VB через ADODB.Connection получаю Recordset-ы (выборки из разных таблиц).
Можно ли к примеру из двух, трех таких рекордсетов делать выборки в новый рекордсет как из обычных таблиц (группировать, join-ить и т.д.).
...
Рейтинг: 0 / 0
Вопрос по ADODB
    #32517983
Alexander Popov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Лучше это все делать на сервере
...
Рейтинг: 0 / 0
Вопрос по ADODB
    #32518130
guest
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо за ответ, но в моем случае источники данных разнородны, в основном листы Excel. Из листов можно делать запросы, однако там ограничения определенные имеются. Left Join Например сделать более чем по двум таблицам мне не удается. Например:
select a.*, b.* from [Sheet1$Range1] as a left join [Sheet2$Range2] as b on a.F1=b.F2
работает, а более чем по двум таблицам нет.
В SQL это решалось бы просто:
where a.f1*=b.F1 and a.F1*=c.F1
...
Рейтинг: 0 / 0
Вопрос по ADODB
    #32518247
guest
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо за ответ, но в моем случае источники данных разнородны, в основном листы Excel. Из листов можно делать запросы, однако там ограничения определенные имеются. Left Join Например сделать более чем по двум таблицам мне не удается. Например:
select a.*, b.* from [Sheet1$Range1] as a left join [Sheet2$Range2] as b on a.F1=b.F2
работает, а более чем по двум таблицам нет.
В SQL это решалось бы просто:
where a.f1*=b.F1 and a.F1*=c.F1
...
Рейтинг: 0 / 0
Вопрос по ADODB
    #32518469
marvan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Создай связанные таблицы в Access c этими листами, и работай с ними.
Можно создавать Recordset c текстом запроса, но лучше сохранить запрос в Access и открывать его используя Command, при необходимости передав параметры.
...
Рейтинг: 0 / 0
Вопрос по ADODB
    #32519421
meddows
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Я когда-то делал фукцию объединения двух рекордсетов, всё работало быстро. Появилось ли какое-то более "быстрое средство" не знаю.

Код: plaintext
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.
Public Function MergeRecordsets(oRs1 As ADODB.Recordset, oRs2 As ADODB.Recordset, Optional bDeleteFirst As Boolean) As ADODB.Recordset
    // bDeleteFirst - означает надо ли во втором рекордсете включать первый столбец. Это было сделано для MS Access в виду того что в аксессовских вьюхах есть ограничения по количеству полей.
    Dim c, i, k, a As Integer
    Dim oRsOut As ADODB.Recordset
    
    On Error Resume Next
    Set oRsOut = New ADODB.Recordset
    If bDeleteFirst Then c =  2 
    For i =  0  To oRs1.Fields.Count -  1 
        oRsOut.Fields.Append oRs1.Fields(i).Name, oRs1.Fields(i).Type, oRs1.Fields(i).DefinedSize, oRs1.Fields(i).Attributes
    Next i
    a = i
    For k = c To oRs2.Fields.Count -  1 
        oRsOut.Fields.Append oRs2.Fields(k).Name, oRs2.Fields(k).Type, oRs2.Fields(k).DefinedSize, oRs2.Fields(i).Attributes
    Next k
    oRsOut.LockType = adLockOptimistic
    oRsOut.CursorType = adOpenStatic
    oRsOut.Open
    If oRs1.EOF Or oRs2.EOF Then GoTo ExitSub
    oRs1.MoveFirst
    
    Dim aFields() As Variant
    Dim aValues() As Variant
    ReDim aFields(oRsOut.Fields.Count -  1 )
    ReDim aValues(oRsOut.Fields.Count -  1 )
    
    For i =  0  To oRsOut.Fields.Count -  1 
        aFields(i) = oRsOut.Fields(i).Name
        If i < a Then
            aValues(i) = oRs1(oRsOut.Fields(i).Name).Value
        Else
            aValues(i) = oRs2(oRsOut.Fields(i).Name).Value
        End If
    Next i
    oRsOut.AddNew aFields, aValues
    oRsOut.MoveFirst
    Set MergeRecordsets = oRsOut
ExitSub:
    Exit Function
End Function
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Вопрос по ADODB
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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