32 Урока Borland Delphi



              

Урок 19 - часть 12



 
 

Рис.6: Программа SEARCH позволяет Вам ввести номер заказчика и затем найти его по нажатию кнопки.

Вся функциональность программы SEARCH скрыта в единственном методе, который присоединен к кнопке Search. Эта функция считывает строку, введенную в окно редактора, и ищет ее в колонке CustNo, и наконец помещает фокус на найденной записи. В простейшем варианте, код присоединенный к кнопке Search выглядит так:

procedure TSearchDemo.SearchClick(Sender: TObject);

begin

Table1.SetKey;

Table1.FieldByName(’CustNo’).AsString := Edit1.Text;

Table1.GotoKey;

end;

Первый вызов в этой процедуре установит Table1 в режим поиска. Delphi должен знать, что Вы переключились в режим поиска просто потому, что свойство Fields используется по другому в этом режиме. Далее, нужно присвоить свойству Fields значение, которое Вы хотите найти. Для фактического выполнения поиска нужно просто вызывать Table1.GotoKey.

Если Вы ищете не по первичному индексу файла, тогда Вы должны определить имя индекса, который Вы используете в свойстве IndexName. Например, если таблица Customer имеет вторичный индекс по полю City, тогда Вы должны установить свойство IndexName равным имени индекса. Когда Вы будете искать по этому полю, Вы должны написать:

Table1.IndexName := ’CityIndex’;

Table1.Active := True;

Table1.SetKey;

Table1.FieldByName(’City’).AsString := Edit1.Text;

Table1.GotoKey;

Запомните: поиск не будет выполняться, если Вы не назначите правильно индекс (св-во IndexName). Кроме того, Вы должны обратить внимание, что IndexName - это свойство TTable, и не присутствует в других прямых потомках TDataSet или TDBDataSet.

Когда Вы ищете некоторое значение в БД, всегда существует вероятность того, что поиск окажется неудачным. В таком случае Delphi будет автоматически вызывать exception, но если Вы хотите обработать ошибку сами, то могли бы написать примерно такой код:

procedure TSearchDemo.SearchClick(Sender: TObject);

begin

Cust.SetKey;

Cust.FieldByName('CustNo').AsString:= CustNoEdit.Text;

if not Cust.GotoKey then




Содержание  Назад  Вперед