发信人: mendy.bbs@bbs.nju.edu.cn (孟迪), 信区: cnprogram
标 题: How to determine the current record number
发信站: nju_bbs (Sun Apr 19 09:20:33 1998)
转信站: Lilac!ustcnews!nju_bbs
发信人: njhe (he要破产), 信区: RAD
标 题: How to determine the current record number
发信站: '3m紫金飞鸿m' (Mon Mar 9 18:10:40 1998) , 站内信件
Product: Delphi
Version: All
Platform: Windows/Win32
Q: "How can I determine the current record number for a dataset?"
A: If the dataset is based upon a Paradox or dBASE table then
the record number can be determined with a couple of calls to
the BDE (as shown below). The BDE doesn't support record
numbering for datasets based upon SQL tables, so if your server
supports record numbering you will need to refer to its
documentation.
The following function is given as part of a whole unit and
takes as its parameter any component derived from TDataset
(i.e. TTable, TQuery, TStoredProc) and returns the current
record number (greater than zero) if it is a Paradox or dBASE
table. Otherwise, the function returns zero.
NOTE: for dBASE tables the record number returned is always
the physical record number. So, if your dataset is a TQuery or
you have a range set on your dataset then the number returned
won't necessarily be relative to the dataset being viewed,
rather it will be based on the record's physical position in
the underlying dBASE table.
uses
DB, DBTables, DbiProcs, DbiTypes, DbiErrs;
function GetRecordNumber(Dataset: TDataset): Longint;
var
CursorProps: CurProps;
RecordProps: RECProps;
begin
{ Return 0 if dataset is not Paradox or dBASE }
Result := 0;
with Dataset do
begin
{ Is the dataset active? }
if State = dsInactive then
raise EDatabaseError.Create('Cannot perform this operation '+
'on a closed dataset');
{ We need to make this call to grab the cursor's iSeqNums }
Check(DbiGetCursorProps(Handle, CursorProps));
{ Synchronize the BDE cursor with the Dataset's cursor }
UpdateCursorPos;
{ Fill RecordProps with the current record's properties }
Check(DbiGetRecord(Handle, dbiNOLOCK, nil, @RecordProps));
{ What kind of dataset are we looking at? }
case CursorProps.iSeqNums of
0: Result := RecordProps.iPhyRecNum; { dBASE }
1: Result := RecordProps.iSeqNum; { Paradox }
end;
end;
end;
end.
--
不惜一切代价,达到修炼的真义。
遇神阻则弑神,遇佛阻则弑佛。
m;31m※ 来源:·紫金飞鸿 bbs.njupt.edu.cn·[FROM: 202.119.236.104]m
--
※ 来源:.南大小百合信息交换站 bbs.nju.edu.cn.[FROM: a507yjh.nju.edu]
Powered by KBS BBS 2.0 (http://dev.kcn.cn)
页面执行时间:2.069毫秒