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

📄 unitorder4.~pas

📁 远程抄表系统的客户端程序 安徽六安项目-客户端程序 0 开发环境 Delphi 7.0 所需控件 mxOutlookBar 数 据 库 Sybase 11.5 1 04-12-
💻 ~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 + -