Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Не желает выполнятся запрос через Query [MSSQL]


miau ©   (2010-01-18 12:46:00) 

Вот так выглядит код в 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   (2010-01-18 13:23:00) [1]

> Слушай, а для XML какой тип параметра надо по-идее использовать? Для MSSQL + ADO?
строка, до 4кб. вроде... других нет (в смысле text), или вайдстринг до 2гиг, но 2000й не понимает (опить насколько помню). (т.е. зависит от сервера)

> Но не ожидал такой пакости от дельфей...
это не пакость, это удобство... в случае когда тебе это нужно, а когда нет то можно отключить.
а еще лучше как говорил уже использовать правильно, будет "удобочитеемей", и без подобных проблем.


miau   (2010-01-18 13:18:00) [2]

Использовать параметры правильным образом я боюсь после того, как дельфа стала съедать время от времени часть их длины. Именно поэтому я использую Query, а не StoredProc.


miau   (2010-01-18 13:14:00) [3]

Спасибо!
Всё получилось. Вы меня спасли :)

Но не ожидал такой пакости от дельфей...


Ega23   (2010-01-18 13:13:00) [4]


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


Слушай, а для XML какой тип параметра надо по-идее использовать? Для MSSQL + ADO?


Ega23   (2010-01-18 13:12:00) [5]

Даже так:
with TADOCommand.Create(nil) do try
ParamCheck := False;
CommandText := '......'
Connection:=adcMain;
Execute;
finally
Free;
end;


sniknik   (2010-01-18 13:11:00) [6]

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


Ega23   (2010-01-18 13:09:00) [7]

with TADOQuery.Create(nil) do try
ParamCheck := False;
Connection:=adcMain;
SQL.Text := '.........';
ExecSQL;
finally
Free;
end;


sniknik   (2010-01-18 13:07:00) [8]

в дельфи (BDE/ADO) авто определение параметров использует знак ":"
вот введи все это в дизайн тайм и проверь что там получилось по параметрам.

отключи авто определение.


Наверх

Титульная страница Поиск, карта сайта Написать письмо