CompaniesForm.pas
上传用户:fh681027
上传日期:2022-07-23
资源大小:1959k
文件大小:6k
源码类别:

Delphi控件源码

开发平台:

Delphi

  1. unit CompaniesForm;
  2. interface
  3. uses
  4.   Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  5.   ExtCtrls, DBCtrls, StdCtrls, Mask, Db, Grids, DBGrids,
  6.   CompaniesData, Buttons, ComCtrls;
  7. type
  8.   TFormCompanies = class(TForm)
  9.     dsCompanies: TDataSource;
  10.     DBGridLocations: TDBGrid;
  11.     DBGridPeople: TDBGrid;
  12.     dsLocations: TDataSource;
  13.     dsPeople: TDataSource;
  14.     Panel1: TPanel;
  15.     PageControlSearch: TPageControl;
  16.     TabSheet1: TTabSheet;
  17.     btnSearch: TButton;
  18.     edSearch: TEdit;
  19.     TabSheet2: TTabSheet;
  20.     edTown: TEdit;
  21.     btnTown: TButton;
  22.     DBGridCompanies: TDBGrid;
  23.     btnCancel: TBitBtn;
  24.     btnOK: TBitBtn;
  25.     Splitter1: TSplitter;
  26.     Splitter2: TSplitter;
  27.     procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
  28.     procedure btnSearchClick(Sender: TObject);
  29.     procedure edSearchChange(Sender: TObject);
  30.     procedure FormCreate(Sender: TObject);
  31.     procedure btnTownClick(Sender: TObject);
  32.     procedure edTownChange(Sender: TObject);
  33.   private
  34.     { Private declarations }
  35.   public
  36.     dm: TDmCompanies;
  37.     class function SelectCompany (var CompanyName: string;
  38.       var CompanyId: Integer): Boolean;
  39.     class function SelectPerson (CompanyId: Integer;
  40.       var PersonId: Integer; var PersonName: string): Boolean;
  41.   end;
  42. var
  43.   FormCompanies: TFormCompanies;
  44. implementation
  45. uses
  46.   MainData;
  47. {$R *.DFM}
  48. procedure TFormCompanies.FormCloseQuery(Sender: TObject;
  49.   var CanClose: Boolean);
  50. var
  51.   Msg: string;
  52. begin
  53.   CanClose := True;
  54.   if dsCompanies.State in dsEditModes then
  55.   begin
  56.     CanClose := False;
  57.     Msg := 'Companies';
  58.   end;
  59.   if dsLocations.State in dsEditModes then
  60.   begin
  61.     CanClose := False;
  62.     Msg := 'Locations';
  63.   end;
  64.   if dsPeople.State in dsEditModes then
  65.   begin
  66.     CanClose := False;
  67.     Msg := 'People';
  68.   end;
  69.   if not CanClose then
  70.     ShowMessage (Msg + ': Cancel or accept changes before closing');
  71. end;
  72. procedure TFormCompanies.btnSearchClick(Sender: TObject);
  73. begin
  74.   dm.DataCompanies.Close;
  75.   dm.DataCompanies.SelectSQL.Text :=
  76.     'select c.id, c.name, c.tax_code' +
  77.     '  from companies c ' +
  78.     '  where name_upper starting with ''' +
  79.     UpperCase (edSearch.Text) + '''';
  80.   dm.DataCompanies.Open;
  81.   dm.DataLocations.Open;
  82.   dm.DataPeople.Open;
  83. end;
  84. procedure TFormCompanies.edSearchChange(Sender: TObject);
  85. begin
  86.   btnSearch.Enabled := edSearch.Text <> '';
  87.   if Length (edSearch.Text) >= 3 then
  88.     btnSearch.OnClick (Sender);
  89. end;
  90. procedure TFormCompanies.FormCreate(Sender: TObject);
  91. begin
  92.   dm := TDmCompanies.Create (self);
  93.   dsCompanies.Dataset := dm.DataCompanies;
  94.   dsLocations.Dataset := dm.DataLocations;
  95.   dsPeople.Dataset := dm.DataPeople;
  96. end;
  97. procedure TFormCompanies.btnTownClick(Sender: TObject);
  98. begin
  99.   with dm.DataCompanies do
  100.   begin
  101.     Close;
  102.     SelectSQL.Text :=
  103.       'select c.id, c.name, c.tax_code' +
  104.       '  from companies c ' +
  105.       '  where exists (select loc.id from locations loc ' +
  106.       '  where loc.id_company = c.ID and UPPER(loc.town) = ''' + UpperCase(edTown.Text) + ''' )';
  107.     Open;
  108.     dm.DataLocations.Open;
  109.     dm.DataPeople.Open;
  110.   end;
  111. end;
  112. procedure TFormCompanies.edTownChange(Sender: TObject);
  113. begin
  114.   btnTown.Enabled := edTown.Text <> '';
  115. end;
  116. class function TFormCompanies.SelectCompany (var CompanyName: string;
  117.   var CompanyId: Integer): Boolean;
  118. var
  119.   FormComp: TFormCompanies;
  120. begin
  121.   Result := False;
  122.   FormComp := TFormCompanies.Create (Application);
  123.   FormComp.Caption := 'Select Company';
  124.   try
  125.     // activate dialog buttons
  126.     FormComp.btnCancel.Visible := True;
  127.     FormComp.btnOK.Visible := True;
  128.     // select company
  129.     if CompanyId > 0 then
  130.       FormComp.dm.DataCompanies.SelectSQL.Text :=
  131.         'select c.id, c.name, c.tax_code' +
  132.         '  from companies c ' +
  133.         '  where c.id = ' + IntToStr (CompanyId)
  134.     else
  135.       FormComp.dm.DataCompanies.SelectSQL.Text :=
  136.         'select c.id, c.name, c.tax_code' +
  137.         '  from companies c ' +
  138.         '  where name_upper starting with ''a''';
  139.     FormComp.dm.DataCompanies.Open;
  140.     FormComp.dm.DataLocations.Open;
  141.     FormComp.dm.DataPeople.Open;
  142.     if FormComp.ShowModal = mrOK then
  143.     begin
  144.       Result := True;
  145.       CompanyId := FormComp.dm.DataCompanies.FieldByName ('id').AsInteger;
  146.       CompanyName := FormComp.dm.DataCompanies.FieldByName ('name').AsString;
  147.     end;
  148.   finally
  149.     FormComp.Free;
  150.   end;
  151. end;
  152. class function TFormCompanies.SelectPerson(CompanyId: Integer;
  153.    var PersonId: Integer; var PersonName: string): Boolean;
  154. var
  155.   FormComp: TFormCompanies;
  156. begin
  157.   Result := False;
  158.   FormComp := TFormCompanies.Create (Application);
  159.   FormComp.Caption := 'Select Person';
  160.   try
  161.     with FormComp.dm.DataCompanies do
  162.     begin
  163.       SelectSQL.Text :=
  164.           'select c.id, c.name, c.tax_code' +
  165.           '  from companies c ' +
  166.           '  where c.id = ' + IntToStr (CompanyId);
  167.       Open;
  168.     end;
  169.     FormComp.dm.DataLocations.Open;
  170.     FormComp.dm.DataPeople.Open;
  171.     // activate dialog buttons
  172.     FormComp.btnCancel.Visible := True;
  173.     FormComp.btnOK.Visible := True;
  174.     // read-only, no further searches
  175.     FormComp.dsCompanies.AutoEdit := False;
  176.     FormComp.DBGridCompanies.ReadOnly := True;
  177.     FormComp.PageControlSearch.Visible := False;
  178.     // select person
  179.     if PersonId <> 0 then
  180.       FormComp.dm.DataPeople.Locate ('ID', PersonId, []);
  181.     FormComp.ActiveControl := FormComp.DBGridPeople;
  182.     if FormComp.ShowModal = mrOK then
  183.     begin
  184.       Result := True;
  185.       PersonId := FormComp.dm.DataPeople.FieldByName ('id').AsInteger;
  186.       PersonName := FormComp.dm.DataPeople.FieldByName ('name').AsString
  187.     end;
  188.   finally
  189.     FormComp.Free;
  190.   end;
  191. end;
  192. end.