![]() |
| ||
|
|
Новости |
Поиск |
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 выражение не корректно.
Что это за баг? и Как его обойти
sniknik (2007-11-20 00:14:00) [21]> Где взять?
500мг. есть ридми, разберешься.
http://www.filefactory.com/file/a2c2f4/
> я все еще жду от вас реализации на CASE.
можеш поискать в базах... месяца не прошло предлагал решение на похожую задачу.
oxffff (2007-11-20 00:06:00) [22]
> комуто они очень мешают, но ничего поделать они с ними не
> хотят, хотят о них поговорить.
Давайте обойдемся без лишнего, я все еще жду от вас реализации на CASE.
oxffff (2007-11-20 00:05:00) [23]
> а вот исходников я вам не обещал. :), потому и спрашивал.
> .. вдруг вы мне не доверяете, тогда зачем ложить?
Меня конечно больше интересует реализация.
Но ничего. Я все равно по внешнем данным думаю смогу сделать вывод о статичности\динамичности вашего подхода. Где взять?
sniknik (2007-11-20 00:03:00) [24]> если есть баг, он запостен, он открыт, то чего обсуждать.
тут даже 2 бага было, а обсуждать есть чего, т.к. если бы делалось нормально то они бы не помешали. а вот понятия о "нормальности" у каждого свои.
комуто они очень мешают, но ничего поделать они с ними не хотят, хотят о них поговорить.
> Если вы не опасаетесь о том, что я что-нибудь найду в ней и скажу, что сделали криво?
а вот исходников я вам не обещал. :), потому и спрашивал... вдруг вы мне не доверяете, тогда зачем ложить?
oxffff (2007-11-20 00:01:00) [25]
> Сусл © (19.11.07 23:53) [122]
Доброй ночи, Дмитрий.
Баг пофиксен в 10.
А баг провайдера я уже нашел как обходить. :)
oxffff (2007-11-19 23:57:00) [26]
> -> диагноз. у вас слишком мало знаний при большом самомнении
> в собственной непогрешимости.
Ого. да вы еще и диагнозы ставите.
Куда нам до вас.
А про семантику типов вам бы не мешало прочитать.
>впрочем предложение о проверке в программе все еще в силе (хотя и >проигнорировано 2 раза)
Если вы не опасаетесь о том, что я что-нибудь найду в ней и скажу, что сделали криво?
Тогда говорите где скачать.
Сусл (2007-11-19 23:53:00) [27]офигеть.
если есть баг, он запостен, он открыт, то чего обсуждать.
sniknik (2007-11-19 23:50:00) [28]> что надо делать только через createParameter и никак иначе.
де не "никак иначе", а в в случае ошибки, и в других случаях когда ParamCheck отключен. (тебе же помогло отключение? вначале. помню именно после этого предложил этот вариант)
> Повторяю неоднократно.
и еще раз повторюсь. createParameter форевер! :о))
а что до статичности, то функция статичной не бывает, значение, параметры в нее в дизайне, в чем вы меня "обвиняете" попросту не задашь.
-> диагноз. у вас слишком мало знаний при большом самомнении в собственной непогрешимости.
> А я вот отчетливо вижу, когда вас прижимают к стенке,
> вы начинаете давать задний ход.
мне попросту надоело. т.что действительно пока.
впрочем предложение о проверке в программе все еще в силе (хотя и проигнорировано 2 раза)
oxffff (2007-11-19 23:50:00) [29]
> sniknik © (19.11.07 22:54) [111]
> > Может хватит уже фантизировать.
> > Где вы увидили, что я явно параметры присваиваю.
> смотрим в [0]
> ...
> where trainId=:param1
Этот пример приведен для выявления ошибки в провайдере.
Не более того.
Это итоговый запрос и является продуктом генератора.
oxffff (2007-11-19 23:43:00) [30]
> sniknik © (19.11.07 23:06) [113]
> и вот теперь когда мы мило треплемся, вопрос о "доказательстве
> кодом" у меня уже ассоциируется с "сделай на слабо", а "на
> слабо" я ничего не делаю. из принципа.
А я вот отчетливо вижу, когда вас прижимают к стенке,
вы начинаете давать задний ход.
oxffff (2007-11-19 23:38:00) [31]
> и похоже те средства которые для меня свободны для использования
> где угодно у тебя жестко зашиты в код.... выкини этот код.
> нехорошо это.
Что вы все с ног на голову переворачиваете?
О статичном коде писали как раз вы. Неоднократно утвердая, что надо делать только через createParameter и никак иначе.
Повторяю неоднократно.
Таким образом, если вы не полагаетесь на динамический разбор SQL выражения.
А полагатесь на статическое создание параметров. Значит их кто то должен детерменированно определить и не дай бог не определит тех, которые есть в SQL выражении. Вы можете предоставить это делать в run time. Суть от этого не меняется. Если вы делаете createparameter, не полагаясь на динамичский разбор, то задать этот набор нужно детерменированно.
Статическая(compile time) привязка или run time пользователем.
Повторяю именно вы говорили о createparameter
oxffff (2007-11-19 23:29:00) [32]
> property value[name:string]:string read GetParamValue;
> property value[name:string]:variant read GetParamValue;
oxffff (2007-11-19 23:26:00) [33]
> sniknik © (19.11.07 22:59) [112]
> > Пример не приведете случаем.
> мог бы. но ты опоздал с этим вопросом, постов на 60...
Ну сюдя по тому, что вы мне пытались доказать что нарушать семантику типа это хорошо, я ничего не потерял.
oxffff (2007-11-19 23:24:00) [34]
> sniknik © (19.11.07 22:54) [111]
> > Может хватит уже фантизировать.
> > Где вы увидили, что я явно параметры присваиваю.
> смотрим в [0]
> ...
> where trainId=:param1
> ...
> оба на, параметр, а как же к нему идет обращение? присваивается
> значение? наверное путем фантазирования.
>
> > Т.е. насколько я понял вы утверждаете, что я делаю так
> в коде AdoDataSet.parameters.parambyname('').value:=some
> value.
> > Знайте, что я не делаю так.
> есть собственный Хоттабыч? иначе только он может (по индексу
> считай это вариация того же).
Да представляете есть такой старик Хоттабыч.
Называется IparameterBroker который поставляет значения парметров по запросу для генератора.
И представлете у этого интерфейса один метод, и работает.
IparameterBroker=interface
function GetParamValue(name:string):variant;
property value[name:string]:string read GetParamValue;
end;
А реализатор этого интерфейса форма, которая связывает элементы управления и параметры.
А вы все создавайте вручную параметры с помощью CreateParameter.
Так и делайте дальше.
oxffff (2007-11-19 23:18:00) [35]
> sniknik © (19.11.07 22:59) [112]
> > Пример не приведете случаем.
> мог бы. но ты опоздал с этим вопросом, постов на 60...
А вот и приведите.
И покажите как вы заставите агрегатную функцию для одного среза считать количество удовлетворяющих CASE.
А именно посчитать количество с 0 до 6 часов используя CASE без внутренних подзапросов.
А то впечатление что вы только болтать и умеете.
sniknik (2007-11-19 23:06:00) [36]и это. не думай что я обиделся, личная неприязнь, или чего еще там... нет, мне все одно как развлекаться, просто я четко делю ветки на "деловые" и "потрепаться"... догадываешься в какую категорию попадает твоя? и почему? (подсказка - вовсе не по тому что создана в "потрепаться")
и вот теперь когда мы мило треплемся, вопрос о "доказательстве кодом" у меня уже ассоциируется с "сделай на слабо", а "на слабо" я ничего не делаю. из принципа.
sniknik (2007-11-19 22:59:00) [37]> Пример не приведете случаем.
мог бы. но ты опоздал с этим вопросом, постов на 60...
sniknik (2007-11-19 22:54:00) [38]> Может хватит уже фантизировать.
> Где вы увидили, что я явно параметры присваиваю.
смотрим в [0]
...
where trainId=: param1
...
оба на, параметр, а как же к нему идет обращение? присваивается значение? наверное путем фантазирования.
> Т.е. насколько я понял вы утверждаете, что я делаю так в коде AdoDataSet.parameters.parambyname('').value:=some value.
> Знайте, что я не делаю так.
есть собственный Хоттабыч? иначе только он может (по индексу считай это вариация того же).
> Способ, который вы предлагаете статичен и жестко зашит в код.
вот тут вы глубоко, прямотаки "не подецки" заблуждаетесь. (ложить программку? скомпиленную... ничего в нее не предзашито, какой запрос сами наберете (читайте сгенерируете, для программы это тоже самое), то и будет)
а вообще, есть одно правило в программировании - "как напишешь так и будет".
и похоже те средства которые для меня свободны для использования где угодно у тебя жестко зашиты в код.... выкини этот код. нехорошо это.
> Я же говорю, вы не зная запроса предлагаете свой вариант.
не предлагаю (еще чего не хватало), я говорю, что имеющееся (показанное) можно упростить. сильно упростить. также можно и остальное если оно "построено" аналогично.
> ... Далее идут
> ...
ну, вот именно это я и имею ввиду. аналогично. практически полный аналог.
> А мне нужно получить просто дату, без времени.
т.е. работать с датами ты тоже не умеешь... тяжело тебе. (ты ее как предложено как раз и получишь, дату без времени.)
> Я не могу понять смысл вашей фразы.
не сомневался.
> Что за прошлый топик?
ну, не так много я сюда и постил, чтоб потеряться. прошлый это значит тот что был до этого.
oxffff (2007-11-19 22:32:00) [39]
> т.е. это все можно свести к единственному запросу с группировкой
> по дню, а результаты полей считать условиях (CASE), т.е.
> все (либо хотябы часть) запросы с одинаковыми алиасами,
> и кучей джойнов, в которых парсер наверняка и путается,
> сведутся к одному запросу с одним объединением... парсер
> будет "счастлив".
Ну и далее то как, как вы будете выделять с помощью CASE.
количество в интервале(в часах) дня.
Пример не приведете случаем.
oxffff (2007-11-19 22:15:00) [40]
> не реализацию, читай тщательнее, а получение значения из
> неправильного места. котороя я думал ты получаешь (см. обьяснения
> в прошлом топике. и обьяснения почему я так думал. заблуждение
> ввиду отсутствия информации на тот момент, о том что делалось.
> )
Я не могу понять смысл вашей фразы. Кто думал? Что думал?
И что это за неправильное место такое? И кто дал ему характеристику?
Что за прошлый топик?