IBX, FIBPlus, UIB, ADO, .Net и прочее-прочее-прочее, в общем все, что относится к созданию приложений, работающих с InterBase, Firebird и Yaffil - клиент-серверных, трехзвенных, консольных и т.п.
Модератор: kdv
-
Vicc
- Сообщения: 3
- Зарегистрирован: 31 авг 2007, 11:46
Сообщение
Vicc » 31 авг 2007, 12:04
Доброе время суток!
Использую FireBird 2.0.2.12964
Проблема следующая:
Есть хранимая процедура, которая должна возвращать значение типа BIGINT. При попытке подготовиться к его получению через API (isc_dsql_prepare) возникает ошибка "Dinamic SQL error", причём неважно, какой целочисленный тип данных я указал в запросе (в т.ч. SQL_INT64)..
Если же поменять в функции тип возвращаемого значения на INTEGER, ошибки не возникает, всё отрабатывается как надо (опять же, независимо от типа данных в запросе).
Собсно, вопрос: это я что-то забыл сделать или это баг в БД?
-
Dimitry Sibiryakov
- Заслуженный разработчик
- Сообщения: 1436
- Зарегистрирован: 15 сен 2005, 09:05
Сообщение
Dimitry Sibiryakov » 31 авг 2007, 13:24
Это ты что-то забыл сделать. Например, использовал первый диалект, который int64 не держит. Или не проинициализировал/задал неправильное значение что-нибудь в XSQLDA.
-
Vicc
- Сообщения: 3
- Зарегистрирован: 31 авг 2007, 11:46
Сообщение
Vicc » 31 авг 2007, 14:24
Диалект у базы третий. При вызове процедуры руками из IBExpert всё работает правильно.
Остаётся только найти, в чём разница между подготовкой XSQLDA к чтению данных типа "SQL_LONG" и "SQL_INT64". Читал доку на IBase, ответа пока не нашёл. В FireBird`овских примерах тоже ничего...
-
Dimitry Sibiryakov
- Заслуженный разработчик
- Сообщения: 1436
- Зарегистрирован: 15 сен 2005, 09:05
Сообщение
Dimitry Sibiryakov » 03 сен 2007, 08:16
Vicc писал(а):Диалект у базы третий.
Диалект базы можешь оставить в покое. Диалект для конкретного запроса указывается при prepare (и прочих вызовах).
В-общем, или ты показываешь код или живи как хочешь. Телепатор сломался.
-
Vicc
- Сообщения: 3
- Зарегистрирован: 31 авг 2007, 11:46
Сообщение
Vicc » 03 сен 2007, 13:48
Диалект для конкретного запроса указывается при prepare (и прочих вызовах).
Спасибо, полегчало.

Действительно, был указан 1-й диалект (пример взят с минимальными переделками).