Форум: "Начинающим";
Текущий архив: 2009.06.28;
Скачать: [xml.tar.bz2];
ВнизLocate в отфильтрованных данных Найти похожие ветки
← →
Лёша (2009-04-29 10:10) [0]Набор данных в TADOTable.
В начальном наборе запись присутствует. Locate её находит.
В отфильтрованном наборе запись отсутствует. Locate выдает эксепшин: "Record not found".
Анализ метода TCustomADODataSet.Locate показывает, что LocateRecord выполняется без учета фильтра, а потом вызывается Resync - там и ошибка.
Филитрую через OnFilterRecord.
Что делать, чтобы Locate выдавал False, а не raise?
← →
Anatoly Podgoretsky © (2009-04-29 10:17) [1]> Лёша (29.04.2009 10:10:00) [0]
Справка говорит
> Locate returns true if it finds a matching row, and makes that row the current one. Otherwise Locate returns false.
← →
Лёша (2009-04-29 10:37) [2]Anatoly Podgoretsky © (29.04.09 10:17) [1]
И что? Я знаю, что по справке все должно работать.
Я же прошу найти, где лыжи не едут.
← →
Лёша (2009-04-29 10:48) [3]Если вместо OnFilterRecord использовать св-во Filter, все работает:
LocateRecord возвращает False.
Проблеме в том, что св-во Filter использовать не могу. У меня фильтрация с использованием внешних данных.
← →
sniknik © (2009-04-29 10:50) [4]> И что? Я знаю, что по справке все должно работать.
неправильно. не "все должно работать" а "все работает как должно (ударение на последний слог)".
т.е. все что происходит у тебя есть правильно, если не устраивает меняй методы.
(вот сколько раз повторять не использовать TADOTable ?)
> Я же прошу найти, где лыжи не едут.
это искать не надо, они всегда не едут в программе. программы в вопросах меняются а местоположение глюков неизменно...
← →
sniknik © (2009-04-29 10:54) [5]> Проблеме в том, что св-во Filter использовать не могу.
фильтр вообще для отбора записей нежелательно использовать... он только для локального отбора в уже полученном рекордсете, но ни в коем случае не для данных из базы.
← →
sniknik © (2009-04-29 10:55) [6]вот тут про разницу в подходах писал, почитай.
http://delphimaster.net/view/3-1240848334/
← →
Лёша (2009-04-29 11:13) [7]ADO досталось в наследство - выкинуть не могу. Фильтрую только локальные данные.
Можно было просто ответить, что Locate в ADO не учитывает OnFilterRecord, и его вызов надо душить в try exeption.
← →
Anatoly Podgoretsky © (2009-04-29 11:18) [8]Глупо совместно применять OnFilterRecord (и не называй это фильтром) и Locate одновременно, для перемещения на запись которая не должна быть показа.
← →
Anatoly Podgoretsky © (2009-04-29 11:20) [9]
> что Locate в ADO не учитывает OnFilterRecord
Никто не учитывает, видимо ты плохо представляешь принципы работы OnFilterRecord и то что это не фильтр, Locate с фильтрованым набором работает правильно.
← →
Лёша (2009-04-29 11:28) [10]После смены пользователем критериев отображаемых данных (фильтрации в обечеловеческом понимании, а не для DataSet). Курсор на записи должен остаться, если запись после фильтрации осталась. Или переместиться на первую. Что тут глупого?
← →
Сергей М. © (2009-04-29 11:43) [11]
> Лёша
А что, настолько проблематично заключить локейт в try..exept для контроля над такой ситуацией ?
← →
Лёша (2009-04-29 11:56) [12]Сергей М. © (29.04.09 11:43) [11]
Я про это и написал.
Вместо того, чтобы открывать философскую дисскусию по дао справки, отсойности ADO, правильного значения слова "фильтр, можно было просто ответить:
Лёша (29.04.09 11:13) [7]
← →
Сергей М. © (2009-04-29 12:06) [13]
> Лёша (29.04.09 11:56) [12]
Ну так и это не единственное решение !
Ведь и Locate и Resync - виртуальные методы, ничто не мешает в своем наследнике перекрыть тот или иной с целью изменения дифолтного их поведения у предка
← →
sniknik © (2009-04-29 12:23) [14]> чтобы открывать философскую дисскусию по дао справки
т.е. когда кто то спрашивает "как правильно перебегать дорогу в неположенном месте" ни в коем случае не надо философствовать о безопасности движения, надо просто сказать "беги быстро". так?
> отсойности ADO
а кто это говорил? воистину, что ни говори поймут тебя все одно как сами хотят...
тебе пытались втолковать про "отстойность" фильтров для отбора данных. раз уж используешь технологию созданную для работы клиент серверами...
← →
sniknik © (2009-04-29 12:37) [15]> Фильтрую только локальные данные.
это тебе только так кажется. только потому что эти данные у тебя лежат на той же машине, что программа, не значит что у тебя к ним прямой/локальный доступ.
ну... строго говоря, может ты действительно используешь "обходной путь" и пользуешься локальными методами... но, судя продемонстрированному "пониманию" подходов к ADO, очень в этом сомневаюсь...
(а отсутствие в вопросе типа базы так вообще ламеризмом пахнет. хотя о чем это я, один только ADOTable тянет на полного ламера...)
← →
Лёша (2009-04-29 13:05) [16]
> тебе пытались втолковать про "отстойность" фильтров для
> отбора данных. раз уж используешь технологию созданную для
> работы клиент серверами...
У ExpressQuantumGrid мощная фильтация по локальным данным. Навеное, им никто не втолковал, что это отстойность".
> это тебе только так кажется. только потому что эти данные
> у тебя лежат на той же машине, что программа, не значит
> что у тебя к ним прямой/локальный доступ.
Данные с сервера "тянутся" секунд 30, получается около 200 записей. Условия отбора теоритически можно вынести в Query, но для этого прийдется городить динамические запросы, потому что критерии отбора сложно даже скормить какой-нибудь ХП. И нахрена этот гимор с переселектами по 30 секунд.
> а отсутствие в вопросе типа базы так вообще ламеризмом пахнет
Для [0] вопроса тип базы не имеет АБСОЛЮТНО никакого значения. Вопрос чисто по TCustomADODataSet.
> один только ADOTable тянет на полного ламера
Ну конечно, если вам дадут на правку код, где будет TTable, вы развернетесь и уйдете. А то вдруг успеют подбежать до правки и скажут: "Лаймер, у него в коде TTable!!!"
← →
Anatoly Podgoretsky © (2009-04-29 13:06) [17]
> Лёша (29.04.09 11:56) [12]
Не стоит указывать как нам отвечать.
← →
Palladin © (2009-04-29 13:11) [18]
> У ExpressQuantumGrid мощная фильтация по локальным данным.
да ты что ты... прямо таки и по локальным... ну да ладно.... не буду спорить с профи.....
← →
Лёша (2009-04-29 13:16) [19]Palladin © (29.04.09 13:11) [18]
А что, уже сделали с переселектами? Не знал. Спасибо, обязательно посмотрю.
Хотя, ничего внешне "мощного" там нет. Фильтрация как у документа Excel.
← →
sniknik © (2009-04-29 13:17) [20]> Ну конечно, если вам дадут на правку код, где будет TTable, вы развернетесь и уйдете.
> А то вдруг успеют подбежать до правки и скажут: "Лаймер, у него в коде TTable!!!"
нет, ты опять ничего не понял... TTable и BDE вполне естественны и для файл сервера "самое то".
а вот если я увижу у кого в коде TADOTable, то поставлю вопрос об его увольнении.
← →
sniknik © (2009-04-29 13:32) [21]> Для [0] вопроса тип базы не имеет АБСОЛЮТНО никакого значения. Вопрос чисто по TCustomADODataSet.
т.е. если у тебя таблицы dbase например и ты думаешь (ошибаешься) что работаешь напрямую, то это равнозначно тому что у тебя mssql и ты знаешь что данные запрашиваются но по какой то причине все же пользуешься.
знать об этом совершенно никому не надо? я так не думаю.
> Данные с сервера "тянутся" секунд 30, получается около 200 записей.
если данных всего 200 записей... то тридцать секунд это какую связь надо с сервером иметь? 0.01кб в сек?
скорее, т.к. у тебя TADOTable и фильтр, тянется там побольше (и намного).
> И нахрена этот гимор с переселектами по 30 секунд.
а вот как раз для того чтобы не было по 30 сек.
← →
Игорь Шевченко © (2009-04-29 13:52) [22]
> а вот если я увижу у кого в коде TADOTable, то поставлю
> вопрос об его увольнении.
как твоя контора называется ? :)
← →
sniknik © (2009-04-29 13:57) [23]> как твоя контора называется ? :)
хочешь к нам? ;)
← →
Palladin © (2009-04-29 13:57) [24]
> а вот если я увижу у кого в коде TADOTable, то поставлю
> вопрос об его увольнении.
а если TADOQuery? :)
← →
Игорь Шевченко © (2009-04-29 14:00) [25]sniknik © (29.04.09 13:57) [23]
> хочешь к нам? ;)
нет, людей буду отговаривать :)
← →
sniknik © (2009-04-29 14:00) [26]> а если TADOQuery? :)
ну тогда просто личная неприязнь к автору... я же не зверь какой.
← →
Palladin © (2009-04-29 14:01) [27]*покрылся холодным потом*
← →
sniknik © (2009-04-29 14:03) [28]> нет, людей буду отговаривать :)
т.е. ты считаешь правильным открывать таблицы с сервера полностью через адотайбле и отфильтровывать их до нужного количества записей на клиенте?
не ожидал... ;(
← →
Лёша (2009-04-29 14:07) [29]sniknik © (29.04.09 14:03) [28]
> > нет, людей буду отговаривать :)
> т.е. ты считаешь правильным открывать таблицы с сервера
> полностью через адотайбле и отфильтровывать их до нужного
> количества записей на клиенте?
>
> не ожидал... ;(
А почему не может быть такого функционала?
> личная неприязнь к автору
Взаимно.
← →
Лёша (2009-04-29 14:11) [30]И почему "отфильтровывать их до нужного".
Просто, фильтровать, как нравится - по разному.
← →
sniknik © (2009-04-29 14:16) [31]> А почему не может быть такого функционала?
почему же не может быть? может, но настолько редко, что специальный компонент под это использовать не стоит (его борланду и делать не стоило). в в остальных случаях когда такую схему используют "по привычке" она только вредит.
> Просто, фильтровать, как нравится - по разному.
вот и получаются программы где 200 записей нужно 30 сек ждать.
← →
sniknik © (2009-04-29 14:18) [32]> И почему "отфильтровывать их до нужного".
потому. что у тебя так и есть. другого объяснения 30секундам нет.
← →
Лёша (2009-04-29 14:18) [33]30 секунд это помимо медленого коннекта еще и выполнение на сервере. Я хоть и лаймер, но могу определить сколько записей возвращает запрос.
← →
Anatoly Podgoretsky © (2009-04-29 14:24) [34]> sniknik (29.04.2009 14:03:28) [28]
Хуже, количество не меняется, у него нет фильтра.
← →
sniknik © (2009-04-29 14:24) [35]нет это ты сейчас так говоришь... сохранить "лицо".
какое выполнение на сервере? TADOTable открывает таблицу, не процедуру/функцию, а таблицу. что выполняется в таблице на сервере? Ну ладно вьюшка, и? что там можно написать на 30сек?
← →
Игорь Шевченко © (2009-04-29 14:27) [36]sniknik © (29.04.09 14:03) [28]
> а вот если я увижу у кого в коде TADOTable, то поставлю
> вопрос об его увольнении.
> т.е. ты считаешь правильным открывать таблицы с сервера
> полностью через адотайбле и отфильтровывать их до нужного
> количества записей на клиенте?
>
> не ожидал... ;(
Чувствуешь разницу, да ?
← →
sniknik © (2009-04-29 14:39) [37]> Чувствуешь разницу, да ?
практически нет, т.к. если его используют то используют именно так. ВСЕГДА. ни разу не видел оправданного варианта использования этого компонента.
если же там будет что то другое типа "сравнительный пример TADOTable с TADODataSet" то вопрос решится не в мою пользу... с другой стороны я и не смотрю в примеры, я смотрю в чужой код только при глобальных проблемах которые проявились уже у клиентов.
← →
Лёша (2009-04-29 15:04) [38]sniknik © (29.04.09 14:24) [35]
> какое выполнение на сервере? TADOTable открывает таблицу,
> не процедуру/функцию, а таблицу. что выполняется в таблице
> на сервере? Ну ладно вьюшка, и? что там можно написать на
> 30сек?
Не TADOTable у меня TADOQuery. Как бы я запросы писал? Назвали его Table1, вот я и ошибся.
Это вы тут прицепились к TADOTable, флейм развели: за какие компоненты, кого надо увольнять
> нет это ты сейчас так говоришь... сохранить "лицо".
Мне это не надо. А вот ты пытаешься. TADOTable, TADOQuery - какая разница. Зачем чтобы отфильтровать локальные данные всегда нужно делать реселект? Если критерии фильтрации внешние, и вставлять их в запрос проблема?
← →
Лёша (2009-04-29 15:23) [39]Но я понял. Со стороны посмотреть: TADOTable, фильтр, долгий селект. Кажется, что скачивается вся таблица.
Но у меня не TADOTable. Разобрались. Всем спасибо.
← →
Игорь Шевченко © (2009-04-29 16:07) [40]sniknik © (29.04.09 14:39) [37]
> ни разу не видел оправданного варианта использования этого
> компонента
Расскажи это Codegear, желательно со своими критериями оправданности. А то они старались, его включали в состав VCL, справку по нему писали, на несколько языков переводили.
> я смотрю в чужой код только при глобальных проблемах которые
> проявились уже у клиентов.
Я надеюсь, ты понимаешь, что глобальную проблему у клиентов можно создать с использованием абсолютно любых компонентов и то, что ты выделяешь какой-то конкретный да еще с критериями - увижу использование, подниму вопрос об увольнении, говорит о несколько неверном подходе (уже не знаю, у тебя ли лично или у конторы в целом).
Потому про контору и спросил :)
На всякий случай - я ADO вообще не использую, поэтому не имею ни особых пристрастий, ни особой ненависти ни к одному из компонентов этой группы.
← →
Anatoly Podgoretsky © (2009-04-29 16:20) [41]> Игорь Шевченко (29.04.2009 16:07:40) [40]
Благими намерениями или маркетинговыми соображениями.
Вреда много принесли.
← →
sniknik © (2009-04-29 16:32) [42]> Расскажи это Codegear, желательно со своими критериями оправданности.
это вообще то не его, а борланда "разработка" и у них есть(был) свой критерий - компоненты для быстрого перевода программ с BDE на ADO. быстрого в смысле на скорую руку, типа заменили в описании тип компонента и все работает, но за счет производительности таких программ. они сами это признают, и предупреждают.
не буду про целесообразность такого перевода вообще (имхо смысла нет), но для ИСПОЛЬЗОВАНИЯ в новых программах он изначально и НЕ ПРЕДПОЛАГАЛСЯ...
если есть справка 6го дельфи можешь это найти, после описание для чего они из справки зачем то убрали (в d7 уже нет)
но его все одно используют. и в книгах видел примеры где не трогая логики в TTable между TT просто вставляют ADO и получают примеры для TADOTable.
> На всякий случай - я ADO вообще не использую
поэтому и не понимаешь... это не пристрастие или ненависть, это показатель полного не понимания ADO. ну к примеру если бы ты увидел как человек называющий себя шофером в дизель бензин заправляет... сел бы ты к нему в машину? не, можно конечно придумать вариант когда это оправдано (может он просто так бак моет. или как присадку для быстрого запуска чуть чуть льет (не знаю можно ли)), но в 99,99% случаев это просто не шофер.
← →
sniknik © (2009-04-29 16:53) [43]еще пример знакомый думаю многим, вклад в программирование потоков от Архангельского все думаю знают?
ну так вот Игорь к тебе вопрос, если к тебе придут с жалобами на тормоза, подвисания, и вообще неадекватную работу какой то программы, что программист, ее разработчик уже долгое время исправить не может/или не хочет, говорит, что это проблемы у клиентов. а у него все работает (мне и так говорили, и показывали как работает, у себя на 10-и записях...). т.е. когда это уже выливается в скандал и неустойки... к тебе приходят как к арбитру, дают код. и первое что ты там видишь это "классику от Архангельского", твои действия? а еще интересно посмотришь ли ты в этот код второй раз, будешь ли проверять дальше написание кода в потоках. или у тебя скажется "ненависть" к компоненту? или к чему там еще.
← →
Игорь Шевченко © (2009-04-29 16:55) [44]sniknik © (29.04.09 16:32) [42]
> компоненты для быстрого перевода программ с BDE на ADO
А зачем их переводить ? (впрочем, это не к тебе вопрос)
В любом случае они (Borland или Codegear, неважно) сделали их вовсе не для того, чтобы сократить количество работающих программистов путем увольнения за использование.
Насчет справок - у меня есть справка по D2006 и все.
Anatoly Podgoretsky © (29.04.09 16:20) [41]
> Вреда много принесли.
Вред можно и TEdit нанести, было бы желание.
← →
Игорь Шевченко © (2009-04-29 16:57) [45]sniknik © (29.04.09 16:53) [43]
> и первое что ты там видишь это "классику от Архангельского",
> твои действия?
на первый раз заставлю переписать, на второй - ну сам понимаешь, я не армия спасения и не церковь
> а у него все работает (мне и так говорили, и показывали
> как работает, у себя на 10-и записях...).
А что, в этом виноват исключительно TADOTable ? А программист вовсе и не причем ?
← →
sniknik © (2009-04-29 17:08) [46]> А что, в этом виноват исключительно TADOTable ? А программист вовсе и не причем ?
конечно, именно поэтому я пытаюсь уволить TADOTable, а не программиста... а, хотя нет, я же "всю дорогу" другое говорил... нет виноват все таки программист, а TADOTable это показатель вины.
← →
Игорь Шевченко © (2009-04-29 17:25) [47]
> нет виноват все таки программист, а TADOTable это показатель
> вины.
Страшная у вас контора. У нас увольняют за неисправленный код/халявное отношение, а у вас сразу за компоненты.
Ты все-таки намекни, что за фирма, так, на всякий случай
← →
sniknik © (2009-04-29 18:10) [48]> а у вас сразу за компоненты.
слушай не придуривайся а? типа такой непонятливый.
использование этого компонента = "глючный код/халявное отношение и + еще нежелание или неспособность учится". исключений я пока не встречал.
> Ты все-таки намекни, что за фирма, так, на всякий случай
с вашим "пониманием" всего по своему? нет уж увольте.
← →
Германн © (2009-04-30 02:01) [49]
> Игорь Шевченко © (29.04.09 17:25) [47]
> sniknik © (29.04.09 18:10) [48]
И как вы оба смогли так "заморозить" эту конференцию?
← →
clickmaker © (2009-04-30 11:17) [50]про ADOTable
If TableDirect is true the data retrieval request uses a background SQL statement and all columns are simply returned. If it is false, the TADOTable component creates a SELECT statement to retrieve the table"s data. The default value of TableDirect is false.
(c) F1
чем он в этом случае от ADOQuery отличается?
← →
sniknik © (2009-04-30 12:09) [51]> чем он в этом случае от ADOQuery отличается?
тем что селект делаешь не ты сам, он "автоматический" на полную выборку без условий. со всеми полями - "*".
а по сути, да ничем, и ADOTable и ADOQuery оба потомки от ADODataSet с "обрезанием" от него функционала.
и если знаешь то и с ADOTable можно полноценные запросы делать... но покажите мне хоть одного знающего который предпочел бы ADOTable ADODataSet-у...
← →
sniknik © (2009-04-30 12:15) [52]> и если знаешь то и с ADOTable можно полноценные запросы делать...
через переопределение типа и предварительной установкой кое каких параметров. т.е. довольно "напряжно" если просто работать с ним а не показывать трюк типа "а вот можно еще и так".
← →
имя (2009-05-09 15:28) [53]Удалено модератором
Страницы: 1 2 вся ветка
Форум: "Начинающим";
Текущий архив: 2009.06.28;
Скачать: [xml.tar.bz2];
Память: 0.61 MB
Время: 0.006 c