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

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

SQL выражение в ADO вызывает исключение в msvcrt.dll


Страницы:   1 2 3 4 5 6 7 8

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


Страницы:   1 2 3 4 5 6 7 8

Наверх

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