unitsroombook_data.~pas

来自「自己做过的工程」· ~PAS 代码 · 共 267 行

~PAS
267
字号
unit unitsroombook_data;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ComCtrls, ExtCtrls;

type
  Tformsroombook_data = class(TForm)
    Panel1: TPanel;
    Panel2: TPanel;
    but_ok: TButton;
    but_cancel: TButton;
    dtp_booktime: TDateTimePicker;
    dtp_arrivetime: TDateTimePicker;
    Label1: TLabel;
    Label2: TLabel;
    ed_username: TEdit;
    ed_sroomno: TEdit;
    Label3: TLabel;
    Label4: TLabel;
    Label5: TLabel;
    ed_userno: TEdit;
    Label6: TLabel;
    riched_note: TRichEdit;
    procedure but_cancelClick(Sender: TObject);
    procedure but_okClick(Sender: TObject);
    procedure FormShow(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  formsroombook_data: Tformsroombook_data;

implementation
       uses unitDMHotel,unitlogging,unitsupmanage,unitsroombook;
{$R *.dfm}

procedure Tformsroombook_data.but_cancelClick(Sender: TObject);
begin
    close;
end;

//保存记录
procedure Tformsroombook_data.but_okClick(Sender: TObject);
var
    ls_username,ls_sroomno,ls_userno,ls_note:string;
    ls_booktime,ls_arrivetime:Tdatetime;
    ls_sroomstatus:string;
    statuscolor:Tcolor;
    itemtype,itemno:string;
    ls_sroomno_before_modify:string;   //记录修改前方间编号
    test_userno:integer;

begin
       //丛输入框中取数据,插入到sroom_book表中或用作修改
       ls_username:=ed_username.Text;
       ls_sroomno:=ed_sroomno.Text;
       ls_userno:=ed_userno.Text;
       ls_booktime:=dtp_booktime.Date;
       ls_arrivetime:=dtp_arrivetime.Date;
       ls_note:=riched_note.Text;
       //如果未输入客人名
       if ls_username='' then
          begin
             showmessage('请输入客人名字!');
             ed_username.SetFocus;
             exit;
          end;

       //判断是否是数字型
       if (not tryStrToInt(ls_userno,test_userno)) and (trim(ls_userno)<>'') then
          begin
              MessageBox(handle,'您输入的客人数不是一个数字类型!','错误',MB_OK or MB_ICONERROR);
              ed_userno.SetFocus;
              exit;
          end;


       //找到该包间的记录
       DMHotel.ds_sup_room_status.Requery;

       if  not DMHotel.ds_sup_room_status.Locate('sroomno',ls_sroomno,[])then
           begin
               showmessage('包间编号'+ls_sroomno+'不存在!');
               exit;
           end;

       //取得包间状态,判断是否能被预定
       ls_sroomstatus:=DMHotel.ds_sup_room_status.FieldValues['sroomstatus'];
       if addormodify=1 then        //录入状态
         begin
           if ls_sroomstatus<>'空闲' then
              begin
                  showmessage('该包间不在空闲状态,不能被预定!');
                  exit;
              end;
         end
       else
         begin                        //修改状态
             //取得原包间编号
             ls_sroomno_before_modify:=DMHotel.ds_sroom_book.FieldByName('sroomno').AsString;
             //如果包间编号被修改,需要再次判断包间状态
             if  trim(ls_sroomno_before_modify)<>trim(ls_sroomno) then
               if ls_sroomstatus<>'空闲' then
                  begin
                      showmessage('该包间不在空闲状态,不能被预定!');
                      exit;
                  end;
         end;

       //确认是否要保存
       if MessageDlg('您确定要保存该记录吗?',mtConfirmation,[mbYes,mbNo],0)= mrNO then
         exit;

       //进行修改包间状态、回写最大记录号(插入记录时)和对包间预定记录处理的工作
       //DMHotel.ADOConnection1.BeginTrans;

       //预定的颜色
       statuscolor:=color2;
       //改变将被预定包间状态
       formsupmanage.sroomstatus_change(statuscolor,strtoint(ls_sroomno),'预定');


       //进行插入或修改操作
       if AddorModify=1 then
//插入记录。回写最大记录号和插入包间预定记录
          begin
              //先从item_number表中取出最大记录号,再做相应处理
              itemtype:='sroombookid';
              itemno:='0';
              DMHotel.FindMaxNumber(itemtype,itemno);
              {
              DMHotel.ADODataSetitemnumber.Open;
              if  DMHotel.ADODataSetitemnumber.Locate('itemtype','sroombookid',[])=false then
                  //如果数据库中找不到存储sroombookid最大值的记录,添加一条
                  begin
                      itemtype:='sroombookid';
                      itemno:='0';
                      SQL:='insert into item_number(itemtype,itemno) '+'values('+
                      ''''+itemtype+''''+','+''''+itemno+''''+')';
                      DMHotel.ADOQuery1.SQL.Text:=SQL;
                      DMHotel.ADOQuery1.ExecSQL;       //注:原来程序中前面调用了open,结果导致出错(open和execSQL一般不并存)
                  end
              else  
                  //如果找到记录,取出最大值,加1后用作包间预定表记录号
                  //注:由于在SQL中不知如何处理select *** into :var 中的变量,所以没用ADOQurey
                  //    暂时用数据集ADODataSetitemnumber作
                  itemno:=DMHotel.ADODataSetitemnumber.FieldByName('itemno').AsString;
              //如果原数据库中没有该记录,则此时itemno为初始值0
              itemno:=inttostr(strtoint(itemno)+1);
              DMHotel.ADODataSetitemnumber.Close;  }



              //执行插入包间预定表记录和将最大值回写入item_number表

              //插入预定记录
              SQL:='insert into sroom_book '+'values('+''''+itemno+''''+','+
                   ''''+ls_username+''''+','+''''+ls_userno+''''+','+
                   ''''+datetostr(ls_booktime)+''''+','+''''+datetostr(ls_arrivetime)+''''+','+
                   ''''+ls_sroomno+''''+','+''''+username+''''+','+
                   ''''+ls_note+''''+')';
              //showmessage(sql);////
              DMHotel.ADOQuery1.SQL.Text:=SQL;
              try
                   DMHotel.ADOQuery1.ExecSQL;
              except
                   showmessage('录入失败!');
                   DMHotel.ADOConnection1.RollbackTrans;
                   exit;
              end;

              //将最大值回写
              DMHotel.RewriteMax(itemtype,itemno);
              {
              itemtype:='sroombookid';
              SQL:='update item_number '+'set itemno='+''''+itemno+''''+' '+
                   'where itemtype='+''''+itemtype+'''';
              DMHotel.ADOQuery1.SQL.Text:=SQL;
              //showmessage(sql); ////
              try
                   DMHotel.ADOQuery1.ExecSQL;
              except
                   showmessage('记录号存储失败!');
                   DMHotel.ADOConnection1.RollbackTrans;    //失败回滚
                   exit;
              end;

              DMHotel.ADOConnection1.CommitTrans;          //成功提交
              }
          end
       else
//修改记录。修改预定记录,同时还要将修改前预定记录中的包间状态置为空闲(如果包间编号已改变)
          begin
          DMHotel.ADOConnection1.BeginTrans;
          //如果包间编号被修改,需要修改前预定记录中的包间状态置为空闲
            if  trim(ls_sroomno_before_modify)<>trim(ls_sroomno) then
                begin
                    //修改原记录中包间状态
                    //空闲的颜色
                    statuscolor:=color1;
                    //改变为空闲状态
                    formsupmanage.sroomstatus_change(statuscolor,strtoint(ls_sroomno_before_modify),'空闲');
                end;

             //修改预定记录
             itemno:=DMHotel.ds_sroom_book.FieldByName('sroomid').AsString;
             SQL:='update sroom_book '+'set username='+''''+ls_username+''''+','+
                  'userno='+''''+ls_userno+''''+','+
                  'sroomno='+''''+ls_sroomno+''''+','+
                  'booktime='+''''+datetostr(ls_booktime)+''''+','+
                  'arrivetime='+''''+datetostr(ls_arrivetime)+''''+','+
                  'remark='+''''+ls_note+''''+' '+
                  'where sroomid='+''''+itemno+'''';
             //showmessage(sql); ////
             DMHotel.ADOQuery1.SQL.Text:=SQL;
             try
               DMHotel.ADOQuery1.ExecSQL;
             except
               showmessage('修改失败!');
               DMHotel.ADOConnection1.RollbackTrans;    //失败回滚
               exit;
             end;

             DMHotel.ADOConnection1.CommitTrans;          //成功提交
          end;

       DMHotel.ds_sroom_book.Requery;
       close;
end;

//显示窗口时的初始设置
procedure Tformsroombook_data.FormShow(Sender: TObject);
begin
    //确保数据集打开
    DMHotel.ds_sroom_book.Open;

    if AddorModify=0 then  //修改状态
       begin
          ed_username.Text:=DMHotel.ds_sroom_book.FieldByName('username').AsString;
          ed_sroomno.Text:=DMHotel.ds_sroom_book.FieldByName('sroomno').AsString;
          ed_userno.Text:=DMHotel.ds_sroom_book.FieldByName('userno').AsString;
          dtp_booktime.Date:=DMHotel.ds_sroom_book.FieldByName('booktime').AsDateTime;
          dtp_arrivetime.Date:=DMHotel.ds_sroom_book.FieldByName('arrivetime').AsDateTime;
          riched_note.Text:=DMHotel.ds_sroom_book.FieldByName('remark').AsString;
          ed_username.SetFocus;
       end
    else    //录入状态
       begin
          //清空原来的目录
          ed_username.Text:='';
          ed_sroomno.Text:='';
          ed_userno.Text:='';
          dtp_booktime.Date:=date;
          dtp_arrivetime.Date:=date;
          riched_note.Text:='';
          ed_username.SetFocus;
       end;
end;

end.

⌨️ 快捷键说明

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