Поиск:

Ответ в темуСоздание новой темы Создание опроса
> невозможно вернуть BigInt из процедуры, Delphi7 + IBX + FB.1.5 
:(
    Опции темы
TheCetus
Дата 27.3.2006, 10:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 134
Регистрация: 9.3.2006

Репутация: нет
Всего: 2



имеется хранимая процедура Tbl_add
выходной параметр имеет тип BigInt (ID)
на клиенте вызываю процедуру через dsAdd (TIBStoredProc)

Код

  dsadd.parambyname('name').asstring := 'asd';
  dsadd.execproc;
  showmessage(inttostr(dsadd.parambyname('id').asinteger));
  dsadd.commit;


если paramtype Выставить ptOutput, то выскакивает ошибка 'invalid data conversion'
если ptinputoutput или ptresult то возвращается значение равное 0.
при смене типа параметра на integer все работает наура.
это компоненты IBX такие глючные или меня глючит?
Добавлено @ 10:29
как нибудь это можно побороть?
PM MAIL   Вверх
DDX
Дата 27.3.2006, 12:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 127
Регистрация: 31.1.2005
Где: Москва

Репутация: 5
Всего: 5



с ФБ я не работал ,и , может, чего-то не понял, но почему бы тебе и не использовать параметр типа integer? или, если ID у тебя больше максимального значения integer (такое часто бывает на практике??), то используй не inttostr, а какую-нить другую функцию для работы с большими числами. какую именно не помню, наверняка должна быть.
--------------------
Учиться, учитьcя и ещё раз учиться  
PM MAIL WWW   Вверх
TheCetus
Дата 27.3.2006, 13:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 134
Регистрация: 9.3.2006

Репутация: нет
Всего: 2



пробовал и так, не помогает

var
gg : int64;
begin
...
gg := dsadd.parambyname('id').asinteger; // исключение
...
end;

PM MAIL   Вверх
DDX
Дата 27.3.2006, 13:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 127
Регистрация: 31.1.2005
Где: Москва

Репутация: 5
Всего: 5



а какова размерность типа данных BigINT в ФБ?
попробуй
gg := Int64(dsadd.parambyname('id').asinteger)
или
var gg:cardinal
..

gg := dsadd.paramvalues['id'], если id>2147483647

Это сообщение отредактировал(а) DDX - 27.3.2006, 14:28
--------------------
Учиться, учитьcя и ещё раз учиться  
PM MAIL WWW   Вверх
TheCetus
Дата 27.3.2006, 14:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 134
Регистрация: 9.3.2006

Репутация: нет
Всего: 2



кажется я немного ошибся ошибка не в том месте выскакивает. Через дебагер прогнал, вот что получается.
хранимая процедура

Код

CREATE PROCEDURE TBL_ADD
RETURNS (RESULT BIGINT)
AS
begin
  RESULT = GEN_ID(GEN_ONE,1);
  INSERT INTO TBL (ID) VALUES(:RESULT);
  suspend;
end


на клиенте.

Код

  dsAdd.execproc;   // исключение здесь !!
  dsAdd.Transaction.Commit;


ошибка вылетает при _выполнении_ процедуры (как я полагаю при чтении результата работы процедуры)
PM MAIL   Вверх
DDX
Дата 27.3.2006, 14:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 127
Регистрация: 31.1.2005
Где: Москва

Репутация: 5
Всего: 5



Цитата(DDX @ 27.3.2006, 13:38 Найти цитируемый пост)
а какова размерность типа данных BigINT в ФБ?


--------------------
Учиться, учитьcя и ещё раз учиться  
PM MAIL WWW   Вверх
TheCetus
Дата 27.3.2006, 15:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 134
Регистрация: 9.3.2006

Репутация: нет
Всего: 2



64 бита.
вариант с gg := dsadd.paramvalues['id'], если id>2147483647 тоже некатит smile(
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Базы данных и репортинг"
Vit
Петрович

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами


Обязательно указание:

1. Базы данных (Paradox, Oracle и т.п.)

2. Способа доступа (ADO, BDE и т.д.)


  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • Вопросы по SQL и вопросы по базам данных не связанные с Дельфи задавать здесь

FAQ раздела лежит здесь!


Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Vit, Петрович.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Базы данных и репортинг | Следующая тема »


 




[ Время генерации скрипта: 0.0614 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.