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