Rainbow писал(а):Так.... Давай уточним...
1) VBA - пишешь что-то в самом Access?
2) что используешь - DAO, ADO? Если не знаешь, то скорее всего DAO (он там по умолчанию). Можешь посмотреть в Tools->Referencies. Хотя, для ответа на твой вопрос это не так важно, но на будущее это знать надо.
3) Ты уже познакомился с такими объектами, как Recordset и Connection? В DAO есть объект CurrentDB, у него свойсво Connection.
У Connection есть метод OpenRecordset, который результат выборки возвращает в рекордсет. В ADO есть аналогичные вещи.
Ты это искал?
Rainbow писал(а):Хм... тут уже 2 вопроса у тебя...
1) как получить выборку
2) как запрос выполнить асинхронно
Асинхронность, насколько я знаю, в DAO не поддерживается. Она есть в ADO. Там можно описать глобальный (для модуля) объект и ловить от него события.
Примерчик запроса не подкинешь? Это все-таки запрос, который возвращает выборку какую-нибудь или нет? Тебе именно в массив надо?
В массив, боюсь, никакими силами не получится. В ракордсет - наздоровье.
Зачем QueryDef создаешь? Чтобы потом DoCmd сделать? Запрос с параметрами?
Перейти на ADO довольно просто.
SELECT Sum(CCur(Заказано.Цена*Заказано.Количество/100)*100) AS Сумма
FROM Клиенты INNER JOIN (Заказы INNER JOIN Заказано ON Заказы.КодЗаказа = Заказано.КодЗаказа) ON Клиенты.КодКлиента = Заказы.КодКлиента
WHERE (((Клиенты.КодКлиента)="ANATR"))
Dim Summ as Long
Dim rst as New Recordset
Set rst = CurrentDB.Connection.OpenRecordset(strSQL, dbOpenDynaset)
if rst.RecordCount > 0 then
Summ = rst(0)
end if
Rainbow писал(а):Проще всего так:
- Код: Выделить всё
Dim Summ as Long
Dim rst as New Recordset
Set rst = CurrentDB.Connection.OpenRecordset(strSQL, dbOpenDynaset)
if rst.RecordCount > 0 then
Summ = rst(0)
end if
Попробуй - не проверяла
Может, параметры какие-нибудь еще надо указать в openRecordset
Я DAO плохо знаю
Dim Summ As Variant
Dim strSQL As String
Dim dbs As Database, rst As Recordset
ch = """"
strSQL = "SELECT Sum(CCur(Заказано.Цена*Заказано.Количество/100)*100) AS Сумма" & Chr(13) & "FROM Клиенты INNER JOIN (Заказы INNER JOIN Заказано ON Заказы.КодЗаказа = Заказано.КодЗаказа) ON Клиенты.КодКлиента = Заказы.КодКлиента" & Chr(13) & "WHERE (((Клиенты.КодКлиента)=" & ch & "ANATR" & ch & "));"
Set dbs = CurrentDb
Set rst = dbs.OpenRecordset(strSQL)
If rst.RecordCount > 0 Then
Summ = rst.Fields("Сумма")
End If
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 4