📄 ufrmtakemeter.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 + -