📄 fmchglogmngmain.pas
字号:
{*******************************************************}
{ Name : bug管理工具主窗体 }
{ Purpose : 实现各种操作,如:查询,添加等 }
{ Author : 龚立宏, 刘鹏 }
{ BegDate : 2008-05-05 }
{*******************************************************}
unit FmChgLogMngMain;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, ShellApi,
Dialogs, DB, Buttons, Grids, DBGridEh, ComCtrls, StdCtrls, ADODB, IniFiles, DBGrids,
UtDataMng, UtPubData, FmIni;
type
TFmChgMngMain = class(TForm)
grpSearchContent: TGroupBox;
lblDevlpName: TLabel;
lblNotes: TLabel;
lblBranch: TLabel;
btnSearch: TButton;
chkTime: TCheckBox;
edtNotes: TEdit;
cbbDevpName: TComboBox;
cbbBranch: TComboBox;
btnAdd: TBitBtn;
btnEdit: TBitBtn;
btnDel: TBitBtn;
btnExport: TBitBtn;
dsData: TDataSource;
dtpStartTime: TDateTimePicker;
lblEndTime: TLabel;
dtpEndTime: TDateTimePicker;
btnClose: TButton;
dbgrdhDataDis: TDBGridEh;
procedure btnAddClick(Sender: TObject);
procedure btnEditClick(Sender: TObject);
procedure dbgrdhDataDisDblClick(Sender: TObject);
procedure btnSearchClick(Sender: TObject);
procedure chkTimeClick(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure btnCloseClick(Sender: TObject);
procedure btnDelClick(Sender: TObject);
procedure btnExportClick(Sender: TObject);
private
dataMng : TDataMng;
// 生成数据管理对象
adqInfo : TADOQuery;
// dataMng中的AdoQuery的引用
filePath : string;
// 临时存放导出的Notes数据
arrBranchName : ArrRecBranch;
// 存放分支名
arrDevpName : ArrRecDevp;
// 存放开发人员表所有记录
iniFilePath : string;
// ini文件路径
currDevpName : string;
// 当前开发人员名
fastQueryData : RecFastQuery;
// 快速查询结构体
operateType : Integer;
// 操作类型
procedure clearContent();
// 清楚编辑框的内容
procedure setDisTime();
// 设置显示的时间
procedure autoDisplay();
// 动显示功能
procedure initDbGrid();
// 初始化列表框
public
procedure AfterConstruction(); override;
// 用于生成开发人员姓名窗口
function getIniFileDevpName(): string;
// 用于从ini文件读取开发人员姓名
function getOperateType(): Integer;
// 获取用的操作类型,如添加,删除
function getCurrDevpName(): string;
// 获取当前开发人员姓名
function getDevpIdByName(tempDevpName : string): Integer;
// 根据开发人员姓名获取对应id号
function getBranchIdByName(tempBranchName : string): Integer;
// 根据分支名获取分支id号
procedure createIniForm();
// 生成选择开发人员窗体
end;
var
FmChgMngMain: TFmChgMngMain;
implementation
uses FmEditor;
{$R *.dfm}
procedure TFmChgMngMain.setDisTime();
begin
dtpStartTime.DateTime := Now();
dtpEndTime.DateTime := Now();
end;
//------------------------------------------------------------------------------
procedure TFmChgMngMain.clearContent();
begin
edtNotes.Clear();
end;
//------------------------------------------------------------------------------
function TFmChgMngMain.getOperateType(): Integer;
begin
result := operateType;
end;
//------------------------------------------------------------------------------
procedure TFmChgMngMain.AutoDisplay();
var
i : Integer;
begin
// 显示已有分支
arrBranchName := dataMng.getBranchTabRecord();
cbbBranch.Items.Add('');
for i := 0 to Length(arrBranchName) - 1 do
begin
cbbBranch.Items.Add(arrBranchName[i].name);
end;
// 显示已有用户
arrDevpName := dataMng.getDevpTabRecord();
cbbDevpName.Items.Add('');
for i := 0 to Length(arrDevpName) - 1 do
begin
cbbDevpName.Items.Add(arrDevpName[i].name);
end;
end;
//------------------------------------------------------------------------------
procedure TFmChgMngMain.btnAddClick(Sender: TObject);
var
aRecLog: RecLog;
begin
aRecLog.id := -1;
fEditor.init(dataMng);
fEditor.exectue(@aRecLog);
end;
//------------------------------------------------------------------------------
procedure TFmChgMngMain.btnEditClick(Sender: TObject);
var
aRecLog : RecLog;
begin
if dbgrdhDataDis.SelectedRows.Count <> 1 then
begin
Exit;
end;
aRecLog.id := adqInfo.FieldByName('Id').AsInteger;
aRecLog.modType := adqInfo.FieldByName('modType').AsString;
aRecLog.devpId := adqInfo.FieldByName('devpId').AsInteger;
aRecLog.branchId := adqInfo.FieldByName('branchId').AsString;
aRecLog.notes := adqInfo.FieldByName('notes').AsString;
aRecLog.devpNotes := adqInfo.FieldByName('devpNotes').AsString;
aRecLog.lDateTime := adqInfo.FieldByName('lDateTime').AsDateTime;
fEditor.init(dataMng);
fEditor.exectue(@aRecLog);
end;
//------------------------------------------------------------------------------
procedure TFmChgMngMain.dbgrdhDataDisDblClick(Sender: TObject);
begin
btnEditClick(Sender);
end;
//------------------------------------------------------------------------------
procedure TFmChgMngMain.btnSearchClick(Sender: TObject);
begin
FillChar(fastQueryData, SizeOf(fastQueryData), #0); // 清空结构体内容
if cbbDevpName.Text <> '' then
begin
fastQueryData.devpId := getDevpIdByName(cbbDevpName.Text);
end
else
begin
fastQueryData.devpId := 0; // 快速查询如果没有选择开发人员,则id默认为0
end; // end if cbbDevpName.Text <> ''
if cbbBranch.Text <> '' then
begin
fastQueryData.branchId := IntToStr(getBranchIdByName(cbbBranch.Text));
end; // end if cbbBranch.Text <> ''
if edtNotes.Text <> '' then
begin
fastQueryData.notes := edtNotes.Text;
end; // end if edtNotes.Text <> ''
if chkTime.Checked then
begin
fastQueryData.startTime := dtpStartTime.DateTime;
fastQueryData.endTime := dtpEndTime.DateTime;
end;
dataMng.fastQuery(fastQueryData);
end;
//------------------------------------------------------------------------------
procedure TFmChgMngMain.chkTimeClick(Sender: TObject);
begin
dtpEndTime.Enabled := chkTime.Checked;
dtpStartTime.Enabled := chkTime.Checked;
end;
//------------------------------------------------------------------------------
procedure TFmChgMngMain.FormCreate(Sender: TObject);
begin
iniFilePath := ExtractFilePath(application.ExeName) + 'ChangeLogMng.ini';
ClearContent();
SetDisTime();
dataMng := TDataMng.Create();
adqInfo := dataMng.getADOQuery();
dsData.DataSet := adqInfo;
dbgrdhDataDis.DataSource := dsData;
initDbGrid();
autoDisplay();
end;
//------------------------------------------------------------------------------
procedure TFmChgMngMain.AfterConstruction();
begin
inherited;
// 判断是否存在记录开发人员姓名的ini文件,如果没有则弹出选择框让其选择。
if not fileexists(iniFilePath) then
begin
createIniForm();
end
else
begin
currDevpName := getIniFileDevpName(); // 从ini读取当前用户名
if currDevpName = '' then // 当读取的姓名不是开发人员姓名时让其重新选择
begin
createIniForm();
end;
end;
FmChgMngMain.Caption := currDevpName;
end;
//------------------------------------------------------------------------------
function TFmChgMngMain.getIniFileDevpName(): string;
var
i : Integer;
configFile : TIniFile;
tempName : string;
begin
Result := '';
configFile := TIniFile.Create(iniFilePath);
tempName := configFile.ReadString('Base', 'DevpName', '');
for i := 0 to Length(arrDevpName) - 1 do // Iterate
begin
if tempName = arrDevpName[i].name then
begin
Result := tempName;
end;
end; // for
configFile.Free();
end;
//------------------------------------------------------------------------------
procedure TFmChgMngMain.FormDestroy(Sender: TObject);
begin
dataMng.Destroy();
end;
//------------------------------------------------------------------------------
procedure TFmChgMngMain.btnCloseClick(Sender: TObject);
begin
if not (filePath = '') then
begin
DeleteFile(filePath);
end;
Self.Close();
end;
//------------------------------------------------------------------------------
function TFmChgMngMain.getCurrDevpName(): string;
begin
Result := currDevpName;
end;
//------------------------------------------------------------------------------
function TFmChgMngMain.getDevpIdByName(tempDevpName: string): Integer;
var
tempDevpId, i : Integer;
begin
tempDevpId := 0;
for i := 0 to Length(arrDevpName) - 1 do
begin
if(tempDevpName = arrDevpName[i].name) then
begin
tempDevpId := arrDevpName[i].id;
end
end;
Result := tempDevpId;
end;
//------------------------------------------------------------------------------
procedure TFmChgMngMain.initDbGrid();
begin
dbgrdhDataDis.Columns[0].Field := adqInfo.Fields[0];
dbgrdhDataDis.Columns[1].Field := adqInfo.Fields[6];
dbgrdhDataDis.Columns[2].Field := adqInfo.Fields[1];
dbgrdhDataDis.Columns[3].Field := adqInfo.Fields[3];
dbgrdhDataDis.Columns[4].Field := adqInfo.Fields[2];
dbgrdhDataDis.Columns[5].Field := adqInfo.Fields[5];
dbgrdhDataDis.Columns[0].Width := 40;
dbgrdhDataDis.Columns[1].Width := 30;
dbgrdhDataDis.Columns[2].Width := 50;
dbgrdhDataDis.Columns[3].Width := 200;
dbgrdhDataDis.Columns[4].Width := 60;
dbgrdhDataDis.Columns[5].Width := 100;
dbgrdhDataDis.Columns[0].Title.Caption := 'ID';
dbgrdhDataDis.Columns[1].Title.Caption := '类型';
dbgrdhDataDis.Columns[2].Title.Caption := '姓名';
dbgrdhDataDis.Columns[3].Title.Caption := '备注';
dbgrdhDataDis.Columns[4].Title.Caption := '分支';
dbgrdhDataDis.Columns[5].Title.Caption := '时间';
end;
//------------------------------------------------------------------------------
function TFmChgMngMain.getBranchIdByName(tempBranchName: string): Integer;
var
tempBranchId, i : Integer;
begin
tempBranchId := 0;
for i := 0 to Length(arrBranchName) - 1 do
begin
if(tempBranchName = arrBranchName[i].name) then
begin
tempBranchId := arrBranchName[i].id;
end
end;
Result := tempBranchId;
end;
//------------------------------------------------------------------------------
procedure TFmChgMngMain.createIniForm();
var
iniForm: TFmIni;
begin
Application.CreateForm(TFmIni, iniForm); // 生成开发人员姓名选择窗体
iniForm.setIniFilePath(iniFilePath); // 向登陆窗体发送ini文件路径
iniForm.cbbDevName.Items := cbbDevpName.Items;
if iniForm.ShowModal() = mrCancel then // 当登陆窗体按取消按钮时,退出程序
begin
FmChgMngMain.Height := 10;
FmChgMngMain.Width := 10;
FmChgMngMain.Left := 0;
FmChgMngMain.Top := 0;
Application.Terminate();
end
else
begin
currDevpName := iniForm.getDevpName(); // 当点击确定按钮时,将选择的名字给主窗体
end;
iniForm.free(); // 释放开发人员姓名选择窗体
end;
//------------------------------------------------------------------------------
procedure TFmChgMngMain.btnDelClick(Sender: TObject);
var
i : Integer;
selectCount : Integer;
begin
selectCount := dbgrdhDataDis.SelectedRows.Count;
if (selectCount = 0) or (selectCount > adqInfo.RecordCount) then
begin
Exit;
end;
if (Application.MessageBox('确定要删除吗?', '提示:', MB_YESNO) = IDYES) then
begin
adqInfo.DisableControls();
for i := 0 to selectCount - 1 do
begin
adqInfo.Bookmark := dbgrdhDataDis.SelectedRows[i];
adqInfo.Delete();
end;
dbgrdhDataDis.SelectedRows.Clear();
dbgrdhDataDis.SelectedRows.CurrentRowSelected := True;
adqInfo.EnableControls();
end;
end;
//------------------------------------------------------------------------------
procedure TFmChgMngMain.btnExportClick(Sender: TObject);
var
i, noteNum : Integer;
outDataFile : file; // 保存临时导出的notes字段信息
temNotes : TStringList;
begin
if adqInfo.RecordCount > 0then
begin
temNotes := TStringList.Create();
filePath := ExtractFilePath(application.ExeName)+'Notes.txt'; // 生成存放数据的临时文件
AssignFile(outDataFile, filePath);
Rewrite(outDataFile); // 创建文件
CloseFile(outDataFile);
noteNum := 0;
for i := 0 to adqInfo.RecordCount - 1 do // Iterate
begin
if adqInfo.FieldByName('notes').AsString <> '' then
begin
noteNum := noteNum + 1;
temNotes.Add(IntToStr(noteNum) + ': ' + adqInfo.FieldByName('notes').AsString); // 从数据库中获取notes字段信息
end;
adqInfo.Next();
end; // for
adqInfo.First();
temNotes.SaveToFile(filePath);
shellexecute(Application.Handle, 'Open', 'notepad.exe', pchar(filePath), nil, Sw_Normal);
temNotes.Free();
end
else
begin
ShowMessage('没有数据可以倒出');
end;
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -