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

📄 jcamtablevieweditor.pas

📁 销售软件
💻 PAS
📖 第 1 页 / 共 3 页
字号:
(*===========================================================*)
(*                                                           *)
(*              Jerk Computer Assembly Manager               *)
(*                                                           *)
(*                    程序作者:杨芹勍                       *)
(*          武汉科技大学 理学院 信息与计算科学031班          *)
(*                  武汉科技大学 莘特工作室                  *)
(*                                                           *)
(*              IDE:Borland Delphi 2006 Update 2            *)
(*                 第三方控件:Raize 4.03                    *)
(*             数据库:Microsoft SQL Server 2000             *)
(*            数据库访问引擎:原生ADO(ADODB_TLB)           *)
(*           数据库管理引擎:JERK DBMANAGER ALPHA            *)
(*                                                           *)
(*           此软件及源代码归 JERK SYSTEM 版权所有           *)
(*            (C)Copyright 2002-2006 Jerk System.            *)
(*                                                           *)
(*===========================================================*)

unit JCAMTableViewEditor;

interface

uses
  Windows,
  Messages,
  SysUtils,
  Variants,
  Classes,
  Graphics,
  Controls,
  Forms,
  Dialogs,
  ImgList,
  ExtCtrls,
  RzPanel,
  RzButton,
  RzCmboBx,
  ComCtrls,
  ADODB_TLB,
  RzListVw,
  StdCtrls,
  RzLabel,
  RzEdit,
  StrUtils,
  TypInfo,
  ActnList,
  JSDBListView,
  JSAutoComplete,
  JCAMConsts,
  JCAMUtils;

type
  TfrmTableViewEditorForm = class( TForm )
    tbrBtns: TRzToolbar;
    btnAdd: TRzToolButton;
    btnDelete: TRzToolButton;
    btnEdit: TRzToolButton;
    btnSave: TRzToolButton;
    btnCancel: TRzToolButton;
    RzSpacer1: TRzSpacer;
    sbxInfoList: TScrollBox;
    alTableViewEditor: TActionList;
    actAdd: TAction;
    actDelete: TAction;
    actEdit: TAction;
    actSave: TAction;
    actCancel: TAction;
    procedure FormCreate( Sender: TObject );
    procedure pDVWColumnClick( Sender: TObject; Column: TListColumn );
    procedure pDVWDataStateChange( Sender: TObject;
      StartIndex, EndIndex: Integer; OldState, NewState: TItemStates );
    procedure pDVWSelectItem( Sender: TObject;
      Item: TListItem; Selected: Boolean );
    procedure pDVWInfoTip( Sender: TObject; Item: TListItem; var InfoTip:
      string );
    procedure pBTNClick( Sender: TObject );
    procedure pBTEChange( Sender: TObject );
    procedure pEDTEnter( Sender: TObject );
    procedure pEDTExit( Sender: TObject );
    procedure pEDTChange( Sender: TObject );
    procedure pCBODropDown( Sender: TObject );
    procedure sbxInfoListResize( Sender: TObject );
    procedure actAddExecute( Sender: TObject );
    procedure actDeleteExecute( Sender: TObject );
    procedure actEditExecute( Sender: TObject );
    procedure actSaveExecute( Sender: TObject );
    procedure actCancelExecute( Sender: TObject );
  private
    m_acEditor: TJSAutoComplete;
    m_eOldDVWColumnClick: TLVColumnClickEvent;
    m_eOldDVWDataStateChange: TLVOwnerDataStateChangeEvent;
    m_eOldDVWSelectItem: TLVSelectItemEvent;
    m_eBtnAddClick: TNotifyEvent;
    m_eBtnDeleteClick: TNotifyEvent;
    m_eBtnEditClick: TNotifyEvent;
    m_eBtnSaveClick: TNotifyEvent;
    m_eBtnCancelClick: TNotifyEvent;
    m_cn: _Connection;
    m_lvwDBList: TJSDBListView;
    m_nColumnSortIdx: Integer;
    m_nCurrentIdx: Integer;
    m_bColumnSortAscend: Boolean;
    m_bShowSpecial: Boolean;
    m_bSpecialEnabled: Boolean;
    m_bSaveCheckNull: Boolean;
    m_bSaveCheckRepeated: Boolean;
    m_bInfoAdding: Boolean;
    m_bBtnAddEnabled: Boolean;
    m_bBtnDeleteEnabled: Boolean;
    m_bBtnEditEnabled: Boolean;
    m_bBtnSaveEnabled: Boolean;
    m_bBtnCancelEnabled: Boolean;
    m_bShowListItemInfoHint: Boolean;
    m_bShowKeyField: Boolean;
    m_bUserCanModfy: Boolean;
    m_sTableViewName: string;
    m_sKeyFieldName: string;
    m_sSaveInfoProcName: string;
    m_sDeleteInfoProcName: string;
    m_sLoadCondition: string;
    procedure pDVWSelectNone;
    procedure pColumnSort( const nColumnIdx: Integer );
    procedure pFillInfoByItemIndex( const nItemIndex: Integer );
    procedure pFillInfoByKeyFieldID( const nKeyFieldID: Integer );
    procedure pFillListView( const bClearColumnHeader: Boolean = True );
    procedure pInitInfoPanel( const bClearComponents: Boolean = True );
    procedure pInitEditButtonEnabled;
    procedure pDestroyComponents;
    procedure SetDBListView( const Value: TJSDBListView );
    procedure SetTableViewName( const Value: string );
    procedure SetConnection( const Value: _Connection );
    procedure SetKeyFieldName( const Value: string );
    procedure SetSaveCheckNull( const Value: Boolean );
    procedure SetSaveCheckRepeated( const Value: Boolean );
    procedure SetShowSpecial( const Value: Boolean );
    procedure SetSpecialEnabled( const Value: Boolean );
    procedure SetLoadCondition( const Value: string );
    procedure SetOnButtonAddClick( const Value: TNotifyEvent );
    procedure SetOnButtonCancelClick( const Value: TNotifyEvent );
    procedure SetOnButtonDeleteClick( const Value: TNotifyEvent );
    procedure SetOnButtonEditClick( const Value: TNotifyEvent );
    procedure SetOnButtonSaveClick( const Value: TNotifyEvent );
    procedure SetShowListItemInfoHint( const Value: Boolean );
    procedure SetSaveInfoProcName( const Value: string );
    procedure SetShowKeyField( const Value: Boolean );
    procedure SetDeleteInfoProcName( const Value: string );
  public
    procedure InfoMultiSelected;
    procedure FillAllEditString( const sFillStr: string = '' );
    procedure BlankAllEdit;
    procedure SetAllEditReadOnly( const bReadOnly: Boolean );
    procedure BlankAllInfoList;
    procedure StartSurf( const bClearAll: Boolean = True );
    procedure CheckBtnVisible;
    property Connection: _Connection
      read m_cn
      write SetConnection;
    property LoadCondition: string
      read m_sLoadCondition
      write SetLoadCondition;
    property ButtonAdd: TRzToolButton
      read btnAdd
      write btnAdd;
    property ButtonDelete: TRzToolButton
      read btnDelete
      write btnDelete;
    property ButtonEdit: TRzToolButton
      read btnEdit
      write btnEdit;
    property ButtonSave: TRzToolButton
      read btnSave
      write btnSave;
    property ButtonCancel: TRzToolButton
      read btnCancel
      write btnCancel;
    property ActionAdd: TAction
      read actAdd
      write actAdd;
    property ActionDelete: TAction
      read actDelete
      write actDelete;
    property ActionEdit: TAction
      read actEdit
      write actEdit;
    property ActionSave: TAction
      read actSave
      write actSave;
    property ActionCancel: TAction
      read actCancel
      write actCancel;
    property ScrollBox: TScrollBox
      read sbxInfoList
      write sbxInfoList;
    property ToolBar: TRzToolbar
      read tbrBtns
      write tbrBtns;
    property DBListView: TJSDBListView
      read m_lvwDBList
      write SetDBListView;
    property TableViewName: string
      read m_sTableViewName
      write SetTableViewName;
    property KeyFieldName: string
      read m_sKeyFieldName
      write SetKeyFieldName;
    property ShowSpecial: Boolean
      read m_bShowSpecial
      write SetShowSpecial;
    property SpecialEnabled: Boolean
      read m_bSpecialEnabled
      write SetSpecialEnabled;
    property SaveCheckNull: Boolean
      read m_bSaveCheckNull
      write SetSaveCheckNull;
    property SaveCheckRepeated: Boolean
      read m_bSaveCheckRepeated
      write SetSaveCheckRepeated;
    property OnButtonAddClick: TNotifyEvent
      read m_eBtnAddClick
      write SetOnButtonAddClick;
    property OnButtonSaveClick: TNotifyEvent
      read m_eBtnSaveClick
      write SetOnButtonSaveClick;
    property OnButtonDeleteClick: TNotifyEvent
      read m_eBtnDeleteClick
      write SetOnButtonDeleteClick;
    property OnButtonEditClick: TNotifyEvent
      read m_eBtnEditClick
      write SetOnButtonEditClick;
    property OnButtonCancelClick: TNotifyEvent
      read m_eBtnCancelClick
      write SetOnButtonCancelClick;
    property ShowListItemInfoHint: Boolean
      read m_bShowListItemInfoHint
      write SetShowListItemInfoHint
      default True;
    property SaveInfoProcName: string
      read m_sSaveInfoProcName
      write SetSaveInfoProcName;
    property DeleteInfoProcName: string
      read m_sDeleteInfoProcName
      write SetDeleteInfoProcName;
    property ShowKeyField: Boolean
      read m_bShowKeyField
      write SetShowKeyField
      default False;
    property UserCanModify: Boolean
      read m_bUserCanModfy;
  end;

var
  frmTableViewEditorForm: TfrmTableViewEditorForm;

implementation

uses
  untFieldValuesList,
  untTField,
  untTViewParent,
  untTEmployee,
  untMain,
  JCAMManagerForm;

{$R *.dfm}

{ TfrmTableViewEditorForm }

procedure TfrmTableViewEditorForm.BlankAllInfoList;
begin
  if DBListView <> nil then
  begin
    DBListView.Items.Count := 0;
    DBListView.CloseRecordset;
  end;
  BlankAllEdit;
end;

procedure TfrmTableViewEditorForm.FormCreate( Sender: TObject );
begin
  m_nColumnSortIdx := -1;
  m_nCurrentIdx := -1;
  m_bColumnSortAscend := False;
  m_bInfoAdding := False;
  m_bBtnAddEnabled := True;
  m_bBtnDeleteEnabled := True;
  m_bBtnEditEnabled := False;
  m_bBtnSaveEnabled := False;
  m_bBtnCancelEnabled := False;
  m_bShowListItemInfoHint := True;

  DBListView := nil;
  Connection := nil;
  TableViewName := EmptyStr;
  LoadCondition := EmptyStr;
  ShowSpecial := True;
  SpecialEnabled := False;
  SaveCheckNull := True;
  SaveCheckRepeated := True;
  ShowKeyField := False;
end;

procedure TfrmTableViewEditorForm.actAddExecute( Sender: TObject );
begin
  { 添加信息 }

  if DBListView <> nil then
  begin
    BlankAllEdit;
    m_bInfoAdding := True;
    actEdit.Execute;
  end;

  // TODO: 处理外部的事件过程
  if Assigned( OnButtonAddClick ) then
    OnButtonAddClick( Sender );
end;

procedure TfrmTableViewEditorForm.actCancelExecute( Sender: TObject );
begin
  { 选择了取消按钮 }

  if DBListView <> nil then
  begin
    if m_nCurrentIdx <> -1 then
      pFillInfoByKeyFieldID( m_nCurrentIdx );

    // TODO: 设置按钮状态
    SetAllEditReadOnly( True );

    m_bInfoAdding := False;
    ActionAdd.Enabled := m_bBtnAddEnabled and UserCanModify;
    ActionDelete.Enabled := m_bBtnDeleteEnabled and UserCanModify;
    ActionEdit.Enabled := m_bBtnEditEnabled and UserCanModify;
    ActionSave.Enabled := m_bBtnSaveEnabled and UserCanModify;
    ActionCancel.Enabled := m_bBtnCancelEnabled and UserCanModify;

    DBListView.Enabled := True;
    DBListView.SetFocus;
  end;

  // TODO: 处理外部的事件过程
  if Assigned( OnButtonCancelClick ) then
    OnButtonCancelClick( Sender );
end;

procedure TfrmTableViewEditorForm.actDeleteExecute( Sender: TObject );
var
  cmd: _Command;
  par: _Parameter;
  li: TListItem;
  nDeleteSuccess, nMsgReturn: Integer;
begin
  { 信息删除 }

  if ( DBListView <> nil ) and
    ( DBListView.SelCount > 0 ) and
    ( DeleteInfoProcName <> EmptyStr ) then
    with DBListView do
    begin
      nMsgReturn := MessageBox( Self.Handle, PChar( Format(
        RSTR_MANAGER_INFODELETE_AFFIRM, [ IntToStr( DBListView.SelCount ) ] ) ),
        PChar( STR_APPTITLE ), MB_ICONQUESTION + MB_YESNO );
      if nMsgReturn = IDYES then
      begin
        Screen.Cursor := crHourGlass;

        cmd := CoCommand.Create;
        cmd.CommandText := DeleteInfoProcName;
        cmd.CommandType := adCmdStoredProc;
        cmd.Set_ActiveConnection( Self.Connection );

        // TODO: 添加变量
        par := cmd.CreateParameter
          ( PVSTR_RETURN, adBoolean, adParamReturnValue, 1, EmptyParam );
        cmd.Parameters.Append( par );
        par := cmd.CreateParameter
          ( KeyFieldName, adVarChar, adParamInput, 100, EmptyStr );
        cmd.Parameters.Append( par );

        // TODO: 开始删除
        nDeleteSuccess := 0;
        li := nil;
        repeat
          li := DBListView.GetNextItem( li, sdAll, [ isSelected ] );
          if li <> nil then
          begin
            cmd.Parameters[ KeyFieldName ].Value := ItemKeyFieldValue( li.Index
              );
            cmd.Execute( EmptyParam, EmptyParam, adCmdStoredProc +
              adExecuteNoRecords );
            if cmd.Parameters[ PVSTR_RETURN ].Value > 0 then
              Inc( nDeleteSuccess );
          end;
        until li = nil;

        if nDeleteSuccess > 0 then
        begin
          StartFillData( False );
          m_nCurrentIdx := -1;
          pDVWSelectNone;
          MessageBox( Self.Handle, PChar( Format(
            RSTR_MANAGER_INFODELETE_SUCCESS, [ IntToStr( nDeleteSuccess ) ] ) ),
            PChar( STR_APPTITLE ), MB_ICONEXCLAMATION );
        end;

        cmd := nil;
        par := nil;

        Screen.Cursor := crDefault;
      end;
    end;

  // TODO: 处理外部的事件过程
  if Assigned( OnButtonDeleteClick ) then
    OnButtonDeleteClick( Sender );
end;

procedure TfrmTableViewEditorForm.actEditExecute( Sender: TObject );
var
  cmp: TComponent;
  n: Integer;
begin
  { 信息编辑 }

  if DBListView <> nil then
  begin
    DBListView.Enabled := False;
    SetAllEditReadOnly( False );

    // TODO: 使第一个编辑框控件设置焦点
    for n := 0 to sbxInfoList.ComponentCount - 1 do
    begin
      cmp := sbxInfoList.Components[ n ];
      if ( ( cmp is TCustomEdit ) or ( cmp is TCustomComboBox ) ) and (
        TControl( cmp ).Enabled ) then
      begin
        TWinControl( cmp ).SetFocus;
        Break;
      end;
    end;

    // TODO: 设置按钮状态
    m_bBtnAddEnabled := ActionAdd.Enabled;
    m_bBtnDeleteEnabled := ActionDelete.Enabled;
    m_bBtnEditEnabled := ActionEdit.Enabled;
    m_bBtnSaveEnabled := ActionSave.Enabled;
    m_bBtnCancelEnabled := ActionCancel.Enabled;

    ActionAdd.Enabled := False;
    ActionDelete.Enabled := False;
    ActionEdit.Enabled := False;
    ActionSave.Enabled := True and UserCanModify;
    ActionCancel.Enabled := True and UserCanModify;
  end;

  // TODO: 处理外部的事件过程
  if Assigned( OnButtonEditClick ) then
    OnButtonEditClick( Sender );
end;

procedure TfrmTableViewEditorForm.actSaveExecute( Sender: TObject );
var
  tf: TTableField;
  cmd: _Command;
  par: _Parameter;
  cmp, cmpCheckField: TComponent;
  pfp: PFieldProp;
  li: TListItem;
  varFieldValue: Variant;
  sFieldName, sFieldValue, sFieldChs: string;
  n, nCheckField, nOutKeyFieldValue: Integer;
  bProcResult: Boolean;
begin
  { 保存信息 }

  if SaveInfoProcName <> EmptyStr then
  begin
    Screen.Cursor := crHourGlass;

    tf := TTableField.Create;
    tf.Connection := Self.Connection;

⌨️ 快捷键说明

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