Можно ли полям назначить результат вычисления SQL-запроса?
Релиб
Форумы       Участники    Календарь    Кто он-лайн?
Добро пожаловать, гость ( Вход | Регистрация )
        



Можно ли полям назначить результат вычисления... Expand / Collapse
Автор
Сообщение
20.02.2005 18:35
Junior Member

Junior MemberJunior MemberJunior MemberJunior MemberJunior MemberJunior MemberJunior MemberJunior Member

участник
Last Login: 05.03.2005 0:37
Сообщ.: 12, Visits: 133
Можно ли полям назначить результат вычисления SQL-запроса?
Как в exel...то есть одному полю назначить, например, сумму других?
В пределах одной строки и таблцы хотя бы...
Сообщ. #858276
21.02.2005 6:43
Supreme Being

Supreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme 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
Сообщ. #858309
22.02.2005 11:22
новичок

новичокновичокновичокновичокновичокновичокновичокновичок

участник
Last Login: 22.02.2005 11:19
Сообщ.: 1, Visits: 12
Полям чего? Таблицч - думаю нет. Во-первых в Access нет тригеров, а во-вторых появляется избыточность информации (а зачем это нужно?). Формы или отчета - да, конечно можно.
Сообщ. #858568
22.02.2005 12:17


Supreme Being

Supreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme Being

участник
Last Login: 24.11.2007 8:22
Сообщ.: 403, Visits: 4 348
У меня такое чувство, что на самом деле этого не надо, можно обойтись мирными способами.
Может ты сформулируешь, что ты хочешь получить на выходе, и подумаем, каким образом это можно сделать.
А хранить в базе результаты вычислений данных, это денормализация.
Сообщ. #858573
22.02.2005 13:53
Junior Member

Junior MemberJunior MemberJunior MemberJunior MemberJunior MemberJunior MemberJunior MemberJunior Member

участник
Last Login: 05.03.2005 0:37
Сообщ.: 12, Visits: 133
я согласен что хранить вычисляемые значения в базе это не очень.
Просто если выбирать - делать это запросе при выборке или чтобы
это делалось автоматически, я подумал что можно бы и автоматически.
Тем более что мне постоянно нужно вытаскивать из прайса сумму количеств по одной строке. Я хотел сделать Итого с автовычислением.
Оно а работало бы быстрее. ;)
Сообщ. #858597
30.05.2005 14:17
Forum Guru

Forum GuruForum GuruForum GuruForum GuruForum GuruForum GuruForum GuruForum 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)

Не работает :(
Сообщ. #870184
25.06.2005 20:37


Supreme Being

Supreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme 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])
Сообщ. #873377
« пред. тема | след. тема »


Эту тему читают Expand / Collapse
Посетители: 0 (0 гостей, 0 участников, 0 скрыт.участников)
Сейчас нет участников, просматривающих тему.
Модераторы: Alexey, boombastik, bazile, pl

Время GMT +3:00, Сейчас 2:10