Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Базы данных и репортинг > Вернуть из процедуры Numeric(15,0)


Автор: TheCetus 21.3.2006, 19:06
Возникла следующая проблема:
на сервере имеется процедура Object_Add которая возвращает один параметр Result (тип Numeric(15,0))
в делфе использую компоненты prcADd : TIBStoredProc.
при вызове процедуры prcAdd в моем приложении выскакивает ошибка Invalid Data Convercion.
указывал тип параметра ftInteger, ftLargeInt - не помогает.
удалось вылечить, если изменить на сервере тип возвращаемого параметра на Result Integer.
Вопрос, как обойтись без смены на сервере возвращаемого типа? т.е. чтобы сервер возвращал не Integer а Numeric(15,0) ?
Добавлено @ 19:06
в своем приложении использую компоненты с закладки InterBase

Автор: Alex 22.3.2006, 10:17
Поставить тип параметра ftFloat

Автор: TheCetus 22.3.2006, 11:25
не помогло, ошибка осталась
помогает только если установить тип возвращаемого результата numeric(15,x), где x <> 0
база работает на Dialect 3.
как думает народ для первичного ключа достаточно будет типа integer?

Автор: Alex 22.3.2006, 19:37
А вы думаете для первичного ключа привысить придел integer в 2 147 483 647 если очень боитесь, то поставьте bigint 9 223 372 036 854 775 807 (как говорит один мой знакомый "столько звезд на небе нет, что бы привысить bigint")

Автор: TheCetus 22.3.2006, 20:15
т.е. другого решения кроме как выставить ftFloat нет?

Автор: Alex 22.3.2006, 20:37
Честно, не проверял, я уже давно не работаю с IB (перешел на FIB+), но если уж так прям ребром вопрос, сейчас посмотрю, что там и почему он float не принимает.

А в обще я бы советовал первичные ключи делать bigint

Автор: Alex 22.3.2006, 21:04
Может я конечно, что-то не так вас понял, но:
Создал процедуру:
Код

CREATE PROCEDURE NEW_PROCEDURE 
RETURNS (
    NEW_PARAM NUMERIC(15,0))
AS
begin
  /* Procedure Text */
  new_param = 0;
  suspend;
end^

кинул на форму IBDatabase1, IBStoredProc1, IBTransaction1 и указал БД и имя процедуры.
Создал обработчик
Код

IBStoredProc1.ExecProc;

Запустил и у меня все нормально запустилось

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)