Снова про SELECT в VBA

Diroled
Дата: 20.09.2005 17:25:20
Создал модуль с именем Remainder, в котором хочу по двум полям "партия" и "подпартия" найти все записи и просуммровать значения поля "Количество"
значение нужно будет записать в ячейку другой таблицы, но пока его я для проверки присваиваю самой функции.
Модуль не работает :(

Option Compare Database
Option Explicit

Const InTabl = "Приведенные", OutTabl = "Проведенные"

Dim InData As DAO.Recordset, OutData As DAO.Recordset

Sub open_Remainder()
  On Error Resume Next
  InData.Close
  Set InData = CodeDb.OpenRecordset(SNumT, dbOpenDynaset)
  OutData.Close
  Set OutData = CodeDb.OpenRecordset(SOrdT, dbOpenDynaset)
  On Error GoTo 0
End Sub

Sub close_Remainder()
  On Error Resume Next
  InData.Close
  Set InData = Nothing
  OutData.Close
  Set OutData = Nothing
  On Error GoTo 0
End Sub

Function Remainder(Part As Integer, SubPart As Integer) As String

Dim SumRem1 As String

InData.Open "SELECT Проведенные.Партия, Проведенные.Подпартия, Проведенные.Количество, Sum(CCur(Round([Количество],3))) AS Sum1"
FROM Проведенные
Group Проведенные.Партия, Проведенные.Подпартия, Проведенные.Количество
HAVING (((Проведенные.Партия) = Part) And ((Проведенные.Подпартия) = SubPart)), CurrentProject.Connection, adOpenForwardOnly, adLockReadOnly

SumRem1 = InData.Field("Sum1")
InData.Close
Set InData = Nothing
Remainder = SumRem1
End Function

вызываю функцию вот так
=Remainder(Part;Part)

В общем не работает она, подскажите плиз!, что не так
(c)VIG
Дата: 20.09.2005 17:33:17
InData.Open "SELECT Проведенные.Партия, Проведенные.Подпартия, Проведенные.Количество, Sum(CCur(Round([Количество],3))) AS Sum1 " & _
"FROM Проведенные " & _
"Group Проведенные.Партия, Проведенные.Подпартия, Проведенные.Количество " & _
"HAVING (((Проведенные.Партия) =" &  Part & ") And ((Проведенные.Подпартия) = " &  SubPart & "))", CurrentProject.Connection, adOpenForwardOnly, adLockReadOnly
Diroled
Дата: 20.09.2005 17:37:01
(c)VIG
InData.Open "SELECT Проведенные.Партия, Проведенные.Подпартия, Проведенные.Количество, Sum(CCur(Round([Количество],3))) AS Sum1 " & _
"FROM Проведенные " & _
"Group Проведенные.Партия, Проведенные.Подпартия, Проведенные.Количество " & _
"HAVING (((Проведенные.Партия) =" &  Part & ") And ((Проведенные.Подпартия) = " &  SubPart & "))", CurrentProject.Connection, adOpenForwardOnly, adLockReadOnly


не помогает,
и как мне просто модуль проверить, тоесть код! как увидеть значение функции
АлексейК
Дата: 20.09.2005 17:48:33
debug.assert false
поставь где хочешь код остановить и подведи мышь к переменной
Diroled
Дата: 20.09.2005 18:15:29
АлексейК
debug.assert false
поставь где хочешь код остановить и подведи мышь к переменной


В общем не получается, сам нашел пару ошибок. и получается вот такое пока

Option Compare Database
Option Explicit

Const InTabl = "Приведенные", OutTabl = "Проведенные"

Dim InData As DAO.Recordset, OutData As DAO.Recordset

Sub open_Remainder()
  On Error Resume Next
  InData.Close
  Set InData = CodeDb.OpenRecordset(InTabl, dbOpenDynaset)
  OutData.Close
  Set OutData = CodeDb.OpenRecordset(OutTabl, dbOpenDynaset)
  On Error GoTo 0
End Sub

Sub close_Remainder()
  On Error Resume Next
  InData.Close
  Set InData = Nothing
  OutData.Close
  Set OutData = Nothing
  On Error GoTo 0
End Sub

Function Remainder(Part As Integer, SubPart As Integer) As String

Dim SumRem1 As String

InData.Open "SELECT Проведенные.Партия, Проведенные.Подпартия, Проведенные.Количество, Sum(CCur(Round([Количество],3))) AS Sum1 " & _
"FROM Проведенные " & _
"Group Проведенные.Партия, Проведенные.Подпартия, Проведенные.Количество " & _
"HAVING (((Проведенные.Партия) =" & Part & ") And ((Проведенные.Подпартия) = " & SubPart & "))", CurrentProject.Connection, adOpenForwardOnly, adLockReadOnly

SumRem1 = InData.Field("Sum1")
InData.Close
Set InData = Nothing
Remainder = SumRem1

End Function

Где грабли??? плиз подскажите, очень нужно реализовать.
(c)VIG
Дата: 20.09.2005 18:47:22
А по конкретнее? Что именно не получается?
P.S И в вашем случае лучше HAVING заменить на WHERE
(c)VIG
Дата: 20.09.2005 18:56:02
И кроме того у вас
Dim InData As DAO.Recordset...
, а окрыть вы его пытаетесь как ADO рекордсет
fdsaasdf
Дата: 20.09.2005 18:57:26
Во-первых ошибка в слове 'Remainder' - видимо, в VBA есть встроенный спеллинг (частично шутка).
Во-вторых, как сочетается
Diroled

Dim InData As DAO.Recordset, OutData As DAO.Recordset

и
Diroled

CurrentProject.Connection, adOpenForwardOnly, adLockReadOnly
Oreo
Дата: 20.09.2005 19:43:51
А не надо исправить стэйтмент в функции на

Set InData=CodeDb.OpenRecordset("SELECT Проведенные.Партия, Проведенные.Подпартия, Проведенные.Количество, Sum(CCur(Round([Количество],3))) AS Sum1 " & _
"FROM Проведенные " & _
"Group Проведенные.Партия, Проведенные.Подпартия, Проведенные.Количество " & _
"HAVING (((Проведенные.Партия) =" & Part & ") And ((Проведенные.Подпартия) = " & SubPart & "))", adLockReadOnly)

Потому что ДАО рекордсет.
Diroled
Дата: 21.09.2005 10:35:18
fdsaasdf
Во-первых ошибка в слове 'Remainder' - видимо, в VBA есть встроенный спеллинг (частично шутка).
Во-вторых, как сочетается
Diroled

Dim InData As DAO.Recordset, OutData As DAO.Recordset

и
Diroled

CurrentProject.Connection, adOpenForwardOnly, adLockReadOnly


наверно ни как, но я тогда не знаю как это сделать правильно