|
|
|
Junior Member
      
участник
Last Login: 05.03.2005 0:37
Сообщ.: 12,
Visits: 133
|
|
Можно ли полям назначить результат вычисления SQL-запроса? Как в exel...то есть одному полю назначить, например, сумму других? В пределах одной строки и таблцы хотя бы...
|
|
|
|
|
Supreme Being
      
участник
Last Login: 14.11.2005 10:06
Сообщ.: 283,
Visits: 3 114
|
|
Поле.ControlSource = CurrentProject.Connection.Execute("Select fldSumm From MyQuery").GetString
...не уверен что так прокатит... можно тогда и:
Private Sub lalala() Поле = CurrentProject.Connection.Execute("Select fldSumm From MyQuery").GetString End Sub
|
|
|
|
|
новичок
      
участник
Last Login: 22.02.2005 11:19
Сообщ.: 1,
Visits: 12
|
|
| Полям чего? Таблицч - думаю нет. Во-первых в Access нет тригеров, а во-вторых появляется избыточность информации (а зачем это нужно?). Формы или отчета - да, конечно можно.
|
|
|
|
|
Supreme Being
      
участник
Last Login: 24.11.2007 8:22
Сообщ.: 403,
Visits: 4 348
|
|
У меня такое чувство, что на самом деле этого не надо, можно обойтись мирными способами. Может ты сформулируешь, что ты хочешь получить на выходе, и подумаем, каким образом это можно сделать. А хранить в базе результаты вычислений данных, это денормализация.
|
|
|
|
|
Junior Member
      
участник
Last Login: 05.03.2005 0:37
Сообщ.: 12,
Visits: 133
|
|
я согласен что хранить вычисляемые значения в базе это не очень. Просто если выбирать - делать это запросе при выборке или чтобы это делалось автоматически, я подумал что можно бы и автоматически. Тем более что мне постоянно нужно вытаскивать из прайса сумму количеств по одной строке. Я хотел сделать Итого с автовычислением. Оно а работало бы быстрее. ;)
|
|
|
|
|
Forum Guru
      
участник
Last Login: 16.08.2005 11:52
Сообщ.: 69,
Visits: 760
|
|
Тоже присоединяюсь к вопросу!
Есть запрос на выборку, с агрегатными функциями. Т.е. Запрос выдаёт только 3 значения (3 суммы). В запросе 3 условия. Как можно запустить этот запрос и результат присвоить какому либо полю?
Пробовал так:
Dim table As DAO.Recordset
Dim SQL_Query As Variant
SQL_Query = "SELECT ....."
DoCmd.RunSQL SQL_Query
Set table = CurrentDb.OpenRecordset(SQL_Query, dbOpenDynaset)
If Not table.EOF Then Pole1 = table.Fields(0)
Не работает :(
|
|
|
|
|
Supreme Being
      
участник
Last Login: 24.06.2008 11:30
Сообщ.: 95,
Visits: 934
|
|
Может, я не понял проблемы, но, насколько я знаю, полю нельзя напрямую присвоить значение SQL-запроса, т.к. SQL-запрос по сути возвращает _набор_значений_ (даже если в этом наборе только 1 запись) а полю можно задать только одно значение.
В случае, если вам необходимо присвоить полю значение, возвращаемое запросом, то лучше поступить следующим образом:
1. Создаете новый модуль
2. Создаете в нем Public Function, которая будет возвращать вам значение из вашего SQL-запроса. (Кстати, функция может быть с параметрами, что расширяет возможность реализации ваших самых буйных фантазий :))
3. Полю на форме присваиваете вашу функцию.
Вот пример функции, которая возвращает НДС для указанного продукта
в зависимости от принадлежности его к тому или иному типу.
(Все продукты хранятся в таблице DICT_PRODUCT, каждый продукт принадлежит к тому или иному типу. Все типы хранятся в DICT_ProdType. В последней таблице есть поле [NDS])
Итак,
Аргумент функции - lngID_Product - ид.номер продукта
На выходе имеем значение НДС
-----------
Public Function GetNDS(lngID_Product As Long) As Byte
Dim cnn As ADODB.Connection
Dim strSQL$
Set cnn = CurrentProject.Connection
Dim rst As ADODB.Recordset
Set rst = New ADODB.Recordset
strSQL = "SELECT DICT_Product.ID_Prod, DICT_Product.ID_ProdType, DICT_ProdType.stNDS FROM DICT_ProdType INNER JOIN DICT_Product ON DICT_ProdType.ID_ProdType = DICT_Product.ID_ProdType WHERE DICT_Product.ID_Prod = " & lngID_Product & ";"
rst.Open strSQL, cnn, adOpenForwardOnly, adLockReadOnly
With rst
If Not .EOF Then 'если переданный аргумент соответствует
'существующему продукту, то запрос вернет одну и
'только одну запись.
'поэтому можно сразу присвоить функции значение
'stNDS из текущей строки рекордсета
GetNDS = !stNDS
Else
MsgBox "не найден стандартный НДС. Будет использован НДС=0"
GetNDS = 0
End If
End With
End Function
---------------
Теперь в форме, имеющей поля txtProductID и txtNDS, для поля txtNDS можно в свойстве "данные" смело использовать следующую конструкцию:
=GetNDS([txtProductID])
|
|
|
|