![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
SQL выражение в ADO вызывает исключение в msvcrt.dll
oxffff © (2007-11-19 09:59:00)Добрый день.
Кто нибудь встречался с такой ситуацией.
Имеется TADOQuery и следующий запрос
select value,
(select count(*) from SourceTrains B join SourceVagons C
on B.TrainID=C.TrainID
where convert(char(10),B.Traindate,2)=A.value
) as 'Total',
(select count(*) from SourceTrains B join SourceVagons C
on B.TrainID=C.TrainID
where convert(char(10),B.Traindate,2)=A.value and
convert(char(2),B.Traindate,8)>=0 and
convert(char(2),B.Traindate,8)<6
) as '0-6 Total',
..............
from (select convert(char(10),Traindate,2) as value
from SourceTrains group by convert(char(10),Traindate,2)
) A
where trainId=:param1
После того как делаем
AdoQuery.SQL.add(Это SQL выражение )
вызывает исключение в msvcrt.dll
Самое интересное что если обрамить в скобки(даже в одну скобку выражение FROM, т.е.
(
from (select convert(char(10),Traindate,2) as value
from SourceTrains group by convert(char(10),Traindate,2)
) A
where trainId=:param1
) <- эту скобку можно даже не ставить.
то исключение не генерируется.
Но само SQL выражение не корректно.
Что это за баг? и Как его обойти
oxffff (2007-11-19 10:16:00) [141]Самое интересное, что количество выбираемых полей влияет на появление этой ошибки.
это баг. IMHO.
Sergey13 (2007-11-19 10:16:00) [142]> [0] oxffff © (19.11.07 09:59)
А запрос вообще, того, работоспособный?
Anatoly Podgoretsky (2007-11-19 10:16:00) [143]
> AdoQuery.SQL.add(Это SQL выражение )
> вызывает исключение в msvcrt.dll
Это строка, которая вызывает исключение? По крайней мере так выходит из контекста.
Брось ты этот костыль AdoQuery и никогда ничего кроме TAdoDataset и TAdoCommand более не используй.
oxffff (2007-11-19 10:14:00) [144]
> Kolan © (19.11.07 10:07) [2]
> > Что это за баг? и Как его обойти
>
> ХЗ, попробовать TADOCommand?
Чисто технически, я думаю результат будет тот же.
Я конечно знаю как обойти. Не использовать параметры вообще. :)
oxffff (2007-11-19 10:13:00) [145]
> ЮЮ © (19.11.07 10:06) [1]
> > AdoQuery.SQL.add(Это SQL выражение )
>
>
> Если > Это SQL выражение полность сформировано, то зачем
> Add, а не просто AdoQuery.SQL.Text :=
>
> При AdoQuery.SQL.Add следует обрамлять в AdoQuery.SQL.BeginUpdate
> ... AdoQuery.SQL.EndUpdate
BeginUpdate is called automatically by any property or method that changes the list of strings.
oxffff (2007-11-19 10:12:00) [146]
> ЮЮ © (19.11.07 10:06) [1]
> > AdoQuery.SQL.add(Это SQL выражение )
>
>
> Если > Это SQL выражение полность сформировано, то зачем
> Add, а не просто AdoQuery.SQL.Text :=
>
> При AdoQuery.SQL.Add следует обрамлять в AdoQuery.SQL.BeginUpdate
> ... AdoQuery.SQL.EndUpdate
BeginUpdate и EndUpdate не помогают. :(
Kolan (2007-11-19 10:07:00) [147]> Что это за баг? и Как его обойти
ХЗ, попробовать TADOCommand?
ЮЮ (2007-11-19 10:06:00) [148]> AdoQuery.SQL.add(Это SQL выражение )
Если > Это SQL выражениеполность сформировано, то зачем Add, а не просто AdoQuery.SQL.Text :=
При AdoQuery.SQL.Add следует обрамлять в AdoQuery.SQL.BeginUpdate ... AdoQuery.SQL.EndUpdate