Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.12.02;
Скачать: CL | DM;

Вниз

поиск   Найти похожие ветки 

 
Spectrum ©   (2007-07-14 18:47) [0]

Привет всем. Оч. нужно! Есть такая проблема: необходимо реализовать поиск по двум полям в одной таблице PX( по ФИО и дате рождения), причем поиск должен осуществляться путем нажатия на 1 кнопку, а  поле "ФИО" при поиске необходимо привести в единому регистру, во избежание ошибки при вводе. Заранее благодарен!


 
sniknik ©   (2007-07-14 19:03) [1]

нужно реализовывай! зачем тебе наше разрешение? а если не дадим?


 
Spectrum ©   (2007-07-14 19:21) [2]

зачем так? если можешь помоги!


 
Anatoly Podgoretsky ©   (2007-07-14 19:28) [3]

> Spectrum  (14.07.2007 18:47:00)  [0]

Смотри Locate, но из-за требования регистра тебе придется делать через Next


 
Anatoly Podgoretsky ©   (2007-07-14 19:31) [4]

Хотя смотри на третий параметр функции Locate, но из-за ошибок с локализацией в драйверах БДЕ это может давать сбои для букв "Я" и "ч"
В Д10 это вроде наконец исправили, не уверен, поскольку в данное время не использую БДЕ.


 
MsGuns ©   (2007-07-14 21:56) [5]

Select * from Table
 where <хоть по 1 полю, хоть по 10-ти, хоть с учетом регистра, хоть без>


 
VadimSpb   (2007-07-14 23:07) [6]

Смотри Locate, но из-за требования регистра тебе придется делать через Next
Уважаю. Поражен. Зачем Locate? Очень долго.

> Select * from Table
>  where

Очень быстро и т.д.


 
sniknik ©   (2007-07-15 00:05) [7]

> Очень долго.
> ...
> Очень быстро и т.д.
уверен, проверим?

сам сделаю табличку для проверки, с к примеру миллионом записей, под условие поиска будет подходить скажем примерно половина, подходящие под условие будут случайно равновероятно распределены по всей таблице. индексов по полям сравнений не будет.
и сравниваем время отработки локейт vs селект.
как думаешь отработает?

а да, чуть не забыл, тип базы оставляем заявленный, т.е. не меняем (в крайнем случае можно на такой же файл сервер и ни в коем случае на клиент сервер, либо работающий по его принципам)

p.s. не все так просто, даже на реальной, а не искуственной проверочной таблице (которая только для "очевидности"), чтобы так однозначно говорить, что одно плохо(/медленно) другое хорошо(/быстро).
и потом  пусть нашел ты селектом всего одну запись, дальше то что? выборка это еше не поиск... нужно то найти, судя по всему, т.е. в отображаемой клиенту таблице установить курсор на нужную запись.


 
Anatoly Podgoretsky ©   (2007-07-15 00:29) [8]

> MsGuns  (14.07.2007 21:56:05)  [5]

Это не поиск, а "фильтр", поиск это перемещение на запись.


 
VadimSpb   (2007-07-15 01:14) [9]


> уверен, проверим?

Да. Проверял на своей шкуре и на MS SQL 2005. Клиенты достали при выборке нужной записи. Запросом все пошло значительно быстрее. Даже таймера для проверки не пришлось ставить.

> нужно то найти, судя по всему, т.е. в отображаемой клиенту
> таблице установить курсор на нужную запись.

Не факт. Зачастую и не надо. Для этого еще есть Lookup.

> поиск это перемещение на запись.

Это определение? Тогда не согласен, тоже не факт. А если необходимо осуществить ПОИСК 10 записей? Куда будем перемещаться? Или поочередно Locate или фильтруем.
Полагаю, поиск записи(ей) - это более расширенная категория, которая может решаться различными способами (методами), напр. фильтрацией.
Вообще, фраза "поиск" тянется от литературы по BDE. В описании SQL используют: фильтрация, выборка, извлечение данных.


 
Германн ©   (2007-07-15 02:48) [10]


> Anatoly Podgoretsky ©   (14.07.07 19:31) [4]
>
> Хотя смотри на третий параметр функции Locate, но из-за
> ошибок с локализацией в драйверах БДЕ это может давать сбои
> для букв "Я" и "ч"
> В Д10 это вроде наконец исправили, не уверен, поскольку
> в данное время не использую БДЕ.
>

Вообще это очень тёмное дело что, когда и как исправили. Мне удалось получить правильную работу с этими буквами. Но вот в результате чего именно, я так и не понял (при детальном анализе).
Но после тех экспериментов у меня DBD в системе, где установлены Д4 и Д6 по завершении работы выдаёт "Unexpected General Protection Violation". И никак я его побороть не смог :(((


 
sniknik ©   (2007-07-15 10:01) [11]

> Да. Проверял на своей шкуре и на MS SQL 2005.
вот как знал когда про тип базы дописывал... говорил же для заданного в вопросе типа базы. ты вообще разницу между клиент сервером и файл сервером знаеш?

> Это определение? Тогда не согласен, тоже не факт.
это здравый смысл. к чему привык пользователь (да и все мы) нажимающий "искать" в ворде или в блокноте? к тому что получит выборку из 10 строк с встречаемым в них искомым словом?
нет, и потому поик <> выборке.

> А если необходимо осуществить ПОИСК 10 записей?
их надо находить последовательно.

> Вообще, фраза "поиск" тянется от литературы по BDE. В описании SQL используют: фильтрация, выборка, извлечение данных.
ну вот видиш. читал значит что это разные вещи, а выводов не сделал. путаешь одно с другим.


 
VadimSpb   (2007-07-15 11:07) [12]


> вот как знал когда про тип базы дописывал

Согласен, возможно. В BDE не проверял.

> это здравый смысл

Здравый смысл - понятие житейское, обывательское, ets. Весьма субъективное. И у каждого он свой ;-))

> к чему привык пользователь (да и все мы)

В Ворде выводить найденные данные можно последовательно одной строкой вверх или вниз, а можно списком всех связанных слов (букв) в справке.
И при чем здесь привычка? В след. версии Билл сделает все иначе - так и будем работать.
2 года в армии человек завтракает в 08-10. На следующий день после дембеля что он будет делать в это время? Правильно - спать, хоть и привык кушать :-)))

> нет, и потому поик <> выборке

Молодец! Подсознательно понимаешь.

> > А если необходимо осуществить ПОИСК 10 записей?
> их надо находить последовательно.

Это что - Указ Президента? Понятно, что физически процесс будет идти последовательно вне нашего желания - надо или не надо. Весь вопрос в представлении данных. Что, и выводить надо последовательно? Ясно - нет, как хотим, так и выводим.

> ну вот видиш. читал значит что это разные вещи, а выводов
> не сделал. путаешь одно с другим.

Вот и пытаюсь это тебе показать :-)))
Повторюсь, прочти внимательно:
Полагаю, поиск записи(ей) - это более расширенная категория, которая может решаться различными способами (методами), напр. фильтрацией.
Насколько я понимаю твою логику, ты считаешь поиском только ту процедуру, когда курсор устанавливается на нужную запись. Поясни если не так.
ИМХО, это просто узкое толкование. А если используем Lookup? Курсор на месте, а запись нашли!


 
MsGuns ©   (2007-07-15 12:08) [13]

>Anatoly Podgoretsky ©   (15.07.07 00:29) [8]
>Это не поиск, а "фильтр", поиск это перемещение на запись.

Почему ? Ведь результаты запроса не отображются в сетке, а "лежат" в отдельном датасете, откуда вытаскивается очередная запись (следующая, предыдущая, первая и т.д.) и по UID ищется тем же Locate в основном (отображенном в гриде) НД


 
sniknik ©   (2007-07-15 15:56) [14]

VadimSpb   (15.07.07 11:07) [12]
> Полагаю, поиск записи(ей) - это более расширенная категория, которая может решаться различными способами (методами), напр. фильтрацией.
нет, поиск это поиск, фильтрация - фильтрация, и т.д. называя вещи своими именами избегаешь многих проблем. а вы получатся говорите одно, подразумеваете другое, а делаете третье (типа "а фигня, все равно это одно и тоже в "расширенной категории"").

> ты считаешь поиском только ту процедуру, когда курсор устанавливается на нужную запись.
не только, а любой способ которым найдет нужную запись/слово, непосредственно в записях/тексте.

> А если используем Lookup? Курсор на месте, а запись нашли!
не нашли, а выбрали из локального рекордсета. это ближе к селекту, только на локали.

MsGuns ©   (15.07.07 12:08) [13]
> и по UID ищется тем же Locate в основном (отображенном в гриде) НД
в [7] это было. и пример, в котором выборка займет минуты, а поиск (Locate) что по UID что по условию миллисекунды, с небольшой разницей.

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


 
VadimSpb   (2007-07-15 16:25) [15]


> называя вещи своими именами избегаешь многих проблем

Полностью согласен. Потому и пишу сейчас.

> поиск это поиск, фильтрация - фильтрация

Забавное определение :-)) А конкретнее можно?

> любой способ которым найдет нужную запись/слово, непосредственно
> в записях/тексте

А что, фильтрацией мы не находим нужную запись (данные)?

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

Абсурд. И откуда это следует? Могу так отметить взаимно.
Я совершенно четко понимаю под поиском нахождение данных неважно каким способом и не важно где: локальный рекордсет или на сервере.
У вас пока это поиск это поиск, фильтрация - фильтрация

Может обратиться к словарю?
Lookup - поиск, синоним find.
Locate - определить местонахождение.
И скорее получается, следуя логике разработчиков BDE, что при Lookup мы осуществляем поиск, а не наоборот.

Пожалуйста, дайте свое четкое определение поиску и чем он отличается от фильтрации.


 
RayGun ©   (2007-07-15 16:48) [16]

Автора надо спросить, что ему нужно - либо найти первую попавшуюся запись, удовлетворяющую условию поиска, либо выбрать записи, удовлетворяющие критерию выборки.


 
VadimSpb   (2007-07-15 16:51) [17]

Прежде всего надо предложить автору не использовать BDE. Если это возможно в контексте его задачи.


 
RayGun ©   (2007-07-15 16:53) [18]

> VadimSpb   (15.07.07 16:51) [17]
> Прежде всего надо предложить автору не использовать BDE. Если это возможно > в контексте его задачи.

Почему же? Если он использует локальную БД, то BDE - вполне нормальный вариант. Хотя есть варианты и по-лучше.


 
VadimSpb   (2007-07-15 16:57) [19]


> BDE - вполне нормальный вариант

Уже нет. Тупиковый.

> Хотя есть варианты и по-лучше

Поэтому и надо предложить.


 
RayGun ©   (2007-07-15 17:03) [20]

Весьма вероятно, что это учебное задание. Если так, то ничего не поделаешь, если нет - то можно выбирать: AbsoluteDB, Firebird Embedded, eXtremeDB, а то может и просто ClientDataSet, TMemData и т.п.


 
VadimSpb   (2007-07-15 17:16) [21]

Я бы использовал TNotСlever и TFool.


 
RayGun ©   (2007-07-15 17:20) [22]

Автора что-то не видно, видимо, усиленно гуглит на тему TNotClever и TFool.


 
Spectrum ©   (2007-07-15 17:49) [23]

Да ребята, неожидал таких дискуссий! Впринципе через Lokate все прокатило. Пасиба всем


 
Игорь Шевченко ©   (2007-07-16 13:40) [24]


> > BDE - вполне нормальный вариант
>
> Уже нет. Тупиковый.


Но тем не менее, работает. И вполне себе нормально.



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

Текущий архив: 2007.12.02;
Скачать: CL | DM;

Наверх




Память: 0.54 MB
Время: 0.03 c
2-1194428773
temp77
2007-11-07 12:46
2007.12.02
Как мне правильно сформировать ConnectionString


15-1194086061
Prohodil Mimo
2007-11-03 13:34
2007.12.02
Существуют ли способы записи на CD после финализации?


15-1193973030
Slider007
2007-11-02 06:10
2007.12.02
С днем рождения ! 2 ноября 2007 пятница


15-1193746821
БарЛог
2007-10-30 15:20
2007.12.02
PHP вывод текста на русском на картинку


2-1194412928
DevilDevil
2007-11-07 08:22
2007.12.02
Как правильно блокировать/разблокировать поток?