Консультация № 145393
29.09.2008, 11:01
0.00 руб.
29.09.2008, 11:27
0 4 0
Таблица WaybillDesc: RecId, RecIdOrder, quantity, date
Есть функция: получает RecIdOrder, возвращает сумму всех (его, т.е. RecIdOrder, примечание переводчика) количеств (видимо SUM(quantity), примечание переводчика).

Код:
CREATE FUNCTION [dbo].[mfGetSumForWorkOrder] (
@recidWO uniqueidentifier
)
RETURNS float AS
BEGIN
declare @quan float

SET @quan = (SELECT TOP 1 sum (ItemQuan) from WaybillDesc
where RecIdWorkOrder = @recidWO)
return @quan
END


Вызываю из Delphi:
Код:
DataSource1.DataSet.FieldByName('ItemQuan').AsVariant :=
DM.Conn.Execute(
'select dbo.mfGetSumForWorkOrder(OrderId)');


Выдаёт ошибку.
Спасибо заранее.

Приложение:
tabliza WaybillDesc: RecId, RecIdOrder, quantity, date
est func: poluchae RecIdOrder vozvrashaet sum vseh ego quntity


CREATE FUNCTION [dbo].[mfGetSumForWorkOrder] (
@recidWO uniqueidentifier
)
RETURNS float AS
BEGIN
declare @quan float

SET @quan = (SELECT TOP 1 sum (ItemQuan) from WaybillDesc
where RecIdWorkOrder = @recidWO)
return @quan
END

vizivau is dlphi:

DataSource1.DataSet.FieldByName('ItemQuan').AsVariant :=
DM.Conn.Execute(
'select dbo.mfGetSumForWorkOrder(OrderId)');
vidaet oshibku.
spasibo zaranee




Обсуждение

Неизвестный
29.09.2008, 12:55
общий
а что это у вас за хитрый код

Код:
 DataSource1.DataSet.FieldByName('ItemQuan').AsVariant :=
DM.Conn.Execute(
'select dbo.mfGetSumForWorkOrder(OrderId)');


что он по вашему делает ?
Неизвестный
29.09.2008, 15:54
общий
vopros konechno intersnii!!!!!!!!!!

visivaet func db i posilaet tuda parametr, po idee
no tak on konachno ne zarabotaet
ya uga nasla gde oshibka, spasibo vse ravno

do svisanie
Неизвестный
29.09.2008, 15:58
общий
интересно было бы знать где ошибка
Неизвестный
29.09.2008, 16:00
общий
Вы пытаетесь совместить логику сервера (СУБД) и программирование. Это разное по сути вещи.
Функция на сервере выполняет что-то, Вы же пытаетесь выполнить её на сервере и потом ждете результат - а где он должен быть?
Метод Execute, дословно "выполнить", не возвращает набор данных.
В общем, ничего не понятно. И зачем делать top в запросе функции, если и так возвращается 1 значение.

Если хотите получать значение — используйте, например, TADOQuery с запросом:
SELECT SUM(ItemQuan) AS SUM_Quan from WaybillDesc
WHERE RecIdWorkOrder = :recidWO

Тогда, можно вызвать TADOQuery, передать в параметр recidWO значение и открыть набор, например Active := true; После этого получить сумму FieldByName('SUM_Quan').AsFloat
DataSource1.DataSet.FieldByName('ItemQuan').Value := Query1.FieldByName('SUM_Quan').AsFloat;

Да вариантов много.
Форма ответа