Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > СУБД, общие вопросы > Поиск с помощью ХП и позиционирование курсора


Автор: scorp 14.12.2002, 22:38
Не подоскажите как лучше организовать поиск например работника по фамилии с помощью храномой процедуры, так чтобы в компоненте DBGrid сохранились все записи обо всех работниках, но курсор стал напротив искомой записи?

если конечно такое возможно.

Автор: Vit 15.12.2002, 03:06
А в чём прикол использования Stored Procedurе? Ты же уже все данные вытянул и в грид положил, чтобы позиционировать курсор достаточно что-то типа Locate или FindKey, a Stored Procedurе хорошо когда тебе не надо вытягивать все данные и выполнять кверю на сервере.В данном случае Stored Procedurе приведёт к тому что физически эта кверя будет выполняться 3 раза!

Автор: scorp 15.12.2002, 03:22
Так то оно так, я тоже понимаю что это не оптимально, однако препод - он и в Африке препод. Ну захотелось ему так. Сделаю через FindNearest - пусть так принимает....

Спасибо Vit

Автор: Medved 15.12.2002, 18:00
Для использования FindNearest поле, по которому производиться поиск должно быть индексированно, я предпочитаю использовать Locate ([loCaseInsensitive, loPartialKey]).

Автор: scorp 16.12.2002, 11:54
Пегас, причём тут Locate, я в делфах тоже знаю 4 способа. Ты читай вопрос: Нужно сделать ХП...............

Автор: Medved 16.12.2002, 19:10
Цитата(scorp @ 16.12.2002, 06:54)
Пегас, причём тут Locate, я в делфах тоже знаю 4 способа. Ты читай вопрос: Нужно сделать ХП...............

А ты почитай сначала выше замечание Vit-а, а затем и мое.....

Автор: Vit 17.12.2002, 00:35
Ладно, не надо прирекаться. Если честно то я не знаю как это сделать, практически я знаю 4 варианта установить курсов в DBGrid и не совсем понимаю каким образом сюда прилепить процедуру:

1) Locate
2) FindKey
3) перебором
4) через какой-нибудь Lookup контрол

Автор: Medved 17.12.2002, 00:51
Всего существует 5 методов изменения курсора НД:
First, Last, Next, Prior, MoveBy. И все....

GoToKey, GoToNearest, FindNerest, Findkey, Locate - это поиск, с переводом курсора.
Lookup - поиск без перевода курсора,

здесь следует четко разграничить методы изменения курсора НД, и методы поиска (подчеркиваю методы поиска) с переводом или не переводом курсора....


Автор: AntonSaburov 17.12.2002, 01:03
Цитата(Vit @ 16.12.2002, 16:35)
Ладно, не надо прирекаться. Если честно то я не знаю как это сделать, практически я знаю 4 варианта установить курсов в DBGrid и не совсем понимаю каким образом сюда прилепить процедуру:

1) Locate
2) FindKey
3) перебором
4) через какой-нибудь Lookup контрол

Сделать, чтобы нужная запись шла первой
Тогда при открытии/переоткрытии автоматом становимся на эту запись. И при этом всякие там Locate не используются :)

"Я так думаю" (С) "Мимино"

Автор: Medved 17.12.2002, 01:28
Ладно, вот алгоритм.... хот я считаю эту задачу абсурдной....но раз как говорит scorp ему преподаватель задал, то вот такой же абсурдный ответ:


1) В хранимую процедуру задается входной параметр, по которому производиться поиск; (например "Иванов");
2) В хранимой процедуре выбираются запись, которая соответствуют критерию поиска (например SELECT ID FROM Sotrud WHERE FIO = 'Иванов'), и возвращается ID этой записи;
3) Осуществляется поиск с позицианированием курсора, по тому НД, который отражет в DBGrid. Т.е. Находиться запись с тем ID, который вернула хранимая процедура.

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


Автор: scorp 17.12.2002, 05:22
Наш препод мог ))
Всем спасиба, сейчас что-то замучу, если не получиться, то сделаю замениткль.
Ещё раз спасиба.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)