C++ Builder
| Главная | Уроки | Статьи | FAQ | Форум | Downloads | Литература | Ссылки | RXLib | Диски |

 
Продолжение поиска после Locate
alekseich
Отправлено: 18.06.2004, 11:26


Ученик-кочегар

Группа: Участник
Сообщений: 7



Всем доброе время суток

Поискав по форуму, к сожалению, удовлетврирельного ответа на свой вопрос не нашел

Вот проблема:
Использую TADOStoredProc для выполнения ХП.
Получаю некоторую выборку.
В ней хочу сделать быстрый поиск заданного пользователем значения, меня полностью устраивает поведение Locate:
CODE

   TLocateOptions Opts;
   Opts.Clear();
   Opts << loPartialKey;
   ADOStoredProc1->Locate("doc_num", "952", Opts);

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

Вопрос: каким средством можно решить проблему?
Может нужно использовать нечто другое... что?
PeroManiak
Отправлено: 19.06.2004, 02:59


Дежурный стрелочник

Группа: Участник
Сообщений: 71



CODE

Table1->IndexFieldsNames="<Столбец>";
Table1->SetKey();
Table1->FieldByName ("<Столбец>")->AsString = "<Что ищем>";
Table->GotoKey(); //или GotoNearest();

Компилятор У МЕНЯ ругается: "... No index for fields <столбец>". Ругается он конкретно на первую строчку. База на Paradox'e писана; там есть поле Key, если поставить на одном чем-нибудь *, компилер не ругается, ну блин, не буду же я конечному юзеру говорить типа: "Надо искать? Идешь в Database Desktop.....". Что делать?

CODE

Table1->IndexFieldsNames="<Столбец>";
Table1->FindNearest (OPENARRAY(TVvarRec, (<чего>)));

А так вообще у меня вопрос тот же, потому что почему-то ничего больше не работает ;-)
PeroManiak
Отправлено: 19.06.2004, 15:00


Дежурный стрелочник

Группа: Участник
Сообщений: 71



Есть еще такая функция, далее цитата из хелпа:
QUOTE

Searches the dataset for the record after a specified record and makes that record the current record.

bool __fastcall LocateNext(const AnsiString KeyFields, const Variant &KeyValues, Db::TLocateOptions Options);

Description

Call LocateNext to search a dataset for a record after the current cursor position

KeyFields is a string containing a semicolon-delimited list of field names on which to search.

KeyValues is a variant that specifies the values to match in the key fields. If KeyFields lists a single field, KeyValues specifies the value for that field on the desired record. To specify multiple search values, pass a variant array as KeyValues, or construct a variant array on the fly using the VarArrayOf routine.

Options is a set that optionally specifies additional search latitude when searching on string fields. If Options contains the loCaseInsensitive setting, then LocateNext ignores case when matching fields. If Options contains the loPartialKey setting, then LocateNext allows partial-string matching on strings in KeyValues. If Options is an empty set, or if KeyFields does not include any string fields, Options is ignored.

LocateNext returns true if it finds a matching record, and makes that record the current one. Otherwise LocateNext returns false.

LocateNext 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, LocateNext uses the index. Otherwise LocateNext creates a filter for the search.

Люди, а кто-нибудь знает, как реализовать тот же LocateNext, не относящийся к TIBCustomDataSet, а относящийся к TBDEDataSet?
Заранее всем благодарен.

Вернуться в Работа с базами данных в C++Builder