В Delphi получить значение из поля поиска - PullRequest
1 голос
/ 23 декабря 2011

У меня есть база данных Paradox 7. Две таблицы:

Order
--------
OCode
ODate // Buy date
OCount // Product count
PPrice // Price of product in current moment
PCode // Product code
CCode //Client code


Product
---------
PCode
PName
PPrice 

В OrderTable (TTable) я добавляю поле поиска Product(relation PCode(Order)<->PCode(Product)), которое возвращает PName.Мне нужно, когда я выбираю DBGrid Продукт в поле Order.PPrice store Product.PPrice

PS> Извините за мой плохой английский.

1 Ответ

2 голосов
/ 23 декабря 2011

Объявите метод HandleProductSelection в вашей форме (или модуле данных):

procedure HandleProductSelection(Sender: TField);

Присоедините обработчик AfterOpen к таблице заказов. В этом обработчике найдите поле Код продукта и присоедините метод HandleProductSelection к событию OnChange этого поля.

procedure TForm1.OrderTableAfterOpen(DataSet: TDataSet);
var
  Field: TField;
begin
  Field := OrderTable.FindField('PCode'); 
  Field.OnChange := HandleProductSelection;
end;

Это гарантирует, что при каждом открытии таблицы OrderTable обработчик событий будет присоединен к соответствующему полю, а это, в свою очередь, гарантирует, что метод HandleProductSelection будет вызываться при каждом изменении содержимого поля Product Code.

Реализация метода HandleProductSelection. Если вы определили поле поиска для кода продукта с помощью редактора полей, в вашей форме (или в модуле данных) есть набор данных Product. Набор данных с информацией о продукте будет затем размещен в соответствии со значением поля Код продукта в текущей записи таблицы заказов.

Вы можете воспользоваться этим в своем методе HandleProductSelection, просто перенеся информацию из набора данных Product в таблицу OrderTable:

procedure TForm1.HandleProductSelection(Sender: TField);
begin
  OrderTable.FieldByName('PPrice').AsCurrency := 
    DataSetProduct.FieldByName('PPrice').AsCurrency;
end;
...