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

📄 fmchglogmngmain.pas

📁 代码变更管理工具。当对程序代码进行变更以后可以用改工具记录变更内容
💻 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 + -