Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Вопрос по ADODB / 6 сообщений из 6, страница 1 из 1
14.05.2004, 12:39
    #32517827
guest
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по ADODB
Добрый день, вопрос наверное простой, однако в Helpe сходу не нашел (только начал работать через ADODB в VB).
В VB через ADODB.Connection получаю Recordset-ы (выборки из разных таблиц).
Можно ли к примеру из двух, трех таких рекордсетов делать выборки в новый рекордсет как из обычных таблиц (группировать, join-ить и т.д.).
...
Рейтинг: 0 / 0
14.05.2004, 13:22
    #32517983
Alexander Popov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по ADODB
Лучше это все делать на сервере
...
Рейтинг: 0 / 0
14.05.2004, 13:56
    #32518130
guest
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по ADODB
Спасибо за ответ, но в моем случае источники данных разнородны, в основном листы 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
14.05.2004, 14:30
    #32518247
guest
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по ADODB
Спасибо за ответ, но в моем случае источники данных разнородны, в основном листы 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
14.05.2004, 15:49
    #32518469
marvan
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по ADODB
Создай связанные таблицы в Access c этими листами, и работай с ними.
Можно создавать Recordset c текстом запроса, но лучше сохранить запрос в Access и открывать его используя Command, при необходимости передав параметры.
...
Рейтинг: 0 / 0
16.05.2004, 16:22
    #32519421
meddows
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по ADODB
Я когда-то делал фукцию объединения двух рекордсетов, всё работало быстро. Появилось ли какое-то более "быстрое средство" не знаю.

Код: 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
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Вопрос по ADODB / 6 сообщений из 6, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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