📄 unttfield.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 + -