private
m_cnVL: _Connection;
m_rsVL: _Recordset;
public
{ Public declarations }
end;
var
frmMain: TfrmMain;
implementation
{$R *.dfm}
procedure TfrmMain.btnStartClick( Sender: TObject );
var
rsRecordCount: _Recordset;
nRecordCount, n: Integer;
begin
// TODO: 打开数据库和表
ConnMSAccess( m_cnVL, ’testDB.mdb’, EmptyStr );
m_rsVL.Open( ’SELECT * FROM t_StudentInfo’, m_cnVL, adOpenKeyset,
adLockReadOnly, adCmdText );
// TODO: 获取记录条数,可以通过rs.RecordCount获取,但是那样不安全
rsRecordCount := CoRecordset.Create;
rsRecordCount.Open( ’SELECT COUNT(*) FROM t_StudentInfo’, m_cnVL,
adOpenForwardOnly, adLockReadOnly, adCmdText );
nRecordCount := rsRecordCount.Fields[ 0 ].Value;
rsRecordCount := nil;
btnStart.Caption := IntToStr( nRecordCount ) + ’条记录’;
// TODO: 添加列表头
for n := 0 to m_rsVL.Fields.Count - 1 do
with lvwMain.Columns.Add do
begin
Caption := m_rsVL.Fields[ n ].Name;
Width := 130;
end;
// TODO: 设置lvw适合Virtual list
lvwMain.OwnerData := True;
lvwMain.Items.Count := nRecordCount;
end;
procedure TfrmMain.FormCreate( Sender: TObject );
begin
// TODO: 初始化ado对象
m_cnVL := CoConnection.Create;
m_rsVL := CoRecordset.Create;
end;
procedure TfrmMain.FormDestroy( Sender: TObject );
begin
m_cnVL := nil;
m_rsVL := nil;
end;
procedure TfrmMain.lvwMainData( Sender: TObject; Item: TListItem );
var
sDataValue: string;
n, nIdx: Integer;
begin
// TODO: 当VirtualList需要列出数据时,激发这个事件
nIdx := Item.Index;
if ( m_rsVL.State <> adStateClosed ) and ( m_rsVL.RecordCount >= nIdx ) then
begin
// TODO: 将指针激动到当前Item所在行数的记录
m_rsVL.Move( nIdx, AdBookmarkFirst );
// TODO: 显示记录
for n := 0 to lvwMain.Columns.Count - 1 do
begin
sDataValue := VarToStr( m_rsVL.Fields[ n ].Value );
if n = 0 then
Item.Caption := sDataValue
else
Item.SubItems.Add( sDataValue );
end;
end;
end;
end.
责任编辑:小草