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

📄 unttfield.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 untTField;

interface

uses
  SysUtils,
  Variants,
  ADODB_TLB,
  JCAMTableView,
  JSDBListView,
  JCAMConsts;

const
  TN_FIELD: string = 't_Field';
  PN_FIELDINTABLE: string = 'sp_FieldInTable';
  FN_FIELDID: string = 'Field_ID';
  FN_FIELDCHS: string = 'Field_Chs';
  FN_FIELDNAME: string = 'Field_Name';
  FN_LOCKED: string = 'Locked';
  FN_ALLOWNULL: string = 'AllowNull';
  FN_ALLOWREPEATED: string = 'AllowRepeated';
  FN_ROWHEIGHT: string = 'RowHeight';
  FN_HINT: string = 'Hint';
  FN_COLUMNWIDTH: string = 'ColumnWidth';
  FN_MAXLENGTH: string = 'MaxLength';
  FN_AUTOSIZE: string = 'AutoSize';
  FN_RCODETABLE: string = 'R_CodeTable';
  FN_RIDFROMCODE: string = 'R_IDFromCode';
  FN_RNAMEFROMCODE: string = 'R_NameFromCode';

type
  PFieldProp = ^TFieldProp;
  TFieldProp = record
    FieldName: string;
    FieldChs: string;
    Locked: Boolean;
    AllowNull: Boolean;
    AllowRepeated: Boolean;
    RowHeight: Integer;
    Hint: string;
    ColumnWidth: Integer;
    AutoSize: Boolean;
    CodeTable: string;
    IDFromCode: string;
    NameFromCode: string;
    FieldType: DataTypeEnum;
    MaxLength: Integer;
  end;

  TTableField = class( TCustomTableView )
  private
    m_rsTField: _Recordset;
    m_sFieldName: string;
    m_sFieldChs: string;
    m_sHint: string;
    m_sCodeTable: string;
    m_sIDFromCode: string;
    m_sNameFromCode: string;
    m_bLocked: Boolean;
    m_bAllowNull: Boolean;
    m_bAutoSize: Boolean;
    m_bAllowRepeated: Boolean;
    m_nFieldID: Integer;
    m_nRowHeight: Integer;
    m_nColumnWidth: Integer;
    m_nMaxLength: Integer;
    procedure SetAllowRepeated( const Value: Boolean );
    procedure SetCodeTable( const Value: string );
    procedure SetIDFromCode( const Value: string );
    procedure SetNameFromCode( const Value: string );
    procedure SetFieldChs( const Value: string );
    procedure SetFieldName( const Value: string );
    procedure SetFieldID( const Value: Integer );
  protected
    procedure GetAllFieldsValue; override;
  public
    constructor Create; override;
    destructor Destroy; override;
    property Connection;
    property FieldID: Integer
      read m_nFieldID
      write SetFieldID
      default -1;
    property FieldName: string
      read m_sFieldName
      write SetFieldName;
    property FieldChs: string
      read m_sFieldChs
      write SetFieldChs;
    property Locked: Boolean
      read m_bLocked;
    property AllowNull: Boolean
      read m_bAllowNull;
    property RowHeight: Integer
      read m_nRowHeight;
    property Hint: string
      read m_sHint;
    property ColumnWidth: Integer
      read m_nColumnWidth;
    property MaxLength: Integer
      read m_nMaxLength;
    property AutoSize: Boolean
      read m_bAutoSize;
    property CodeTable: string
      read m_sCodeTable
      write SetCodeTable;
    property IDFromCode: string
      read m_sIDFromCode
      write SetIDFromCode;
    property NameFromCode: string
      read m_sNameFromCode
      write SetNameFromCode;
    property AllowRepeated: Boolean
      read m_bAllowRepeated
      write SetAllowRepeated;
    function FieldInTable( const sFieldName, sTableName: string ): Boolean;
    procedure FormatColumnHeader( DBListView: TJSDBListView );
  end;

implementation

uses ComCtrls;

{ TTableField }

constructor TTableField.Create;
begin
  inherited;

  m_rsTField := CoRecordset.Create;
  m_nFieldID := -1;
end;

destructor TTableField.Destroy;
begin
  m_rsTField := nil;

  inherited;
end;

function TTableField.FieldInTable( const sFieldName, sTableName: string ):
  Boolean;
const
  PVSTR_FIELDNAME: string = 'FieldName';
  PVSTR_TABLENAME: string = 'TableName';
  PVSTR_ISINTABLE: string = 'IsInTable';
var
  par: _Parameter;
  cmd: _Command;
begin
  { 判断字段是否在表内 }

  //param := CoParameter.Create;
  cmd := CoCommand.Create;
  cmd.Set_ActiveConnection( Connection );
  cmd.CommandText := PN_FIELDINTABLE;
  cmd.CommandType := adCmdStoredProc;
  par := cmd.CreateParameter( PVSTR_RETURN, adBoolean, adParamReturnValue, 1,
    EmptyParam );
  cmd.Parameters.Append( par );
  par := cmd.CreateParameter( PVSTR_FIELDNAME, adVarChar, adParamInput, 50,
    sFieldName );
  cmd.Parameters.Append( par );
  par := cmd.CreateParameter( PVSTR_TABLENAME, adVarChar, adParamInput, 50,
    sTableName );
  cmd.Parameters.Append( par );
  par := cmd.CreateParameter( PVSTR_ISINTABLE, adBoolean, adParamOutput, 1,
    EmptyParam );
  cmd.Parameters.Append( par );
  cmd.Execute( EmptyParam, EmptyParam, -1 );
  Result := Boolean( cmd.Parameters[ PVSTR_ISINTABLE ].Value );

  par := nil;
  cmd := nil;
end;

procedure TTableField.FormatColumnHeader( DBListView: TJSDBListView );
var
  //pfp: PFieldProp;
  n: Integer;
begin
  { 格式化列表头 }

  if ( DBListView <> nil ) and ( Connection <> nil ) then
    with DBListView do
      for n := 0 to Columns.Count - 1 do
        with Column[ n ] do
        begin
          //New( pfp );
          Self.FieldName := Caption;
          Caption := FieldChs;
          AutoSize := AutoSize;
          Width := ColumnWidth;
          //Tag := Integer( pfp );

          (*with pfp^ do
          begin
            FieldName := Self.FieldName;
            FieldChs := Self.FieldChs;
            Locked := Self.Locked;
            AllowNull := Self.AllowNull;
            AllowRepeated := Self.AllowRepeated;
            RowHeight := Self.RowHeight;
            Hint := Self.Hint;
            ColumnWidth := Self.ColumnWidth;
            AutoSize := Self.AutoSize;
            CodeTable := Self.CodeTable;
            IDFromCode := Self.IDFromCode;
            NameFromCode := Self.NameFromCode;
            MaxLength := Self.MaxLength;
          end; *)
        end;
end;

procedure TTableField.GetAllFieldsValue;
begin
  inherited;
  { 获取所有字段的值 }

  try
    if m_rsTField.EOF then
    begin
      m_nFieldID := -1;
      m_sFieldName := EmptyStr;
      m_sFieldChs := EmptyStr;
      m_bLocked := False;
      m_bAllowNull := True;
      m_bAllowRepeated := True;
      m_nRowHeight := 1;
      m_sHint := EmptyStr;
      m_nColumnWidth := 80;
      m_bAutoSize := False;
      m_sCodeTable := EmptyStr;
      m_sIDFromCode := EmptyStr;
      m_sNameFromCode := EmptyStr;
    end
    else
    begin
      m_nFieldID := Integer( m_rsTField.Fields[ FN_FIELDID ].Value );
      m_sFieldName := VarToStr( m_rsTField.Fields[ FN_FIELDNAME ].Value );
      m_sFieldChs := VarToStr( m_rsTField.Fields[ FN_FIELDCHS ].Value );
      m_bLocked := Boolean( m_rsTField.Fields[ FN_LOCKED ].Value );
      m_bAllowNull := Boolean( m_rsTField.Fields[ FN_ALLOWNULL ].Value );
      m_bAllowRepeated := Boolean( m_rsTField.Fields[ FN_ALLOWREPEATED ].Value
        );
      m_nRowHeight := Integer( m_rsTField.Fields[ FN_ROWHEIGHT ].Value );
      m_sHint := VarToStr( m_rsTField.Fields[ FN_HINT ].Value );
      m_nColumnWidth := Integer( m_rsTField.Fields[ FN_COLUMNWIDTH ].Value );
      m_nMaxLength := Integer( m_rsTField.Fields[ FN_MAXLENGTH ].Value );
      m_bAutoSize := Boolean( m_rsTField.Fields[ FN_AUTOSIZE ].Value );
      m_sCodeTable := VarToStr( m_rsTField.Fields[ FN_RCODETABLE ].Value );
      m_sIDFromCode := VarToStr( m_rsTField.Fields[ FN_RIDFROMCODE ].Value );
      m_sNameFromCode := VarToStr( m_rsTField.Fields[ FN_RNAMEFROMCODE ].Value
        );
    end;
  except

  end;
end;

procedure TTableField.SetAllowRepeated( const Value: Boolean );
begin
  m_bAllowRepeated := Value;
end;

procedure TTableField.SetCodeTable( const Value: string );
begin
  if m_rsTField.State <> adStateClosed then
    m_rsTField.Close;
  m_rsTField.Open( 'SELECT * FROM [' + TN_FIELD + '] WHERE [' + FN_RCODETABLE +
    ']=''' + Value + '''', Connection, adOpenForwardOnly, adLockReadOnly,
    adCmdText );
  GetAllFieldsValue;
end;

procedure TTableField.SetFieldChs( const Value: string );
begin
  if m_rsTField.State <> adStateClosed then
    m_rsTField.Close;
  m_rsTField.Open( 'SELECT * FROM [' + TN_FIELD + '] WHERE [' + FN_FIELDCHS +
    ']=''' + Value + '''', Connection, adOpenForwardOnly, adLockReadOnly,
    adCmdText );
  GetAllFieldsValue;
end;

procedure TTableField.SetFieldID( const Value: Integer );
begin
  if m_rsTField.State <> adStateClosed then
    m_rsTField.Close;
  m_rsTField.Open( 'SELECT * FROM [' + TN_FIELD + '] WHERE [' + FN_FIELDID + ']='
    + IntToStr( Value ), Connection, adOpenForwardOnly, adLockReadOnly,
    adCmdText );
  GetAllFieldsValue;
end;

procedure TTableField.SetFieldName( const Value: string );
begin
  if m_rsTField.State <> adStateClosed then
    m_rsTField.Close;
  m_rsTField.Open( 'SELECT * FROM [' + TN_FIELD + '] WHERE [' + FN_FIELDNAME +
    ']=''' + Value + '''', Connection, adOpenForwardOnly, adLockReadOnly,
    adCmdText );
  GetAllFieldsValue;
end;

procedure TTableField.SetIDFromCode( const Value: string );
begin
  if m_rsTField.State <> adStateClosed then
    m_rsTField.Close;
  m_rsTField.Open( 'SELECT * FROM [' + TN_FIELD + '] WHERE [' + FN_RIDFROMCODE +
    ']=''' + Value + '''', Connection, adOpenForwardOnly, adLockReadOnly,
    adCmdText );
  GetAllFieldsValue;
end;

procedure TTableField.SetNameFromCode( const Value: string );
begin
  if m_rsTField.State <> adStateClosed then
    m_rsTField.Close;
  m_rsTField.Open( 'SELECT * FROM [' + TN_FIELD + '] WHERE [' + FN_RNAMEFROMCODE
    +
    ']=''' + Value + '''', Connection, adOpenForwardOnly, adLockReadOnly,
    adCmdText );
  GetAllFieldsValue;
end;

end.

⌨️ 快捷键说明

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