Конференция "Базы" » Не желает выполнятся запрос через Query [MSSQL]
 
  • miau (18.01.10 12:46) [0]
    Вот так выглядит код в Delphi

    with TADOQuery.Create(nil) do try
     Connection:=adcMain;
     SQL.Clear;
     SQL.Add('exec ACCOUNT_WORK_TIME_SAVE');
     SQL.Add(' @ACCOUNT_ID = '+IntToStr(ID)+',');
     SQL.Add(' @XML = '''+StringReplace(s,'''','''''',[rfReplaceAll])+'''');
     ExecSQL;
    finally
     Free;
    end;



    Вот так выглядит текст запроса:

    exec ACCOUNT_WORK_TIME_SAVE
    @ACCOUNT_ID = 219188,
    @XML = '
    <ROOT>
    <mdsWT
    RecId=\"1\"
    ID=\"5\"
    ACCOUNT_WORK_MECH_ID=\"913836\"
    DATE_START=\"20091231 00:00:00\"
    DATE_END=\"20100115 18:27:00\"
    DATE_WRITE=\"20100115 18:37:07\"/>
    </ROOT>
    '




    Вот так выглядит хранимая процедура:

    create procedure ACCOUNT_WORK_TIME_SAVE
    @ACCOUNT_ID int,
    @XML text
    as
    ...
    /*вызовов других процедур и функций здесь нет*/
    ...
    GO



    Собственно вопрос:
    При выполнении кода возникает ошибка "неправильно определён объект Parametr. Предоставлены неполные или несовместимые данные.", но при прогоне запроса в Query Analyzer всё отрабатывает нормально. Где я туплю, подскажите пожалуйста?
  • sniknik © (18.01.10 13:07) [1]
    в дельфи (BDE/ADO) авто определение параметров использует знак ":"
    вот введи все это в дизайн тайм и проверь что там получилось по параметрам.

    отключи авто определение.
  • Ega23 © (18.01.10 13:09) [2]
    with TADOQuery.Create(nil) do try
    ParamCheck := False;
    Connection:=adcMain;
    SQL.Text := '.........';
    ExecSQL;
    finally
    Free;
    end;

  • sniknik © (18.01.10 13:11) [3]
    > отключи авто определение.
    хотя нет, лучше не отключать, а использовать параметры, правильным образом вместо подстановок как у тебя .
  • Ega23 © (18.01.10 13:12) [4]
    Даже так:
    with TADOCommand.Create(nil) do try
    ParamCheck := False;
    CommandText := '......'
    Connection:=adcMain;
    Execute;
    finally
    Free;
    end;

  • Ega23 © (18.01.10 13:13) [5]

    > хотя нет, лучше не отключать, а использовать параметры,
    > правильным образом вместо подстановок как у тебя .


    Слушай, а для XML какой тип параметра надо по-идее использовать? Для MSSQL + ADO?
  • miau (18.01.10 13:14) [6]
    Спасибо!
    Всё получилось. Вы меня спасли :)

    Но не ожидал такой пакости от дельфей...
  • miau (18.01.10 13:18) [7]
    Использовать параметры правильным образом я боюсь после того, как дельфа стала съедать время от времени часть их длины. Именно поэтому я использую Query, а не StoredProc.
  • sniknik © (18.01.10 13:23) [8]
    > Слушай, а для XML какой тип параметра надо по-идее использовать? Для MSSQL + ADO?
    строка, до 4кб. вроде... других нет (в смысле text), или вайдстринг до 2гиг, но 2000й не понимает (опить насколько помню). (т.е. зависит от сервера)

    > Но не ожидал такой пакости от дельфей...
    это не пакость, это удобство... в случае когда тебе это нужно, а когда нет то можно отключить.
    а еще лучше как говорил уже использовать правильно, будет "удобочитеемей", и без подобных проблем.
 
Конференция "Базы" » Не желает выполнятся запрос через Query [MSSQL]
Есть новые Нет новых   [134435   +33][b:0][p:0.001]