-
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 всё отрабатывает нормально. Где я туплю, подскажите пожалуйста? -
в дельфи (BDE/ADO) авто определение параметров использует знак ":"
вот введи все это в дизайн тайм и проверь что там получилось по параметрам.
отключи авто определение. -
with TADOQuery.Create(nil) do try
ParamCheck := False;
Connection:=adcMain;
SQL.Text := '.........';
ExecSQL;
finally
Free;
end; -
> отключи авто определение.
хотя нет, лучше не отключать, а использовать параметры, правильным образом вместо подстановок как у тебя . -
Даже так:with TADOCommand.Create(nil) do try
ParamCheck := False;
CommandText := '......'
Connection:=adcMain;
Execute;
finally
Free;
end; -
> хотя нет, лучше не отключать, а использовать параметры,
> правильным образом вместо подстановок как у тебя .
Слушай, а для XML какой тип параметра надо по-идее использовать? Для MSSQL + ADO? -
miau (18.01.10 13:14) [6]Спасибо!
Всё получилось. Вы меня спасли :)
Но не ожидал такой пакости от дельфей... -
miau (18.01.10 13:18) [7]Использовать параметры правильным образом я боюсь после того, как дельфа стала съедать время от времени часть их длины. Именно поэтому я использую Query, а не StoredProc.
-
> Слушай, а для XML какой тип параметра надо по-идее использовать? Для MSSQL + ADO?
строка, до 4кб. вроде... других нет (в смысле text), или вайдстринг до 2гиг, но 2000й не понимает (опить насколько помню). (т.е. зависит от сервера)
> Но не ожидал такой пакости от дельфей...
это не пакость, это удобство... в случае когда тебе это нужно, а когда нет то можно отключить.
а еще лучше как говорил уже использовать правильно, будет "удобочитеемей", и без подобных проблем.