Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

поиск по таблице бд


Scott Storch ©   (2011-12-06 12:02:00) 

В БД есть таблица "Поставщики" (идентификатор, страна, город, название, адрес, телефон, контактное лицо). Нужно реализовать функцию / функции поиска поставщика "по идентификатору", "по стране", "по городу". Для поиска "по стране" и "по городу" нужно предусмотреть возвожность поиска с учетом регистра, частичное / полное совпадение. Пока что есть 2 варианта;

(1). Написать 3 функции:

function FindById(const Id: Integer): Boolean; // <- SELECT-запрос

function FindByCountry(const Country: string; WholeWord, CaseSensitive: Boolean): Boolean; // <- SELECT-запрос

function FindByCity(const City: string; WholeWord, CaseSensitive: Boolean): Boolean; // <- SELECT-запрос


(2). Написать 1 функцию:


function Find(const FieldName: string; const FieldValue: Variant; WholeWord, CaseSensitive: Boolean): Boolean;


FieldName - Id, Country или City
FieldValue - целочисленное значение идентификатора, название страны или название города.

Больше склоняюсь к первому варианту, потому как, если писать одну фнкцию придется проверять, значение полей, т.е., если FieldName = 'Id', то нужно проверять, чтобы FieldValue было целочисленным, плюс ко всему, если поиск выполняется "по идентификатору" необходимость в параметрах отпадает.

Что посоветуете?


Плохиш   (2011-12-06 12:28:00) [1]


> как вы считаете такая реализация годится?
>

Если делает то, что нужно, то "Да".


Scott Storch   (2011-12-06 12:22:00) [2]

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


 function Find(const FieldName: string; FieldValue: Variant; UseFindOptions,
   WholeWord, CaseSensitive: Boolean): Boolean;
public
 function FindByCity(const City: string; WholeWord,
   CaseSensitive: Boolean): Boolean;
 function FindByCountry(const Country: string; WholeWord,
   CaseSensitive: Boolean): Boolean;
 function FindById(const Id: Integer): Boolean;

function TFinder.Find(const FieldName: string; FieldValue: Variant;
 UseFindOptions, WholeWord, CaseSensitive: Boolean): Boolean;
var
 Options: TLocateOptions;
begin
 Options := [];
 if UseFindOptions then
 begin
   if not WholeWord then
     Options := Options + [loPartialKey];
   if not CaseSensitive then
     Options := Options + [loCaseInsensitive];
 end;
 Result := DataSet.Locate(FieldName, FieldValue, Options);
end;

function TFinder.FindByCity(const City: string; WholeWord,
 CaseSensitive: Boolean): Boolean;
begin
 Result := Find(CityFieldName, City, WholeWord, CaseSensitive);
end;

function TFinder.FindByCountry(const Country: string; WholeWord,
 CaseSensitive: Boolean): Boolean;
begin
 Result := Find(CountryFieldName, Country, WholeWord, CaseSensitive);
end;

function TFinder.FindById(const Id: Integer): Boolean;
begin
 DataSet.Locate(IdFieldName, Id, False, True, True);
end;


как вы считаете такая реализация годится?


sniknik   (2011-12-06 12:19:00) [3]

не писать, использовать стандартные. (почитать доку по используемому и найти их)


Наверх

Титульная страница Поиск, карта сайта Написать письмо