Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Type mismatch при работе с хранимой процедурой / 6 сообщений из 6, страница 1 из 1
06.10.2004, 11:02:58
    #32725353
roman10
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Type mismatch при работе с хранимой процедурой
Запускаю хранимую процедуру и пытаюсь извлечь результат ее работы. Сначала создал запрос qryCalcContractObjectSum:

EXEC my_procedure тут параметры...

Процедура возвращает рекордест из единственного столбца типа double.
Далее пишу вот такой вот код:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
    Dim cnnLocal As New ADODB.Connection
    Dim rstCurr  As New ADODB.Recordset
    Dim dblVal As Double    
   
    Set cnnLocal = CurrentProject.Connection
        rstCurr.Open "SELECT * FROM qryCalcContractObjectSum", cnnLocal, adOpenStatic, adLockReadOnly
    dblVal = rstCurr("sum_price")  ' <--- тут вылезает Type Mismatch 
    rstCurr.Close
    
    Set cnnLocal = Nothing


И если rstCurr("sum_price") обернуть в CDbl, тоже не работает. Такая вот бяка. Может кто сталкивался раньше? Где тут грабли...
...
Рейтинг: 0 / 0
06.10.2004, 11:11:19
    #32725383
paparome
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Type mismatch при работе с хранимой процедурой
Как вариант

rstCurr("sum_price") - может иметь значение Null (по определению T-SQL)
А вот тип Double в VBA не может иметь значение Null

Делаем вывод
Код: plaintext
Dim dblVal As Variant
...
Рейтинг: 0 / 0
06.10.2004, 11:12:39
    #32725389
Лох Позорный
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Type mismatch при работе с хранимой процедурой
чем гадать - лучше поглядеть в отладчике, какого же оно типа
...
Рейтинг: 0 / 0
06.10.2004, 11:16:36
    #32725407
roman10
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Type mismatch при работе с хранимой процедурой
Да, в отладчике rstCurr("sum_price") видится как текстовая строчка почему-то.

Что касается NULL, то его гарантированно не может быть по логике работы процедуры.
...
Рейтинг: 0 / 0
06.10.2004, 11:39:26
    #32725479
roman10
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Type mismatch при работе с хранимой процедурой
Мдя, методом тыка нашлись грабли. Если кому интересно...

Первоначально хр. процедура имела вид обычныго запроса (речь идет о SQL Server естественно):
Код: plaintext
1.
2.
3.
4.
SELECT SUM(...) AS sum_price
...
далее куча джойнов
....

Потом переделал так:
Код: plaintext
1.
2.
3.
4.
5.
6.
DECALARE @res NUMERIC(9,4)

SELECT @res = SUM(...)
...куча джойнов...

SELECT @res AS sum_price

Вот тут все запахало.

Короче, похоже что Acces и SQL Server не всегда могут договориться, какому типу принадлежит то или иное поле. Или SQL Server переделывает все в String, если тип не задан явно, что помоему странно. Чудеса, однако.
...
Рейтинг: 0 / 0
06.10.2004, 11:53:23
    #32725530
paparome
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Type mismatch при работе с хранимой процедурой
Не совсем так - есть некоторые типы в SQL, у которых нет аналогов Аксе
(например bigint )
В таких случаях Акс приводит эти типы к стрингам и не парится :)
...
Рейтинг: 0 / 0
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Type mismatch при работе с хранимой процедурой / 6 сообщений из 6, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]