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

📄 untfieldvalueslist.pas

📁 销售软件
💻 PAS
字号:
(*===========================================================*)
(*                                                           *)
(*              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 untFieldValuesList;

interface

uses
  Windows,
  Messages,
  SysUtils,
  Variants,
  Classes,
  Graphics,
  Controls,
  Forms,
  Dialogs,
  ComCtrls,
  ExtCtrls,
  Menus,
  StdCtrls,
  StrUtils,
  Mask,
  ADODB_TLB,
  RzButton,
  RzBtnEdt,
  RzCmboBx,
  RzCommon,
  RzEdit,
  RzListVw,
  RzRadChk,
  RzSplit,
  RzPanel,
  RzTabs,
  JSDBListView,
  JCAMConsts,
  JCAMUtils,
  JCAMDialogForm,
  JCAMManagerForm,
  JCAMTableViewEditor;

type
  TfrmFieldValuesList = class( TfrmJCAMDialogForm )
    dvwFieldValuesList: TJSDBListView;
    procedure FormCreate( Sender: TObject );
    procedure dvwFieldValuesListSelectItem( Sender: TObject; Item: TListItem;
      Selected: Boolean );
    procedure dvwFieldValuesListDblClick( Sender: TObject );
  private
    m_cn: _Connection;
    m_sTableViewName: string;
    m_sFieldName: string;
    m_sCodeTable: string;
    m_sIDField: string;
    m_sKeyFieldID: string;
    m_bReadOnly: Boolean;
    procedure SetConnection( const Value: _Connection );
    procedure SetReadOnly( const Value: Boolean );
    procedure SetTableViewName( const Value: string );
    procedure SetFieldName( const Value: string );
    function GetSelectedFieldID: string;
    function GetSelectedFieldValue: string;
    procedure SetSelectedFieldID( const Value: string );
    procedure SetSelectedFieldValue( const Value: string );
  public
    property Connection: _Connection
      read m_cn
      write SetConnection;
    property ReadOnly: Boolean
      read m_bReadOnly
      write SetReadOnly
      default False;
    property TableViewName: string
      read m_sTableViewName
      write SetTableViewName;
    property FieldName: string
      read m_sFieldName
      write SetFieldName;
    property FieldID: string
      read GetSelectedFieldID
      write SetSelectedFieldID;
    property FieldValue: string
      read GetSelectedFieldValue
      write SetSelectedFieldValue;
    procedure StartSurf;
  end;

var
  frmFieldValuesList: TfrmFieldValuesList;

implementation

{$R *.dfm}

uses
  untTField;

{ TfrmFieldValuesList }

procedure TfrmFieldValuesList.dvwFieldValuesListDblClick( Sender: TObject );
begin
  inherited;

  if btnOK.Enabled then
    ModalResult := mrOk;
end;

procedure TfrmFieldValuesList.dvwFieldValuesListSelectItem( Sender: TObject;
  Item: TListItem; Selected: Boolean );
begin
  inherited;

  if dvwFieldValuesList.Selected = nil then
    btnOK.Enabled := False
  else if ReadOnly = False then
    btnOK.Enabled := True;
end;

procedure TfrmFieldValuesList.FormCreate( Sender: TObject );
begin
  inherited;

  m_sFieldName := EmptyStr;
  m_sTableViewName := EmptyStr;
  m_sKeyFieldID := EmptyStr;
  m_bReadOnly := False;
end;

function TfrmFieldValuesList.GetSelectedFieldID: string;
begin
  Result := EmptyStr;
  with dvwFieldValuesList do
  begin
    if Selected <> nil then
      Result := dvwFieldValuesList.ItemKeyFieldValue( Selected.Index );
  end;
end;

function TfrmFieldValuesList.GetSelectedFieldValue: string;
var
  rs: _Recordset;
  sSelectedFieldID: string;
begin
  Result := EmptyStr;
  rs := CoRecordset.Create;
  if m_sCodeTable = EmptyStr then
  begin
    sSelectedFieldID := GetSelectedFieldID;
    if not FieldTypeIsNumeric( FieldName, TableViewName ) then
      sSelectedFieldID := '''' + sSelectedFieldID + '''';
    rs.Open( 'SELECT [' + FieldName + '] FROM [' + TableViewName + '] WHERE [' +
      FieldName + ']=' + sSelectedFieldID,
      Connection, adOpenForwardOnly, adLockReadOnly, adCmdText );
  end
  else
  begin
    rs.Open( 'SELECT [' + FieldName + '] FROM [' + m_sCodeTable + '] WHERE ['
      + m_sIDField + ']=' + GetSelectedFieldID,
      Connection, adOpenForwardOnly, adLockReadOnly, adCmdText );
  end;
  if RecordsetValid( rs ) then
    Result := rs.Fields[ FieldName ].Value;
  rs := nil;
end;

procedure TfrmFieldValuesList.SetConnection( const Value: _Connection );
begin
  m_cn := Value;
end;

procedure TfrmFieldValuesList.SetFieldName( const Value: string );
var
  tf: TTableField;
begin
  m_sFieldName := Value;

  // TODO: 获取CodeTable和IDField
  tf := TTableField.Create;
  with tf do
  begin
    Connection := Self.Connection;
    FieldName := Self.FieldName;
    m_sCodeTable := CodeTable;
    m_sIDField := IDFromCode;
  end;
  FreeAndNil( tf );
end;

procedure TfrmFieldValuesList.SetReadOnly( const Value: Boolean );
begin
  m_bReadOnly := Value;
end;

procedure TfrmFieldValuesList.SetSelectedFieldID( const Value: string );
begin
  m_sKeyFieldID := Value;
end;

procedure TfrmFieldValuesList.SetSelectedFieldValue( const Value: string );
var
  rs: _Recordset;
  sValue: string;
begin
  { 通过字段值获取关键字段的值 }

  if Value <> EmptyStr then
  begin
    if m_sCodeTable <> EmptyStr then
    begin
      m_sKeyFieldID := EmptyStr;
      rs := CoRecordset.Create;
      rs.Open( 'SELECT [' + m_sIDField + '] FROM [' + m_sCodeTable + '] WHERE ['
        + FieldName + ']=''' + Value + '''',
        Connection, adOpenForwardOnly, adLockReadOnly, adCmdText );
      if RecordsetValid( rs ) then
        m_sKeyFieldID := rs.Fields[ m_sIDField ].Value;
      rs := nil;
    end
    else
    begin
      m_sKeyFieldID := EmptyStr;
      rs := CoRecordset.Create;
      sValue := Value;
      if not FieldTypeIsNumeric( FieldName, TableViewName ) then
        sValue := '''' + sValue + '''';
      rs.Open( 'SELECT [' + FieldName + '] FROM [' + TableViewName +
        '] WHERE [' + FieldName + ']=' + sValue,
        Connection, adOpenForwardOnly, adLockReadOnly, adCmdText );
      if RecordsetValid( rs ) then
        m_sKeyFieldID := rs.Fields[ FieldName ].Value;
      rs := nil;
    end;
  end;
end;

procedure TfrmFieldValuesList.SetTableViewName( const Value: string );
begin
  m_sTableViewName := Value;
end;

procedure TfrmFieldValuesList.StartSurf;
var
  tf: TTableField;
  li: TListItem;
begin
  { 开始填充 }

  if Connection <> nil then
  begin
    tf := TTableField.Create;
    tf.Connection := Connection;

    // TODO: 向dvw发出命令,列出信息
    with dvwFieldValuesList do
    begin
      Connection := Self.Connection;

      if m_sCodeTable = EmptyStr then
      begin
        SQLString := 'SELECT DISTINCT  [' + Self.FieldName + '] FROM [' +
          Self.TableViewName + ']';
        ShowKeyField := True;
        KeyFieldName := Self.FieldName;
      end
      else
      begin
        SQLString := 'SELECT * FROM [' + m_sCodeTable + ']';
        ShowKeyField := False;
        KeyFieldName := m_sIDField;
      end;

      StartFillData;

      // TODO: 设置列表头
      tf.FormatColumnHeader( dvwFieldValuesList );

      // TODO: 处理事先选择的IDField
      if m_sKeyFieldID <> EmptyStr then
      begin
        li := GetItemByKeyFieldValue( m_sKeyFieldID );
        if li <> nil then
          with li do
          begin
            MakeVisible( True );
            Selected := True;
            Focused := True;
          end;
      end;
    end;
    FreeAndNil( tf );
  end;
end;

end.

⌨️ 快捷键说明

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