Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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 вообще не использую, поэтому не имею ни особых пристрастий, ни особой ненависти ни к одному из компонентов этой группы.



Страницы: 1 2 вся ветка

Форум: "Начинающим";
Текущий архив: 2009.06.28;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.56 MB
Время: 0.006 c
15-1240433713
Юрий
2009-04-23 00:55
2009.06.28
С днем рождения ! 23 апреля 2009 четверг


2-1242037565
TheEd
2009-05-11 14:26
2009.06.28
Модификация вида lookup-поля


15-1240900857
LiveCD
2009-04-28 10:40
2009.06.28
Выбор ОС


15-1240225644
T&F
2009-04-20 15:07
2009.06.28
Отслеживание входящих подключений


11-1203187158
andreil
2008-02-16 21:39
2009.06.28
Правильное отображение рисунков в ЛистБоксе





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский