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

Вниз

поиск по таблице бд   Найти похожие ветки 

 
Scott Storch ©   (2011-12-06 12:02) [0]

В БД есть таблица "Поставщики" (идентификатор, страна, город, название, адрес, телефон, контактное лицо). Нужно реализовать функцию / функции поиска поставщика "по идентификатору", "по стране", "по городу". Для поиска "по стране" и "по городу" нужно предусмотреть возвожность поиска с учетом регистра, частичное / полное совпадение. Пока что есть 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 было целочисленным, плюс ко всему, если поиск выполняется "по идентификатору" необходимость в параметрах отпадает.

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


 
sniknik ©   (2011-12-06 12:19) [1]

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


 
Scott Storch ©   (2011-12-06 12:22) [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;


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


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


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

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



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

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

Наверх




Память: 0.47 MB
Время: 0.009 c
2-1323190986
Zhuck01
2011-12-06 21:03
2012.03.18
как найти символ в строке


4-1255090574
DVM
2009-10-09 16:16
2012.03.18
Подскажите функцию Windows 7 и Windows 2008 Server


2-1323056747
hlopcikz
2011-12-05 07:45
2012.03.18
Как слинковать соеденение?


2-1323178056
Gu
2011-12-06 17:27
2012.03.18
разделить char на 2 байта


15-1322401925
Vyacheslav
2011-11-27 17:52
2012.03.18
Delphi XE2 не работают Break Point