Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 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
15-1204235123
boa_kaa
2008-02-29 00:45
2008.04.13
На тему пиратства


2-1205927025
Deled
2008-03-19 14:43
2008.04.13
Программный анализатор


2-1205763221
Berkoot
2008-03-17 17:13
2008.04.13
Надстрочный индекс в Delphi


2-1205758370
Sergey2
2008-03-17 15:52
2008.04.13
Убрать первоначальную форму.


8-1178055969
XProger
2007-05-02 01:46
2008.04.13
Быстрый скриншот