Вопрос про запрос.

Diroled
Дата: 22.09.2005 12:58:52
В общем писал я сюда как сделать на VBA запрос, получить из него данные и обрабоать их.
Ничего из этого не вышло :(

Вот пробую более простой способ.
Создаю конструктором запрос (сумирование поля1). На событие запускаю запрос.
Так вот тут и возникает вопрос, как мне в этом случае получить из запроса эту сумму без того, чтобы не делать на форме подчененныю форму с контролом и работать уже с переменной через этот контрол?
funddd
Дата: 22.09.2005 13:22:12
куда получить?
msn13
Дата: 22.09.2005 13:47:02
dlookup, dsum
Diroled
Дата: 22.09.2005 14:53:15
funddd
куда получить?


Private Sub Кнопка6_Click()
On Error GoTo Err_Кнопка6_Click

    Dim stDocName As Recordset

    stDocName = "SELECT Проведенные.Партия, Проведенные.Подпартия, Sum(CCur(Round([Количество],3))) AS SumRem " & _
                "FROM Проведенные " & _
                "GROUP BY Проведенные.Партия, Проведенные.Подпартия " & _
                "HAVING (((Проведенные.Партия)=[Forms]![Заказы].[Form]![Подчиненная Проведенные]![Партия]) AND ((Проведенные.Подпартия)=[Forms]![Заказы].[Form]![Подчиненная Проведенные]![Подпартия]))"
    DoCmd.OpenQuery stDocName, acNormal, acEdit
    
    Forms!форма1!Поле4 = stDocName.Fields(SumRem)
    
    
Exit_Кнопка6_Click:
    Exit Sub

Err_Кнопка6_Click:
    MsgBox Err.Description
    Resume Exit_Кнопка6_Click
    
End Sub
Diroled
Дата: 22.09.2005 15:20:05
msn13
dlookup, dsum


я же не по таблице бегаю, а делаю выборку с параметрами и суммирую одно поле. Так вот мне и нужно эту сумма программным кодом получить.

В общем почитал немного толму и получилось

Private Sub Кнопка6_Click()
On Error GoTo Err_Кнопка6_Click

    Dim stDocName As Recordset

    stDocName.Open "SELECT Проведенные.Партия, Проведенные.Подпартия, Sum(CCur(Round([Количество],3))) AS SumRem " & _
                "FROM Проведенные " & _
                "GROUP BY Проведенные.Партия, Проведенные.Подпартия " & _
                "HAVING (((Проведенные.Партия) = 303) AND ((Проведенные.Подпартия) = 55))"
    DoCmd.OpenQuery stDocName, acNormal, acEdit
    
    Forms!форма1!Поле4 = stDocName.Fields(SumRem)
    
    stDocName.Close
        
End Sub

Выдает ошибку Object variable or with block variable notset

Может не правильный метод использую для recordset
Alexander G
Дата: 22.09.2005 15:29:52
Dim stDocName As New ADODB.Recordset
Diroled
Дата: 22.09.2005 15:30:21
Diroled
msn13
dlookup, dsum


я же не по таблице бегаю, а делаю выборку с параметрами и суммирую одно поле. Так вот мне и нужно эту сумма программным кодом получить.

В общем почитал немного толму и получилось

Private Sub Кнопка6_Click()
On Error GoTo Err_Кнопка6_Click

    Dim stDocName As Recordset

    stDocName.Open "SELECT Проведенные.Партия, Проведенные.Подпартия, Sum(CCur(Round([Количество],3))) AS SumRem " & _
                "FROM Проведенные " & _
                "GROUP BY Проведенные.Партия, Проведенные.Подпартия " & _
                "HAVING (((Проведенные.Партия) = 303) AND ((Проведенные.Подпартия) = 55))"
    DoCmd.OpenQuery stDocName, acNormal, acEdit
    
    Forms!форма1!Поле4 = stDocName.Fields(SumRem)
    
    stDocName.Close
        
End Sub

Выдает ошибку Object variable or with block variable notset

Может не правильный метод использую для recordset


Понял от части почему не работает, поэтому попутно еще один вопрос.
Как сделать в моем случае подключение к таблице и его указать в методе
recordset.open
AndrewNico
Дата: 22.09.2005 15:30:24
Dim cnn as Adodb.Connection
Dim rst as Adodb.Recordset
Dim strSQL as string

set cnn = currentproject.connection
set rst = new adodb.recordset

strsql = "SELECT Проведенные.Партия, Проведенные.Подпартия, Sum(CCur(Round([Количество],3))) AS SumRem " & _
                "FROM Проведенные " & _
                "WHERE (((Проведенные.Партия) = 303) AND ((Проведенные.Подпартия) = 55)) " & _
                "GROUP BY Проведенные.Партия, Проведенные.Подпартия " 
rst.open strsql, cnn

if not rst.EOF then
   Forms!форма1!Поле4 = rst.Fields(SumRem)
end if

rst.close

set rst = nothing
set cnn = nothing

Diroled
Дата: 22.09.2005 15:52:20
AndrewNico
Dim cnn as Adodb.Connection
Dim rst as Adodb.Recordset
Dim strSQL as string

set cnn = currentproject.connection
set rst = new adodb.recordset

strsql = "SELECT Проведенные.Партия, Проведенные.Подпартия, Sum(CCur(Round([Количество],3))) AS SumRem " & _
                "FROM Проведенные " & _
                "WHERE (((Проведенные.Партия) = 303) AND ((Проведенные.Подпартия) = 55)) " & _
                "GROUP BY Проведенные.Партия, Проведенные.Подпартия " 
rst.open strsql, cnn

if not rst.EOF then
   Forms!форма1!Поле4 = rst.Fields(SumRem)
end if

rst.close

set rst = nothing
set cnn = nothing



Что означает в этом случае if not rst.EOF , что если завершиться запрос тогда и выполнится условие?
ругается на строки
set rst = nothing   
set cnn = nothing

Убрал эти строки после чего стала выдавать ошибку "несоответствие типа данных в условия отбора", т.е. как понимаю не выполняется запрос. Но я его копирую в конструктор и все работает. Где копать.

И еще вопрос, приведено текущее подключение для ADO, а как писать для DAO текущее и не текущее для обоих видов?
Тяп-ляп
Дата: 22.09.2005 16:08:03
    Dim stDocName As Recordset

    stDocName = "SELECT ...."
    DoCmd.OpenQuery stDocName, acNormal, acEdit
    
    Forms!форма1!Поле4 = stDocName.Fields(SumRem)
Это просто цирк!