На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! информация о разделе
user posted imageДанный раздел предназначается исключительно для обсуждения вопросов использования языка запросов SQL. Обсуждение общих вопросов, связанных с тематикой баз данных - обсуждаем в разделе "Базы данных: общие вопросы". Убедительная просьба - соблюдать "Правила форума" и не пренебрегать "Правильным оформлением своих тем". Прежде, чем создавать тему, имеет смысл заглянуть в раздел "Базы данных: FAQ", возможно там уже есть ответ.

Модераторы: Akina
  
> Invalid data conversion , непонятна причина
    Привет всем!
    FireBird 1.5/Delphi_7

    Собственно сабж. (IBClientError Invalid data conversion) Ошибка возникает именно при выполнении процедуры в дельфе. В IBExpert сама ХР проходит без проблем. Передаю в процедуру только один параметр строкового типа, ошибаться просто негде! Может у кого есть мысли из-за чего может быть? Текст хранимой процедуры:
    ExpandedWrap disabled
      CREATE PROCEDURE ADD_URL (
          AURL VARCHAR(250))
      RETURNS (
          OID BIGINT)
      AS
      DECLARE VARIABLE COUN INTEGER;
      DECLARE VARIABLE CURID BIGINT;
      begin
        /* Procedure Text */
        for select count(id) from urls where url = :aurl into :coun do
        if (coun = 0) then
        begin
          curid = GEN_ID (gen_urls_id,1);
          insert into urls (id, url, hsip) values (:curid, :aurl, '');
          oid = curid;
        end
        else begin
          oid = 0;
        end
        suspend;
      end^

    Сам вызов из дельфи:
    ExpandedWrap disabled
      FSP.Close;
      FSP.StoredProcName:= 'ADD_URL';
       
      if FTR.InTransaction = false then
        FTR.StartTransaction;
       
      FSP.Params.Clear;
      FSP.ParamByName('AURL').AsString:= '333'; //URL;
      FSP.ExecProc;
      ID:= FSP.ParamByName('OID').AsInteger;

    где FSP - IBStoredProcedure, FTR - IBTransaction.
    На строке FSP.ExecProc; и появляется ошибка. :wall:
    Ума не приложу где еще ошибку искать!
      FSP - IBStoredProcedure - динамически если создаешь, то например в TADOStoredProc нужно перед присваением значения параметра , его создать:
      ExpandedWrap disabled
        SP.Parameters.CreateParameter('AURL',ftString,pdInput,255,'');
      , в твоем случае мб что-нибудь подобное.
      Сообщение отредактировано: Modest Wizard -
        Modest Wizard, по крайней мере для MS SQL в TADOStoredProc не требовалось создавать параметры отдельно. В моем случае, есть целая куча других процедур, в которые параметры передаются точно также, но которые работают. Проблема в чем то другом...
          Кажется разобрался: GEN_ID возвращает integer, а не BIGINT и поэтому при присвоении выходному параметру (типа BIGINT) значения генератора и возникала ошибка. Этот IB не перестает меня удивлять!
          0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
          0 пользователей:


          Рейтинг@Mail.ru
          [ Script execution time: 0.0739 ]   [ 15 queries used ]   [ Generated: 24.07.26, 13:07 GMT ]