⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 roominfoform.pas

📁 《delphi数据库开发实例》书籍源码
💻 PAS
字号:
unit RoomInfoForm;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ParentForm, ADODB, DB, ImgList, Grids, DBGrids, ComCtrls,
  ToolWin, StdCtrls, Buttons, ExtCtrls, DBCtrls, Mask;

type
  TRoomInfo = class(TParent)
    DBEdit1: TDBEdit;
    DBEdit2: TDBEdit;
    DBEdit3: TDBEdit;
    DBEdit4: TDBEdit;
    DBEdit5: TDBEdit;
    DBEdit6: TDBEdit;
    DBEdit7: TDBEdit;
    DBEdit8: TDBEdit;
    Label6: TLabel;
    Label7: TLabel;
    Label8: TLabel;
    Label9: TLabel;
    Label10: TLabel;
    Label11: TLabel;
    DBCheckBox1: TDBCheckBox;
    Label12: TLabel;
    Label13: TLabel;
    ComboBox1: TComboBox;
    ComboBox2: TComboBox;
    procedure DataSource1DataChange(Sender: TObject; Field: TField);
    procedure FormCreate(Sender: TObject);
    procedure ComboBox1Select(Sender: TObject);
    procedure ComboBox2Select(Sender: TObject);
    
    procedure ToolButton10Click(Sender: TObject);
    procedure ToolButton6Click(Sender: TObject);
    procedure ToolButton7Click(Sender: TObject);
    procedure ToolButton11Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
    optype:string;//标识是新增还是修改
  end;

var
  RoomInfo: TRoomInfo;

implementation

{$R *.dfm}

procedure TRoomInfo.DataSource1DataChange(Sender: TObject; Field: TField);
begin
  inherited;
  //根据客房的类型编号显示客房类型名称
  adoquery1.Close;
  adoquery1.SQL.Clear;
  adoquery1.SQL.Add('select 类型名称 from 客房类型 where 类型编号='''+dbedit2.Text+'''');
  adoquery1.Open;
  combobox1.Text:=adoquery1.fieldbyname('类型名称').AsString;
   //根据楼层的编号显示楼层名称
  adoquery1.Close;
  adoquery1.SQL.Clear;
  adoquery1.SQL.Add('select 楼层名称 from 楼层信息 where 楼层编号='''+dbedit3.Text+'''');
  adoquery1.Open;
  combobox2.Text:=adoquery1.fieldbyname('楼层名称').AsString;



end;
//------------创建窗体时添加类型名称和楼层名称的下拉列表框项-----------------
procedure TRoomInfo.FormCreate(Sender: TObject);
begin
  inherited;
  //添加客房类型名称下拉项
  adoquery1.Close;
  adoquery1.SQL.Clear;
  adoquery1.SQL.Add('select distinct 类型名称 from 客房类型');
  adoquery1.Open;
  combobox1.Items.Clear;
  while not adoquery1.Eof do
   begin
    combobox1.Items.Add(adoquery1.fieldbyname('类型名称').AsString);
    adoquery1.Next;
   end;

   //添加楼层名称下拉项
  adoquery1.Close;
  adoquery1.SQL.Clear;
  adoquery1.SQL.Add('select distinct 楼层名称 from 楼层信息');
  adoquery1.Open;
  combobox2.Items.Clear;
  while not adoquery1.Eof do
   begin
    combobox2.Items.Add(adoquery1.fieldbyname('楼层名称').AsString);
    adoquery1.Next;
   end;
end;

//----------根据选择的客房类型名称反查并修改客房类型编号---------
procedure TRoomInfo.ComboBox1Select(Sender: TObject);
begin
  inherited;
  adoquery1.Close;
  adoquery1.SQL.Clear;
  adoquery1.SQL.Add('select 类型编号 from 客房类型 where 类型名称='''+combobox1.Text+'''');
  adoquery1.Open;
  dbedit2.Text:=adoquery1.fieldbyname('类型编号').AsString;

end;
//----------根据选择的楼层名称反查并修改楼层编号---------
procedure TRoomInfo.ComboBox2Select(Sender: TObject);
begin
  inherited;
  adoquery1.Close;
  adoquery1.SQL.Clear;
  adoquery1.SQL.Add('select 楼层编号 from 楼层信息 where 楼层名称='''+combobox2.Text+'''');
  adoquery1.Open;
  dbedit3.Text:=adoquery1.fieldbyname('楼层编号').AsString;

end;

//----------保存对数据所做的修改,并检查字段---------
procedure TRoomInfo.ToolButton10Click(Sender: TObject);
var
code:integer;
begin
if optype='insert' then
 begin
  if dbedit2.Text='' then
   begin
    showmessage('必须输入客房的类型编号');
    exit;
   end;
  if dbedit3.Text='' then
    begin
     showmessage('必须输入客房所处的楼层');
     exit;
    end;
   //根据输入的楼层,查询该楼层的最大房间编号,并自动生成新的房间编号
   adoquery1.Close;
   adoquery1.SQL.Clear;
   adoquery1.SQL.Add('select max(客房编号) 本层最大房间号 from 客房信息 where 楼层编号='''+dbedit3.Text+'''');
   adoquery1.Open;
   code:=adoquery1.FieldByName('本层最大房间号').AsInteger;
   code:=code+1;
   if code mod 100>18 then//控制一层最多的房数不能大于16
    begin
     showmessage('一层最多只能有16间房');
     toolbutton11.Click;
     exit;
    end;

   //避开人们忌讳的数字13,14
   if code mod 100=13 then code:=code+2;
   if code mod 100=14 then code:=code+2;

   //客房编号的合成
   if code<999 then
     dbedit1.Text:='0'+inttostr(code)
   else
     dbedit1.Text:=inttostr(code);
 end;

  //注意函数中继承的parent窗体代码的位置,在这里才调用post方法
  inherited;
  //清除标志
  optype:='';

end;

//------------新增客房信息------------------
procedure TRoomInfo.ToolButton6Click(Sender: TObject);
begin
  inherited;
  optype:='insert';//表示这是新增操作调用的保存按钮
  dbedit7.Text:='空房';

end;

//------------修改客房信息------------------
procedure TRoomInfo.ToolButton7Click(Sender: TObject);
begin
  inherited;
  optype:='edit';//表示这是新增操作调用的保存按钮

end;

//----------------取消操作-----------------------
procedure TRoomInfo.ToolButton11Click(Sender: TObject);
begin
  inherited;
  //清除标志
  optype:='';
end;

end.

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -