Текущий архив: 2008.04.13;
Скачать: CL | DM;
Вниз
SQL выражение в ADO вызывает исключение в msvcrt.dll Найти похожие ветки
← →
sniknik © (2007-11-19 23:50) [120]> что надо делать только через createParameter и никак иначе.
де не "никак иначе", а в в случае ошибки, и в других случаях когда ParamCheck отключен. (тебе же помогло отключение? вначале. помню именно после этого предложил этот вариант)
> Повторяю неоднократно.
и еще раз повторюсь. createParameter форевер! :о))
а что до статичности, то функция статичной не бывает, значение, параметры в нее в дизайне, в чем вы меня "обвиняете" попросту не задашь.
-> диагноз. у вас слишком мало знаний при большом самомнении в собственной непогрешимости.
> А я вот отчетливо вижу, когда вас прижимают к стенке,
> вы начинаете давать задний ход.
мне попросту надоело. т.что действительно пока.
впрочем предложение о проверке в программе все еще в силе (хотя и проигнорировано 2 раза)
← →
oxffff © (2007-11-19 23:50) [121]
> sniknik © (19.11.07 22:54) [111]
> > Может хватит уже фантизировать.
> > Где вы увидили, что я явно параметры присваиваю.
> смотрим в [0]
> ...
> where trainId=:param1
Этот пример приведен для выявления ошибки в провайдере.
Не более того.
Это итоговый запрос и является продуктом генератора.
← →
Сусл © (2007-11-19 23:53) [122]офигеть.
если есть баг, он запостен, он открыт, то чего обсуждать.
← →
oxffff © (2007-11-19 23:57) [123]
> -> диагноз. у вас слишком мало знаний при большом самомнении
> в собственной непогрешимости.
Ого. да вы еще и диагнозы ставите.
Куда нам до вас.
А про семантику типов вам бы не мешало прочитать.
>впрочем предложение о проверке в программе все еще в силе (хотя и >проигнорировано 2 раза)
Если вы не опасаетесь о том, что я что-нибудь найду в ней и скажу, что сделали криво?
Тогда говорите где скачать.
← →
oxffff © (2007-11-20 00:01) [124]
> Сусл © (19.11.07 23:53) [122]
Доброй ночи, Дмитрий.
Баг пофиксен в 10.
А баг провайдера я уже нашел как обходить. :)
← →
sniknik © (2007-11-20 00:03) [125]> если есть баг, он запостен, он открыт, то чего обсуждать.
тут даже 2 бага было, а обсуждать есть чего, т.к. если бы делалось нормально то они бы не помешали. а вот понятия о "нормальности" у каждого свои.
комуто они очень мешают, но ничего поделать они с ними не хотят, хотят о них поговорить.
> Если вы не опасаетесь о том, что я что-нибудь найду в ней и скажу, что сделали криво?
а вот исходников я вам не обещал. :), потому и спрашивал... вдруг вы мне не доверяете, тогда зачем ложить?
← →
oxffff © (2007-11-20 00:05) [126]
> а вот исходников я вам не обещал. :), потому и спрашивал.
> .. вдруг вы мне не доверяете, тогда зачем ложить?
Меня конечно больше интересует реализация.
Но ничего. Я все равно по внешнем данным думаю смогу сделать вывод о статичности\динамичности вашего подхода. Где взять?
← →
oxffff © (2007-11-20 00:06) [127]
> комуто они очень мешают, но ничего поделать они с ними не
> хотят, хотят о них поговорить.
Давайте обойдемся без лишнего, я все еще жду от вас реализации на CASE.
← →
sniknik © (2007-11-20 00:14) [128]> Где взять?
500мг. есть ридми, разберешься.
http://www.filefactory.com/file/a2c2f4/
> я все еще жду от вас реализации на CASE.
можеш поискать в базах... месяца не прошло предлагал решение на похожую задачу.
← →
oxffff © (2007-11-20 00:19) [129]
> можеш поискать в базах... месяца не прошло предлагал решение
> на похожую задачу.
А что написать сложно?
Как вы сделаете count в каждом поле и магическим образом заставите складывать только те значение которые удовлетворяют условию.
Причем в каждом столбце условия разные?
Что это за хитрый какой синтаксис, если он есть?
← →
oxffff © (2007-11-20 00:31) [130]
> sniknik © (20.11.07 00:14) [128]
Я честно говоря совсем не понял где у вас здесь динамическое формирование запроса.
Кроме 10 шаблонов.
CREATE TABLE [Table] (Field Type)
Куда нажать?
Чтобы сформировать where с AND или OR, NOT? Это возможно?
← →
oxffff © (2007-11-20 00:35) [131]
> sniknik © (20.11.07 00:14) [128]
Если, это все что она может, только 10 шаблонных запросов, то я бы вам даже двойку не поставил. Это детская поделка 2 курса. Не более.
А вы мне тут о параметрах. Учите мат часть. И help заодно.
Да и case не забудьте.
← →
sniknik © (2007-11-20 00:36) [132]> А что написать сложно?
принципы дело серьезное...
> Как вы сделаете count
count не единственная агрегирующая функция,
> в каждом поле и магическим образом заставите складывать только те значение которые удовлетворяют условию.
легко! причем необязательно заставлять складывать "только те" (хотя и это можно), можно "не тем" например давать значение 0, а складывать все подряд.
> Причем в каждом столбце условия разные?
в каждом столбце естественно будут свои условия.
> Куда нажать?
> Чтобы сформировать where с AND или OR, NOT? Это возможно?
ручками, ручками все что угодно (считай что ТЫ генератор запроса), по синтаксису того провайдера что выбран, либо задай предопределение с "AND или OR, NOT", параметры по правой кнопке мыши, а вообще читай ридми.
← →
sniknik © (2007-11-20 00:39) [133]> Это детская поделка 2 курса. Не более.
это писалось в 2000м году (правда еще пару тройку раз добавлялось кое чего по надобности), для изучения ADO. не менее.
← →
oxffff © (2007-11-20 00:41) [134]
> sniknik © (20.11.07 00:39) [133]
Собственно у меня другая задача. Я думаю спор из-за непонимания
← →
oxffff © (2007-11-20 00:43) [135]
> sniknik © (20.11.07 00:39) [133]
Сейчас я попытаюсь объяснить задачу.
← →
sniknik © (2007-11-20 00:46) [136]> Сейчас я попытаюсь объяснить задачу.
а... ну я так понимаю запрос тот сработал? :)))
← →
oxffff © (2007-11-20 00:52) [137]Часто приходиться писать интерфейсы для которых приходиться делать различные фильтры. Но поскольку часть фильтров может отключаться включаться, то часть приходиться писать код который собирает where выражение. А фильтры могут состоять из вариантов.
Я смотрю и думаю, а зачем если я могу формировать это предложение динамически.
Таким образом моя задача написать генератор и правила к нему, чтобы облегчить оную задачу.
И получается следующее.
TQueryGenerator.create("base sql выражение",
[
TAloneFilter.create("AND","фильтр выражение"),
TMultiFilter.create("OR",["фильтр выражение1","фильтр выражение2"])
]
TQueryGenerator.Reopen([0,0],ParamerBroker);
← →
oxffff © (2007-11-20 00:53) [138]
> а... ну я так понимаю запрос тот сработал? :)))
У меня не стоит дома SQL сервер.
← →
oxffff © (2007-11-20 00:58) [139]
> sniknik © (20.11.07 00:46) [136]
> > Сейчас я попытаюсь объяснить задачу.
> а... ну я так понимаю запрос тот сработал? :)))
Только, чтобы он сработал. Вам нужно щелкнуть правой кнопой и добавить параметр вручную. Вот тут и есть статика.
А как же насчет CASE?
← →
oxffff © (2007-11-20 01:07) [140]
> sniknik © (20.11.07 00:36) [132]
> > А что написать сложно?
> принципы дело серьезное...
>
> > Как вы сделаете count
> count не единственная агрегирующая функция,
>
> > в каждом поле и магическим образом заставите складывать
> только те значение которые удовлетворяют условию.
> легко! причем необязательно заставлять складывать "только
> те" (хотя и это можно), можно "не тем" например давать значение
> 0, а складывать все подряд.
А если вы выкрутитесь на sum то 0, то 1, но тогда большая часть у вас будет холостой ход, поскольку большая часть не будет попадать в заданный диапазон.
← →
ЮЮ © (2007-11-20 03:42) [141]> А если вы выкрутитесь на sum то 0, то 1, но тогда большая
> часть у вас будет холостой ход, поскольку большая часть
> не будет попадать в заданный диапазон.
из SourceTrains и SourceVagons ОДИН РАЗ получаем выборку вида
TrainDayOnly, Total, Total06, Total0612, ..., содержащую только 0 и 1( благодаря case). Причем хотя бы в одном столбце будет 1, т.к. WHERE часть никто не отменял и мы анализирируем лишь те строки, которые войдут в нужную статистику.
А теперь по этой выборке делаем суммирование.
И где здесь холостой ход? А вот многократный full scan в каждом твоем "подзапросе" просто гарантирован.
← →
oxffff © (2007-11-20 08:50) [142]
> ЮЮ © (20.11.07 03:42) [141]
Беседа зашла далеко от темы. Ну хорошо.
Вы будете группировать по дню. Воответственно в группу попадут все записи за день. А case будет делать нужный срез в группе.
Причем будет пробегать по всей группе
(обрабатывая и те, которые не войдут в срез.
Все что не попадает будет заменяться на 0, на все что попадает на 1.
И делать это надо для каждого среза.
А sum обрабатывает все записи в группе.
Я сейчас не готов дать оценку производительности.
Да и не ставил я перед собой такую задачу по оптимизации.
Однако я соглашусь c sniknik и с вами, что есть резерв для оптимизации этого запроса, в том числе и case+sum.
Поскольку вопрос не затрагивал оптимизацию запроса,
а имеел отношение непосредственно в багу провайдера.
и в результате мною был найден еще один баг.
считаю вопросы касающиеся вида и формы запроса, не имееющим отношения в предмету вопроса.
Нельзя оправдывать баги видом и сложностью запроса.
← →
sniknik © (2007-11-20 09:14) [143]> Вам нужно щелкнуть правой кнопой и добавить параметр вручную.
там все вручную, я не пытаюсь автоматизировать собственную умственную деятельность по составлению запросов как в [137] (блин, раньше не мог сказать какими глупостями занимаешься? тут я тебе не помошник)
но отговаривать не буду, догадываюсь о реакции.
> Вот тут и есть статика.
и где же тут она? ты задаешь маски (не в dataset статически ка ты видать думаешь вносишь), далее вводишь (генерируешь) запрос с любыми параметрами из возможных масок, они динамически поставляются, если нужны, будь их там 1 или 10 неважно. это именно динамика, если ты статически их занесешь в dataset а в запросе их не будет, будет ошибка (вроде бы... не делал так, как ты говоришь я делаю).
> А если вы выкрутитесь на sum то 0, то 1,
просто да? а догадаться не смог.
> но тогда большая часть у вас будет холостой ход, поскольку большая часть не будет попадать в заданный диапазон.
??? и все одно полная уверенность в своей непогрешимости.
ЮЮ © (20.11.07 03:42) [141]
> А вот многократный full scan в каждом твоем "подзапросе" просто гарантирован.
ага, гарантия на фул скан 100%, и статистика работать не будет, условия по расчетным данным. и памяти на 10? 20? в общем на n произведений таблиц в объединениях немало уйдет.
1 запрос с "холостыми ходами" по сумме на 1 число, это будет на n раз (ровно на количество запросов объединений) выгоднее чем оно счас есть (временем на работу с числом можно пренебречь т.к. оно будет очень мало в сравнении с построением объединения).
← →
sniknik © (2007-11-20 09:17) [144]> Нельзя оправдывать баги видом и сложностью запроса.
а кто их оправдывает?
тебе лиш сказали, что "делал бы нормально, и даже бы их не заметил"...
но ты предпочитаешь в них "упереться" и "обсасывать" до последнего.
← →
oxffff © (2007-11-20 09:42) [145]
> но отговаривать не буду, догадываюсь о реакции.
Да почему же, я всегда открыт к обсуждению.
> > Вот тут и есть статика.
> и где же тут она? ты задаешь маски (не в dataset статически
> ка ты видать думаешь вносишь), далее вводишь (генерируешь)
> запрос с любыми параметрами из возможных масок, они динамически
> поставляются, если нужны, будь их там 1 или 10 неважно.
> это именно динамика, если ты статически их занесешь в dataset
> а в запросе их не будет, будет ошибка (вроде бы... не делал
> так, как ты говоришь я делаю).
Генератору указываются какие фильтры использовать. И предоставляется поставщик параметров. Это динамика.
Однако сформировать фильтры придется статично.
Это касается сложных фильтров. И здесь ваш инструмент оказал бы содействие.
Однако есть возможность часть фильтров формировать в динамике.
Для этого производить анализ схемы БД.
Например срез по внешнему ключ, умножение и т.п.
Конечно эти правила будут задаваться в статике (compile time) + run time by user. Но формирование фильтра, интерфейса, разбор параметров будет в динамике.
> > А если вы выкрутитесь на sum то 0, то 1,
> просто да? а догадаться не смог.
> > но тогда большая часть у вас будет холостой ход, поскольку
> большая часть не будет попадать в заданный диапазон.
> ??? и все одно полная уверенность в своей непогрешимости.
>
Да нет же. Я данном случае вы правы, запрос можно оптимизировать.
И данном случае умножение множества будет производиться дольше чем
число-дробилка с sum+case.
Однако я не ставил перед собой этой цели, поскольку голова погружена только в этот небольшой Framework.
> > Нельзя оправдывать баги видом и сложностью запроса.
> а кто их оправдывает?
> тебе лиш сказали, что "делал бы нормально, и даже бы их
> не заметил"...
> но ты предпочитаешь в них "упереться" и "обсасывать" до
> последнего.
Гарантии, того что он не свалиться на case нет.
← →
sniknik © (2007-11-20 11:01) [146]> Да почему же, я всегда открыт к обсуждению.
оно и видно, ни на одно предложение нет "конструктива" типа "не понимаю зачем но возможно это чтото даст. обьясните", только "я вам сказал что так делать нельзя и я сделал единственно правильным способом".
если кто решит перечитать ветку, тот думаю со мной согласится, подтекст всего именно такой. (с примесью "я вот делаю правильно, а оно еще и не работает. а вы еще и говорите что ошибка эта правильная", хотя так никто говорит, говорят лиш что делаешь неправильно)
> Генератору указываются какие фильтры использовать. И предоставляется поставщик параметров. Это динамика.
программе указывается какие параметры использовать. и предоставляется список их значений. это динамика.
несогласен? я ведь не перекомпилю программу на каждый твой внесенный запрос/смененного провайдера...
> Однако сформировать фильтры придется статично.
с чего это бы "придется"?
> Однако есть возможность часть фильтров формировать в динамике.
она и есть.
нажми Ctl+F в гриде. поиск сделан на фильтрах. и опять таки никаких перекомпиляций на неизвестный мне еще запрос...
> поскольку голова погружена только в этот небольшой Framework.
глупости этот твой Framework. (по описанию в [137])
устрой голосование.
мой голос за это, +1.
а объяснению не подлежит, я и более простые(/грубые такие что просто в хелпе можно посмотреть, про createparameter например) вещи зарекся тебе объяснять. а тут все на "тонких" материях...
> Гарантии, того что он не свалиться на case нет.
а я и не давал гарантий, я говорил что парсер будет "счастлив" видеть вместо монстра с кучей подзапросов (вложенность то и связи ему обрабатывать), удобочитаемый и однопроходной запрос... и возможно (!!! только возможно, хотя и с высокой долей вероятности. а возможно и там написать монстра), он не впадет в рекурсию, не израсходует все ресурсы, не выйдет за пределы какихто ограничений, не сделает в общем того что у него счас не обрабатывается и нам он "сваливается".
если перечитаешь, кстати я и ошибку то вижу не в том в чем ты... для меня ошибка это то, что она не конкретизированна, т.е. не обработана. была бы не просто AV а чтото вроде "выход за пределы ограничений на количество вложенных запросов > 10"(например), я бы тогда сразу сказал "парень ты не прав, это твой глюк а не их"... а так я этого не говорил.
p.p.p.s все, действительно хватит, работать надо.
← →
sniknik © (2007-11-20 11:09) [147]> ... не обрабатывается и нам он "сваливается".
... не обрабатывается и на чем он "сваливается".
← →
oxffff © (2007-11-20 13:23) [148]
> sniknik © (20.11.07 11:01) [146]
> > Да почему же, я всегда открыт к обсуждению.
> оно и видно, ни на одно предложение нет "конструктива" типа
> "не понимаю зачем но возможно это чтото даст. обьясните",
> только "я вам сказал что так делать нельзя и я сделал единственно
> правильным способом".
> если кто решит перечитать ветку, тот думаю со мной согласится,
> подтекст всего именно такой. (с примесью "я вот делаю правильно,
> а оно еще и не работает. а вы еще и говорите что ошибка
> эта правильная", хотя так никто говорит, говорят лиш что
> делаешь неправильно)
То есть вы в очередной раз утверждаете, что мой запрос является причиной бага.
И что запросы нужно обязательно писать в строго определенной форме, чтобы не вызывать баги
Слышай от вас это более чем странно.
Запрос не является причиной бага. Причиной бага является ошибка.
Если вы забыли, то я сам и нашел способ обхода бага, без именения конструкции.
А вы же на протяжение всей ветки доказываете, что мой запрос является причиной бага.
Но я вам в очередной раз повторяю, что я не пытался изменить запрос (и даже не рассматривал это)
и не обращал внимания на ваши выпады в сторону изменения запроса, поскольку к делу отношения не имеют.
Далее вы пытались обвинить меня в другом мною найденном баге, но уже в Delphi.
И пытались доказать что этот баг, это не баг вовсе. Что так и должно быть
Это уже еще более чем странно.
>
> > Генератору указываются какие фильтры использовать. И предоставляется
> поставщик параметров. Это динамика.
> программе указывается какие параметры использовать. и предоставляется
> список их значений. это динамика.
> несогласен? я ведь не перекомпилю программу на каждый твой
> внесенный запрос/смененного провайдера...
Ваша программа это просто обыкновенный текстовый редактор, не более того.
А вся функциональность сводится к набору текста.
Т.е. формирование всей логики запроса статично прописано пользователем и не может измениться.
Более того параметры вообще приделаны где-то сбоку.
Где сопоставление реально используемых параметров и заданных?
Синтаксис проверяется на этапе выполнения SQL выражения.
ТО есть ваша программа оперирует с понятием текст, а не запрос
Нужно OR, AND, NOT, EXISTS, iN, соединение и т.п. Надо? Пиши текст?
>
> > Однако сформировать фильтры придется статично.
> с чего это бы "придется"?
> > Однако есть возможность часть фильтров формировать в
> динамике.
> она и есть.
> нажми Ctl+F в гриде. поиск сделан на фильтрах. и опять таки
> никаких перекомпиляций на неизвестный мне еще запрос...
А почему тогда сразу не в текстовом редакторе?
Запрос формируется статично пользователем, и не может изменять свою форму без участия пользователя - т.е. нет динамичности
Во это меня вообще удивило.
SELECT * INTO [Сведения о заказах] FROM [Сведения о заказах]
А что мне здесь опять править вручную destenation?
Могу я выбрать таблицу назначения отдельно. Или опять текст
Вообщем, не позорьтесь со своей детской неподелкой.
>
> > поскольку голова погружена только в этот небольшой Framework.
>
> глупости этот твой Framework. (по описанию в [137])
Если у вас нет фантазии, какое отношение это имеет ко мне?
> а объяснению не подлежит, я и более простые(/грубые такие
> что просто в хелпе можно посмотреть, про createparameter
> например) вещи зарекся тебе объяснять. а тут все на "тонких"
> материях...
Ну в свете того, что вы мне пытались доказать, что нарушение семантики - это не баг.
А ваши параметры, которые вообще сбоку и нет их контроля.
Читать хелп явно нужно не мне, а вам и начать с самых азов.
Страницы: 1 2 3 4 вся ветка
Текущий архив: 2008.04.13;
Скачать: CL | DM;
Память: 0.84 MB
Время: 0.028 c