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

 
Поиск в БД записей, Help очень нужно
maikl
Отправлено: 30.05.2003, 09:35


Станционный диспетчер

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



Кто нибудь подскажите как осуществить в БД поиск по записям, а то ничего не получается.
Admin
Отправлено: 30.05.2003, 12:08


Владимир

Группа: Администратор
Сообщений: 1190



FindKey()
FindNearest()
Locate()
Lookup()
...

Например,

CODE


  if(Table1->Locate("Name",Edit1->Text,TLocateOptions())){
      ShowMessage("Ок !");
      // ....
      }else ShowMessage("Не найдена !");

поиск по полю Name таблицы, имени, введенного в Edit1

----

При  поиске по FindKey должны использовать индекс по полям поиска

Table1->IndexFieldNames = "ShopIndex;InOut;ID";

if(Table1->FindKey(ARRAYOFCONST((Edit1->Text,Edit2->Text,Edit3->Text))))
             {
          // .....
             }



----

Да и по F1 по этим функциям в Help-e есть примеры:

CODE


void __fastcall TForm1::FormCreate(TObject *Sender)

{
 Table1->DatabaseName = "DBDemos";
 Table1->TableName = "Customer.db";
 Table1->Active = true;
 Table1->IndexName = "ByCompany";
}

void __fastcall TForm1::Edit1Change(TObject *Sender)

{
 Table1->FindNearest(ARRAYOFCONST((Edit1->Text)));
}

Anry
Отправлено: 30.05.2003, 18:40


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

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



Опять, смотря с какой архитектурой и компонентами работаешь.
Насколько мне известно данные методы хороши при использовании локальной СУБД. При работе на клиент-серверной архитектуре разумней было бы использовать SQL-запросы. В больших наборах даже
с локальной БД, поиск может происходить довольно долго. wink.gif
Если испоьзовать компоненты со страницы InterBase, то у них аналогичные методы немного по-другому называются.
Admin
Отправлено: 30.05.2003, 19:28


Владимир

Группа: Администратор
Сообщений: 1190



Если я правильно понял, речь идет о поиске записей, а не об их
отборе, поэтому Query тут не причем, мы же производим не выборку
записей, а поиск:

QUOTE
Кто нибудь подскажите как осуществить в БД поиск по записям, а то ничего не получается.


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

При использовании Locate() поиск идет медленнее, так как эта
функция индекс не использует, просматривая все записи с самого
начала.

А использовать эти функции можно/нужно и в локальной и
в клиент-серверной базе.

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