📄 unitorder4.~pas
字号:
unit UnitOrder4;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Menus, ComCtrls, StdCtrls, Buttons, ExtCtrls, XPMan, dbcgrids;
type
TFormOrder4 = class(TForm)
Panel: TPanel;
BtnSQL: TSpeedButton;
BtnDel: TSpeedButton;
Panel3: TPanel;
ListView: TListView;
PanelMsg: TPanel;
GroupBox1: TGroupBox;
EditBianTaiName: TEdit;
DateTimePicker1: TDateTimePicker;
PanelDateTime1: TPanel;
PanelBianTaiName: TPanel;
PanelBianTaiID: TPanel;
PanelLineID: TPanel;
ComboLineID: TComboBox;
EditBianTaiID: TEdit;
PanelOrderType: TPanel;
PanelOrderIndex: TPanel;
PanelOrderFlag: TPanel;
PanelDateTime2: TPanel;
DateTimePicker2: TDateTimePicker;
ComboOrderFlag: TComboBox;
ComboOrderType: TComboBox;
EditOrderIndex: TEdit;
procedure FormShow(Sender: TObject);
procedure BtnSQLClick(Sender: TObject);
procedure BtnDelClick(Sender: TObject);
procedure ListViewDblClick(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure DateTimePicker1Change(Sender: TObject);
procedure DateTimePicker2Change(Sender: TObject);
private
{ Private declarations }
Function GetSQLString():string;
Function GetOrderTypeStr(OrderType : Integer) : string;
public
{ Public declarations }
end;
var
FormOrder4: TFormOrder4;
implementation
uses UnitBasic1, UnitMyModule, UnitMain;
{$R *.dfm}
procedure TFormOrder4.FormShow(Sender: TObject);
var
i : integer;
begin
ComboLineID.Items.Clear();
ComboLineID.Items.Add(' ');
//向ComboLineID中写入线路信息
For i:=0 to ( FormBasic1.ListView.Items.Count - 1 ) do
begin
ComboLineID.Items.Add(FormBasic1.ListView.Items[i].SubItems.Strings[0]);
end;
DateTimePicker1.Date := Now;
DateTimePicker2.Date := Now;
DateTimePicker1.Format := '''起始日期:''yyyy年MM月dd日';
DateTimePicker2.Format := '''终止日期:''yyyy年MM月dd日';
ListView.Columns.Clear();
ListView.Columns.Add();
ListView.Columns.Items[0].Caption := '变台编号';
ListView.Columns.Items[0].Width := 70;
ListView.Columns.Add();
ListView.Columns.Items[1].Caption := '指令序号';
ListView.Columns.Items[1].Width := 70;
ListView.Columns.Add();
ListView.Columns.Items[2].Caption := '指令类型';
ListView.Columns.Items[2].Width := (FormMain.Width - FormMain.mxOutlookBarPro1.Width - 185) div 2;
ListView.Columns.Add();
ListView.Columns.Items[3].Caption := '处理结果';
ListView.Columns.Items[3].Width := (FormMain.Width - FormMain.mxOutlookBarPro1.Width - 185) div 2;
end;
Function TFormOrder4.GetSQLString():string;
var
strSQL : string;
ArraySQL : array of string;
iCountSQL : Integer;
i : Integer;
LineID : string;
begin
strSQL := ' FROM tx_Order';
iCountSQL := 0;
setLength(ArraySQL, 0);
//1 fd_LineID
if Trim(ComBoLineID.Text) <> '' then
begin
//从线路名称取得线路编号
for i:=0 to ( FormBasic1.ListView.Items.Count - 1 ) do
begin
if ComBoLineID.Text = FormBasic1.ListView.Items[i].SubItems.Strings[0] then
begin
LineID := FormBasic1.ListView.Items[i].Caption;
inc(iCountSQL, 1);
setlength(ArraySQL, iCountSQL);
if iCountSQL <> 1 then
ArraySQL[iCountSQL-1] := ' And fd_LineID =' + LineID
else
ArraySQL[iCountSQL-1] := ' fd_LineID =' + LineID;
break;
end;// end ComboLineID.Text
end; // end for
end; // end if ComboLineID.Text <> 0
//2 fd_BianTaiID
if EditBianTaiID.Text <> '' then
begin
inc(iCountSQL, 1);
setlength(ArraySQL, iCountSQL);
if iCountSQL <> 1 then
ArraySQL[iCountSQL-1] := ' And fd_BianTaiID =' + EditBianTaiID.Text
else
ArraySQL[iCountSQL-1] := ' fd_BianTaiID =' + EditBianTaiID.Text;
end;
//3 fd_Name
if EditBianTaiName.Text <> '' then
begin
inc(iCountSQL, 1);
setlength(ArraySQL, iCountSQL);
if iCountSQL <> 1 then
ArraySQL[iCountSQL-1] := ' AND fd_Name like ''%'
else
ArraySQL[iCountSQL-1] := ' fd_Name like ''%';
ArraySQL[iCountSQL-1] := ArraySQL[iCountSQL-1] + EditBianTaiName.Text;
ArraySQL[iCountSQL-1] := ArraySQL[iCountSQL-1] + '%''';
end;
//4 fd_OrderIndex
if EditOrderIndex.Text <> '' then
begin
inc(iCountSQL, 1);
setlength(ArraySQL, iCountSQL);
if iCountSQL <> 1 then
ArraySQL[iCountSQL-1] := ' AND fd_OrderIndex =' + EditOrderIndex.Text
else
ArraySQL[iCountSQL-1] := ' fd_OrderIndex =' + EditOrderIndex.Text;
end;
//5 fd_OrderType
if Trim(ComboOrderType.Text) <> '' then
begin
inc(iCountSQL, 1);
setlength(ArraySQL, iCountSQL);
case ComboOrderType.ItemIndex of
0:;
1: //设置指令
begin
if iCountSQL <> 1 then
ArraySQL[iCountSQL-1] := ' AND fd_OrderType <=20'
else
ArraySQL[iCountSQL-1] := ' fd_OrderType <=20';
end;
2://负荷
begin
if iCountSQL <> 1 then
ArraySQL[iCountSQL-1] := ' AND fd_OrderType=31 or fd_OrderType=32 or fd_OrderType=33'
else
ArraySQL[iCountSQL-1] := ' fd_OrderType=31 or fd_OrderType=32 or fd_OrderType=33';
end;
3://电能
begin
if iCountSQL <> 1 then
ArraySQL[iCountSQL-1] := ' AND fd_OrderType=36 or fd_OrderType=37 or fd_OrderType=38'
else
ArraySQL[iCountSQL-1] := ' fd_OrderType=36 or fd_OrderType=37 or fd_OrderType=38';
end;
4://电容器投切
begin
if iCountSQL <> 1 then
ArraySQL[iCountSQL-1] := ' AND fd_OrderType=34'
else
ArraySQL[iCountSQL-1] := ' fd_OrderType=34';
end;
5://谐波
begin
if iCountSQL <> 1 then
ArraySQL[iCountSQL-1] := ' AND fd_OrderType=35'
else
ArraySQL[iCountSQL-1] := ' fd_OrderType=35';
end;
6://月最大值
begin
if iCountSQL <> 1 then
ArraySQL[iCountSQL-1] := ' AND fd_OrderType=42'
else
ArraySQL[iCountSQL-1] := ' fd_OrderType=42';
end;
7://月最小值
begin
if iCountSQL <> 1 then
ArraySQL[iCountSQL-1] := ' AND fd_OrderType=43'
else
ArraySQL[iCountSQL-1] := ' fd_OrderType=43';
end;
8://月统计值
begin
if iCountSQL <> 1 then
ArraySQL[iCountSQL-1] := ' AND fd_OrderType=41'
else
ArraySQL[iCountSQL-1] := ' fd_OrderType=41';
end;
else
begin
//其他情况
end;
end; //end case
end; //end if<> ''
//6 fd_OrderFlag
if Trim(ComboOrderFlag.Text) <> '' then
begin
inc(iCountSQL, 1);
setlength(ArraySQL, iCountSQL);
//正确返回
if ComboOrderFlag.ItemIndex = 1 then
begin
if iCountSQL <> 1 then
ArraySQL[iCountSQL-1] := ' AND fd_OrderFlag = -1'
else
ArraySQL[iCountSQL-1] := ' fd_OrderFlag = -1';
end
//没有返回
else if ComboOrderFlag.ItemIndex = 2 then
begin
if iCountSQL <> 1 then
ArraySQL[iCountSQL-1] := ' AND fd_OrderFlag <> -1'
else
ArraySQL[iCountSQL-1] := ' fd_OrderFlag <> -1';
end;
//其他结果 不用判断 取所有
end;
//7 fd_DateTime1 and fd_DateTime2
if (DateTimePicker1.Date = DateTimePicker2.Date) and (DateToStr(DateTimePicker1.Date) = DateToStr(Now)) then
begin
//起始和终止日期相等且等于当前日期
end
else
begin
//起始和终止日期不等
inc(iCountSQL, 1);
setlength(ArraySQL, iCountSQL);
if iCountSQL <> 1 then
ArraySQL[iCountSQL-1] := ' AND fd_SysTime >= ''' + DateToStr(DateTimePicker1.Date) + ''' AND fd_SysTime <=''' + DateToStr(DateTimePicker2.Date) + ''''
else
ArraySQL[iCountSQL-1] := ' fd_SysTime >= ''' + DateToStr(DateTimePicker1.Date) + ''' AND fd_SysTime <=''' + DateToStr(DateTimePicker2.Date) + '''';
end;
//strSQL
if length(ArraySQL) <> 0 then
begin
strSQL := strSQL + ' WHERE ';
//for i:=0 to length(ArraySQL)-1 do 性能和安全性没有以下代码优秀
for i := Low(ArraySQL) to High(ArraySQL) do
begin
strSQL := strSQL + ArraySQL[i];
end;//end for
end; //end if
result := strSQL;
end;
procedure TFormOrder4.BtnSQLClick(Sender: TObject);
var
strSQL : string;
ListItem : TListItem;
begin
strSQL := 'Select *' + GetSQLString() + ' Order By fd_OrderIndex,fd_BianTaiID';
//ShowMessage(strSQL);
ListView.Clear();
with MyModule.AdoQuery do
begin
Close();
SQL.Clear();
SQL.Add(strSQL);
try
Open();
except
ExecSQL();
end;
if RecordCount <> 0 then
begin
First();
while not eof do
begin
// ListView.Items.Clear();
ListItem := ListView.Items.Add();
//1 fd_LineID
ListItem.Caption := FieldByName('fd_BianTaiID').AsString ;
//2 fd_Name
ListItem.SubItems.Add(FieldByName('fd_OrderIndex').AsString);
//3 OrderType
ListItem.SubItems.Add( GetOrderTypeStr(FieldByName('fd_OrderType').AsInteger) );
//4 fd_OrderFlag
case (FieldByName('fd_OrderFlag').AsInteger) of
-1:ListItem.SubItems.Add('指令处理完毕=>正确返回');
4:ListItem.SubItems.Add('指令处理完毕=>没有返回');
else
ListItem.SubItems.Add('指令处理中...');
end;
ListItem.SubItems.Add(FieldByName('fd_SysTime').AsString);
Next();
end;//end while
end; //end if
//close();
end; //end with
end;
procedure TFormOrder4.BtnDelClick(Sender: TObject);
var
strSQL : string;
strMsg : string;
begin
strSQL := 'Delete ' + GetSQLString();
//ShowMessage(strSQL);
if (DateTimePicker1.Date = DateTimePicker2.Date) and (DateToStr(DateTimePicker1.Date) = DateToStr(Now)) then
strMsg := '警告:您将要要删除指令库中所有历史指令?' + #13 + '注意:执行删除后不可以恢复。' + #13
else
strMsg := '警告:您将要要删除起始时间=[' + DateTostr(DateTimePicker1.DateTime) + '] 终止时间=[' + DateTostr(DateTimePicker2.DateTime) + ']所有数据?' + #13 + '注意:执行删除后不可以恢复!' + #13;
if MessageBox(self.Handle, LPCTSTR(strMsg) , '警告', MB_OKCANCEL or MB_ICONWARNING) = IDOK then
if MessageBox(self.Handle, LPCTSTR('再次' + strMsg) , '再次警告', MB_OKCANCEL or MB_ICONWARNING) = IDOK then
with MyModule.AdoQuery do
begin//with
SQL.Clear();
SQL.Add(strSQL);
//ShowMessage(SQL.Text);
try
ExecSQL();
Finally
end; //finally
end; //with
end;
Function TFormOrder4.GetOrderTypeStr(OrderType : Integer) : string;
var
OrderTypeStr : string;
begin
case OrderType of
0: OrderTypeStr := '[读取]监控仪表参数';
1: OrderTypeStr := '[设置]数据间隔';
2: OrderTypeStr := '[设置]主动上传';
3: OrderTypeStr := '[设置]投切间隔';
4: OrderTypeStr := '[设置]电容器数据形式级数/容量';
5: OrderTypeStr := '[设置]CT变比';
6: OrderTypeStr := '[设置]PT变比';
7: OrderTypeStr := '[设置]月冻结时间';
8: OrderTypeStr := '[设置]电能冻结时刻';
9: OrderTypeStr := '[设置]电压上限';
10: OrderTypeStr := '[设置]电压下限';
11: OrderTypeStr := '[设置]电流上限';
12: OrderTypeStr := '[设置]额定电流';
13: OrderTypeStr := '[设置]仪表时间年月日时分秒';
14: OrderTypeStr := '[设置]仪表时间年月日周';
15: OrderTypeStr := '[设置]仪表时间时分秒';
16: OrderTypeStr := '[设置]仪表数据清空';
21: OrderTypeStr := '[设置]仪表切电复位';
22: OrderTypeStr := '[设置]指令停止执行';
31: OrderTypeStr := '[取数]实时负荷数据';
32: OrderTypeStr := '[取数]特定时间负荷数据';
33: OrderTypeStr := '[取数]多包负荷数据';
34: OrderTypeStr := '[取数]电容器投切数据';
35: OrderTypeStr := '[取数]谐波数据';
36: OrderTypeStr := '[取数]电能数据';
37: OrderTypeStr := '[取数]多包电能数据';
38: OrderTypeStr := '[取数]冻结电能数据';
41: OrderTypeStr := '[取数]月统计值数据';
42: OrderTypeStr := '[取数]月最大值数据';
43: OrderTypeStr := '[取数]月最小值数据';
else
OrderTypeStr := Format('%d号指令', [OrderType]);
end;
////////////////////////////////////////////////////////
result := OrderTypeStr;
end;
procedure TFormOrder4.ListViewDblClick(Sender: TObject);
begin
if ListView.Selected <> nil then
begin
PanelMsg.Caption := Format('变台编号:%s 指令序号:%s 指令类型:%s 处理标志%s',
[ListView.Selected.Caption,
ListView.Selected.SubItems.Strings[0],
ListView.Selected.SubItems.Strings[1],
ListView.Selected.SubItems.Strings[2]]);
end // end if
end;
procedure TFormOrder4.FormCreate(Sender: TObject);
begin
self.Caption := ' 历史指令管理';
end;
procedure TFormOrder4.DateTimePicker1Change(Sender: TObject);
begin
if DateTimePicker1.DateTime > DateTimePicker2.DateTime then
begin
DateTimePicker1.Color := clRed;
DateTimePicker2.Color := clRed;
end
else begin
DateTimePicker1.Color := clWindow;
DateTimePicker2.Color := clWindow;
end;
end;
procedure TFormOrder4.DateTimePicker2Change(Sender: TObject);
begin
if DateTimePicker1.DateTime > DateTimePicker2.DateTime then
begin
DateTimePicker1.Color := clRed;
DateTimePicker2.Color := clRed;
end
else begin
DateTimePicker1.Color := clWindow;
DateTimePicker2.Color := clWindow;
end;
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -