📄 u_data.pas
字号:
unit u_data;interfaceuses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, Db, DBTables, Series, TeeProcs, Chart;type TDM_main = class(TDataModule) Database: TDatabase; T_code: TTable; DS_code: TDataSource; T_operator: TTable; DS_operator: TDataSource; T_add_room: TTable; DS_add_room: TDataSource; T_room_level: TTable; DS_room_level: TDataSource; T_room_state: TTable; DS_room_state: TDataSource; DS_modify: TDataSource; T_room_modify: TTable; T_room_level2: TTable; DS_room_level2: TDataSource; T_room_state2: TTable; DS_room_state2: TDataSource; Q_roommate: TQuery; DS_roommate: TDataSource; Q_room_level: TQuery; Q_turnover: TQuery; Q_used_room: TQuery; procedure T_operatorNewRecord(DataSet: TDataSet); procedure T_room_modifyAfterScroll(DataSet: TDataSet); private { Private declarations } public procedure SetCodeTable(TableName:String); procedure OpenOperator(State:Boolean); procedure SetOperatorPassword(password:String); procedure OpenAddRoom(State:Boolean); procedure OpenModifyRoom(State:Boolean); procedure SetModifyFilter(RoomID:String); procedure GetRoomLevel(RoomLevel:TStrings); procedure GetRoomStat(StartDate,EndDate:TDate; TimeStep, StatType:Boolean;RoomLevel:Integer; BarSeries:TBarSeries); function SumTurnover(StartDate, EndDate:TDate):Integer; function SumUsedRoom(StartDate, EndDate:TDate;RoomLevel:Integer):Integer; function GetNextDate(StartDate:TDate; TimeStep:Boolean):TDate; end;var DM_main: TDM_main;implementationuses crypt;{$R *.DFM}procedure TDM_main.SetCodeTable(TableName:String);begin T_code.Close; if TableName<>'Close' then begin T_code.TableName:=TableName; T_code.Open; end;end;procedure TDM_main.OpenOperator(State:Boolean);begin T_operator.Active:=State;end;procedure TDM_main.SetOperatorPassword(password:String);begin password:=Copy(password+password, 1, 10); password:=Encrypt(password, 111); with T_operator do begin Edit; FieldValues['PASSWD']:=password; end;end;procedure TDM_main.T_operatorNewRecord(DataSet: TDataSet);begin SetOperatorPassword('');end;procedure TDM_main.OpenAddRoom(State:Boolean);begin T_add_room.Active:=State; T_room_level.Active:=State; T_room_state.Active:=State;end;procedure TDM_main.OpenModifyRoom(State:Boolean);begin T_room_modify.Active:=State; T_room_level2.Active:=State; T_room_state2.Active:=State; if State then T_room_modifyAfterScroll(nil) else Q_roommate.Close;end;procedure TDM_main.SetModifyFilter(RoomID:String);begin with T_room_modify do begin Close; if length(RoomID)>0 then begin Filter:='ID='''+RoomID+''''; Filtered:=True; end else Filtered:=False; Open; end;end;procedure TDM_main.T_room_modifyAfterScroll(DataSet: TDataSet);begin with Q_roommate do begin Close; Prepare; Open; end;end;procedure TDM_main.GetRoomLevel(RoomLevel:TStrings);begin RoomLevel.Clear; RoomLevel.Add('全部级别'); with Q_room_level do begin Open; First; while not Eof do begin RoomLevel.Add(FieldValues['DESCRIPT']); Next; end; Close; end;end;procedure TDM_main.GetRoomStat(StartDate,EndDate:TDate; TimeStep, StatType:Boolean;RoomLevel:Integer; BarSeries:TBarSeries);var StatResult:integer; MidDate:TDate; StatLabel:String;begin BarSeries.Clear; while StartDate<EndDate do begin MidDate:=GetNextDate(StartDate, TimeStep); if StatType then StatResult:=SumTurnover(StartDate, MidDate) else StatResult:=SumUsedRoom(StartDate, MidDate, RoomLevel); if TimeStep then StatLabel:=FormatDateTime('dd', StartDate)+'日' else StatLabel:=FormatDateTime('mm', StartDate)+'月'; BarSeries.AddY(StatResult,StatLabel); StartDate:=MidDate; end;end;function TDM_main.SumTurnover(StartDate, EndDate:TDate):Integer;begin with Q_turnover do begin Params.ParamValues['START_TIME']:=StartDate; Params.ParamValues['END_TIME']:=EndDate; Open; if not FieldByName('SUM').IsNull then SumTurnover:=FieldValues['SUM'] else SumTurnover:=0; Close; end;end;function TDM_main.SumUsedRoom(StartDate, EndDate:TDate; RoomLevel:Integer):Integer;var TotalCount:Integer; LevelStr:String;begin TotalCount:=0; with Q_used_room do begin if RoomLevel=0 then LevelStr:='%' else LevelStr:=IntToStr(RoomLevel-1); Params.ParamValues['LEVEL']:=LevelStr; while StartDate<EndDate do begin Params.ParamValues['DAY']:=StartDate; Open; TotalCount:=TotalCount+FieldValues['COUNT']; Close; StartDate:=StartDate+1; end; end; Result:=TotalCount;end;function TDM_main.GetNextDate(StartDate:TDate;TimeStep:Boolean):TDate;var TimeYear,TimeMonth:String;begin if TimeStep then Result:=StartDate+1 else begin TimeYear:=FormatDateTime('yyyy', StartDate); TimeMonth:=FormatDateTime('mm', StartDate); if TimeMonth='12' then begin TimeYear:=IntToStr(StrToInt(TimeYear)+1); TimeMonth:='01'; end else TimeMonth:=IntToStr(StrToInt(TimeMonth)+1); Result:=StrToDate(TimeYear+'-'+TimeMonth+'-01'); end;end;end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -