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

📄 ufrmtakemeter.pas

📁 水电管理系统,你们不妨看看怎么样?我再继续给你们别的
💻 PAS
字号:
unit ufrmTakeMeter;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls, Buttons, ComCtrls, ExtCtrls, Grids, DBGridEh, DBCtrls, MyNavEh,
  Mask, DBCtrlsEh, Db, ADODB;

type
  TfrmTakeMeter = class(TForm)
    Panel3: TPanel;
    Label4: TLabel;
    DTMeter: TDateTimePicker;
    BitBtn1: TBitBtn;
    Panel2: TPanel;
    DBGridEh1: TDBGridEh;
    Panel4: TPanel;
    Label5: TLabel;
    BitBtn2: TBitBtn;
    BitBtn3: TBitBtn;
    ListView1: TListView;
    dsTakeMeter: TDataSource;
    adoTakeMeter: TADOQuery;
    MyDBNavigator1: TMyDBNavigator;
    Panel1: TPanel;
    Label1: TLabel;
    Label2: TLabel;
    Label6: TLabel;
    Label3: TLabel;
    Label7: TLabel;
    Shape1: TShape;
    DBEditEh3: TDBEditEh;
    DBEditEh4: TDBEditEh;
    DBEditEh1: TDBEditEh;
    DBCharge: TDBEditEh;
    DBEditEh2: TDBEditEh;
    Label8: TLabel;
    Label9: TLabel;
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure FormDestroy(Sender: TObject);
    procedure BitBtn3Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure DBEditEh3KeyPress(Sender: TObject; var Key: Char);
    procedure BitBtn2Click(Sender: TObject);
    procedure ListView1KeyPress(Sender: TObject; var Key: Char);
    procedure adoTakeMeterBeforePost(DataSet: TDataSet);
    procedure DTMeterCloseUp(Sender: TObject);
    procedure DBEditEh4KeyPress(Sender: TObject; var Key: Char);
    procedure BitBtn1Click(Sender: TObject);
  private
    { Private declarations }
    FTempQuery: TADOQuery;
    procedure GetRecord;
  public
    { Public declarations }
  end;

var
  frmTakeMeter: TfrmTakeMeter;
  gInPutDate: TDateTime;     //抄表时间
  MeterNO: String;           //表号
  iTakeMeterNumber: Integer; //抄表数

implementation

uses UCommon, uConst;

{$R *.DFM}

procedure TfrmTakeMeter.FormClose(Sender: TObject;
  var Action: TCloseAction);
begin
  Action := caFree;
end;

procedure TfrmTakeMeter.FormDestroy(Sender: TObject);
begin
  frmTakeMeter := nil;
end;

procedure TfrmTakeMeter.BitBtn3Click(Sender: TObject);
begin
  Panel4.Visible := False;
  MessageBox(Handle, '表编号查找失败!', '操作提示', MB_OK or MB_ICONINFORMATION);
end;

procedure TfrmTakeMeter.FormCreate(Sender: TObject);
begin
  Sdgl.SetConnectString(adoTakeMeter);
  DTMeter.Date := Date;

  Panel4.Visible := False;

  FTempQuery := TADOQuery.Create(nil);
  Sdgl.SetConnectString(FTempQuery);
  gInPutDate := DTMeter.Date;

  //条件显示
  GetRecord;
end;

procedure TfrmTakeMeter.DBEditEh3KeyPress(Sender: TObject; var Key: Char);
var
  iCount: Integer;
  trItem: TListItem;
begin
  if key = #13 then begin
    MeterNo := Trim(DBEditEh3.Text);
    if (MeterNo = '') then begin
      Sdgl.ShowErrMsg('请输入表号!');
      DBEditEh3.SetFocus;
      Exit;
    end
    else
      FTempQuery := Sdgl.IsMeterExist(MeterNo);

    with FTempQuery do begin
      if RecordCount = 1 then  begin //有唯一的记录
        if Sdgl.MeterNOAlreadyInput(MeterNo, gInPutDate) then   //修改吗???
        begin
          If MessageBox(Handle, Pchar('表号为 ' + MeterNO + ' 的表在今天已抄过了,你要对它进行修改吗?'),
                      Pchar('提示'), MB_YESNO or MB_ICONQUESTION) = IDYES Then
          Begin
            If DSTakeMeter.DataSet.State in [dsInsert] Then begin
              ADOTakeMeter.Delete;

              ADOTakeMeter.Locate('MeterID; TakeTime', VarArrayOf([MeterNo, DateToStr(gInPutDate)]), [loCaseInsensitive]);
              ADOTakeMeter.Edit;
              DBEditEh4.SetFocus;
              Exit;
            end
            Else
            Begin
              Sdgl.ShowErrMsg(ErrorRecordLocate);
              Exit;
            End;
          end;
        end
        else   //不修改
        begin
          DBEditEh4.SetFocus;
        end;
      end
      else if RecordCount = 0 then begin   //没有对应的记录
        MessageBox(Handle, pchar('编号为 ' + MeterNO +
                   '  的表不存在,请先在表管理中维护!'), '操作提示', MB_OK or MB_ICONINFORMATION);
        DBEditEh3.Text := '';
        DBEditEh3.SetFocus;
      end
      else begin    //有多条
        ListView1.Items.Clear;
        First;
        for iCount := 0 to RecordCount - 1 do begin
          trItem := ListView1.Items.Add;
          trItem.Caption := IntToStr(iCount + 1);
          trItem.SubItems.Add(Fields[0].AsString);
          Next;
        end;
        Panel4.Visible := True;
        ListView1.SetFocus;
      end;

    end;
  end;  //end if key = #13
end;

procedure TfrmTakeMeter.GetRecord;
var
  str: string;
begin
  str := 'select * from TakeMeter where TakeTime = #' + DateToStr(gInPutDate) + '#';
  with adoTakeMeter do begin
    Close;
    SQL.Clear;
    SQL.Text := str;
    try
      Open;
    except
      MessageBox(Handle, '打开表错误!', '出错提示', MB_ICONERROR or MB_OK);
      Exit;
    end;
  end;
end;

procedure TfrmTakeMeter.BitBtn2Click(Sender: TObject);
begin
  //todo
  DBEditEh3.Text := ListView1.Selected.SubItems.Text;
  panel4.Visible := False;
  DBEditEh4.SetFocus;
end;

procedure TfrmTakeMeter.ListView1KeyPress(Sender: TObject; var Key: Char);
begin
  if key = #13 then
    BitBtn2Click(Sender);
end;

procedure TfrmTakeMeter.adoTakeMeterBeforePost(DataSet: TDataSet);
begin
  with adoTakeMeter do begin
    FieldByName('TakeTime').AsDateTime  := StrToDate(FormatDateTime('yyyy-mm-dd', gInPutDate));
    FieldByName('InputDate').AsDateTime := Date;
     
    if Sdgl.InitMeterInfo(MeterNO, gInPutDate, DBEditEh4.Value) then begin
      Sdgl.CalCharge(MeterNO, gInPutDate);

      FieldByName('CurValue').AsInteger := Sdgl.CurValue;
      FieldByName('Charge').AsCurrency  := Sdgl.CurCharge;
      FieldByName('QuotaCharge').AsCurrency := Sdgl.CurQuotaCharge;

      DBEditEh3.SetFocus;
    end
    else begin
      //todo
      DBEditEh4.SetFocus;
      adoTakeMeter.Delete;
      adoTakeMeter.Append;
      DBEditEh3.SetFocus;
    end;


  end;

end;

procedure TfrmTakeMeter.DTMeterCloseUp(Sender: TObject);
begin
  gInPutDate := DTMeter.Date;
  GetRecord;
end;

procedure TfrmTakeMeter.DBEditEh4KeyPress(Sender: TObject; var Key: Char);
{var
  MeterNO: String;}
begin
  if key = #13 then
  begin
    //todo
    //判断抄表数是不是超限

    
    try
      iTakeMeterNumber := DBEditEh4.Value;
      //adoTakeMeter.Post;
      dsTakeMeter.DataSet.Append;
    except
      Exception.Create('数据提交失败!');
      //adoTakeMeter.Cancel;
      //Exit;
    end;
  end;
end;

procedure TfrmTakeMeter.BitBtn1Click(Sender: TObject);
begin
  if (dsTakeMeter.State <> dsEdit) or (dsTakeMeter.State <> dsInsert) then
  begin
    adoTakeMeter.Append;
    DBEditEh3.SetFocus;
  end;
end;

end.

⌨️ 快捷键说明

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