Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2009.05.24;
Скачать: [xml.tar.bz2];

Вниз

Locate и поиск далее..   Найти похожие ветки 

 
Alexandra   (2009-04-07 15:13) [0]

Подскажите, как далее заставить курсор перемещаться по БД, если метод Locate нашёл несколько одинаковых записей ?
Спасибо.


 
Игорь Шевченко ©   (2009-04-07 15:18) [1]

метод Locate не находит несколько записей, не обманывай


 
Amoeba ©   (2009-04-07 15:19) [2]


> если метод Locate нашёл несколько одинаковых записей

И каким-таким образом Вам такое удалось? Locate ведь находит только одну - 1-ю запись, удовлетворяющую условию.


 
Anatoly Podgoretsky ©   (2009-04-07 15:44) [3]

> Alexandra  (07.04.2009 15:13:00)  [0]

Locate не перемещается по БД и в соотвествии с названием позиционируется на первую запись в наборе данных.


 
Anatoly Podgoretsky ©   (2009-04-07 15:44) [4]

Удалено модератором


 
Alexandra   (2009-04-07 15:51) [5]

это я уже поняла.
Подскажите метод, который бы перемещал!?


 
Anatoly Podgoretsky ©   (2009-04-07 15:53) [6]

.Next и проверка на условие, первое перемещение можно сделать с помощью Locate


 
Alexandra   (2009-04-09 14:32) [7]

Anatoly Podgoretsky < ну вы же сами понимаете что методом Next это будет перебираться каждая запись, а это очень долго.
Есть другие варианты ?


 
Игорь Шевченко ©   (2009-04-09 14:43) [8]


> Есть другие варианты ?


Есть:

1 - искать только первую запись.
2 - написать SQL-запрос, выбирающий записи в соответствии с условием поиска

Целых два варианта, наверное еще можно предложить


 
clickmaker ©   (2009-04-09 14:53) [9]

> что методом Next это будет перебираться каждая запись

сначала Locate, а потом Next
Next начинает не с начала а с текущей позиции


 
Alexandra   (2009-04-09 15:04) [10]

clickmaker , ну понятно что с текущей, м-д Next перебирает все записи , а если в таблице их тысячи ? То времени очень много уходит за поиск.


 
Anatoly Podgoretsky ©   (2009-04-09 15:15) [11]

> Alexandra  (09.04.2009 14:32:07)  [7]

Не понимаю, и оно подтвержается справкой.

> Locate uses the fastest possible method to locate matching records. If the search fields in KeyFields are indexed and the index is compatible with the specified search options, Locate uses the index. Otherwise Locate creates a filter for the search.

Вариант с фильтром + Next вполне компромистный и плюс вариант фильтр и Locate по ID
Под фильтром понимается WHERE условие поиска.
Фильтр не требуется, если скорость устраивает и при перемещение по сортированому полю, там все записи подряд.

Так что все равно NEXT с различными вариантами.


 
Anatoly Podgoretsky ©   (2009-04-09 15:16) [12]

> Alexandra  (09.04.2009 15:04:10)  [10]

А ты проверь, ну и обрати на рекомендации, как ускорить перемещение.


 
MsGuns ©   (2009-04-09 17:24) [13]

Если исп-ся ADO, то создать клон датасета (один раз), а затем для каждого поиска фильтровать его (OnFilterRecord), и собственно поиск следующей (предыдущей, первой, последней) выполнять в нем. Из найденной записи считывать UID, по которому затием Locate в отображаемом НД

Создание клона и каждое изменение фильтра будет занимать некоторое время, но при "поточном" поиске работает быстрее обычного скана.

Радикальное решение - огрничить отображаемый датасет разумным количеством записей (до тысячи) - в этом случае сканирование выполняется вполне быстро.

Разумеется перед началом сканирования "вырубать" датасет DisableControl, а по завершению врубать EnableControl


 
Alexandra   (2009-04-10 13:16) [14]

..нашла метод проще...используя .......кратенько
var
DSAfterScroll: TDataSetNotifyEvent;
DSDataChange: TDataChangeEvent;
begin
DSAfterScroll := DateSet.AfterScroll;
DSDataChange := DataSource.OnDataChange;

DateSet.AfterScroll := nil;
DataSource.OnDataChange := nil;
SearchNext;
DateSet.AfterScroll := DSAfterScroll;
DataSource.OnDataChange := DSDataChange;
end;
фукцию  SearchNext;
сделала путём перебирания записей по фильтру
DataSet.Filter

спасибо Всем!



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

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

Наверх





Память: 0.48 MB
Время: 0.008 c
4-1209468741
bon
2008-04-29 15:32
2009.05.24
Terminal Service


2-1239266420
Андрей_1
2009-04-09 12:40
2009.05.24
Выловить окончание работы плеера


15-1237604382
baldyman
2009-03-21 05:59
2009.05.24
Клиентский интерфейс под Windows, а само приложение на Unix e


4-1210156637
A.L.E.X.A.N.D.E.R.
2008-05-07 14:37
2009.05.24
Создание процесса от имени системы .


2-1239550339
Новичок
2009-04-12 19:32
2009.05.24
Помогите обратиться к параметрам FilterOptions





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский