Access 2007 + SQL Server 2005 Скалярная функция

йцукавыф
Дата: 16.12.2011 14:05:14
Код функции

[src][/SRC]
ALTER FUNCTION dbo.ПоследняяЦена
(@P int)
RETURNS money
BEGIN
DECLARE @R numeric(10,2)
Select TOP 1 @R = ЦенаП FROM Приход
Where КодТовара = @P
RETURN @R
END

Код VBA

Private Sub Поле72_AfterUpdate()
Dim a As Integer
a = Me!Поле72
Debug.Print CurrentProject.Connection.Execute("SELECT dbo.ПоследняяЦена (" & a & ")")
End Sub



Говорит
ERROR 13
TYPE MISMATCH

когда ручками в функцию вводишь все нормально
В чем может быть дело.
?????
Дата: 16.12.2011 14:44:34
АДП?
Private Sub Поле72_AfterUpdate()
Dim a As long
a = Me!Поле72
Debug.Print CurrentProject.Connection.Execute("SELECT dbo.ПоследняяЦена (" & a & ")")
End Sub
йцукавыф
Дата: 16.12.2011 14:49:38
ДА.
йцукавыф
Дата: 16.12.2011 14:55:17
В профайлере видно на сервер уходит

SELECT dbo.ПоследняяЦена(2150)

походу ACCESSу не нравиться возвращаемый тип данных почему то.
Sator Arepo
Дата: 16.12.2011 15:00:49
Debug.Print-у нужна строка.
А метод CurrentProject.Connection.Execute ничего не возвращает (я так думаю). Вот если добавить к нему Fields(i) (или Collect(i)) тогда уже можно ожидать какой-то вывод.
Думаю, в этот и дело.
Debug.Print CurrentProject.Connection.Execute("SELECT dbo.ПоследняяЦена (" & a & ")").Fields(0)
йцукавыф
Дата: 16.12.2011 15:11:20
Точняк !!!!!!!!!!

Я только только начал вникать в ADP.

Если не трудно поясните на помидорах почему так.
Sator Arepo
Дата: 16.12.2011 15:23:33
йцукавыф
Точняк !!!!!!!!!!

Я только только начал вникать в ADP.

Если не трудно поясните на помидорах почему так.

Почему как что? Слишком сжато написал?
Я
Дата: 16.12.2011 15:34:58
Функция возвращает рекордсет из одной записи, в которой одно поле. Чтобы прочитать значение из поля и используется Fields(0)
йцукавыф
Дата: 16.12.2011 15:47:10
Я
Функция возвращает рекордсет из одной записи, в которой одно поле. Чтобы прочитать значение из поля и используется Fields(0)


Т.е. если бы возвращалось два значения то надо по очереди Fields(0) и Fields(1).
Sator Arepo
Дата: 16.12.2011 15:54:24
йцукавыф
Точняк !!!!!!!!!!

Я только только начал вникать в ADP.

Если не трудно поясните на помидорах почему так.

ADP здесь вообще мало причем.
Еще раз. Debug.Print-у нужно строковое значение.
Метод Exeсute объекта CurrentProject.Connection сам по себе не возвращает никакого значения, хотя и может формировать рекордсет.
Вывод рекордсета формирует значение Value. У св-ва Fields(i) это св-во по умолчанию. (Писал не проверяя, но думаю, что это так).
Кстати, а разве скалярная функция может вернуть более одного значения?