如何将查询的多个记录进行编号(1,2,...),并说明有几个记录,现指的是第几个记录(100分)

  • 主题发起人 主题发起人 billxm
  • 开始时间 开始时间
B

billxm

Unregistered / Unconfirmed
GUEST, unregistred user!
如何将查询的多个记录进行编号(1,2,...),并说明有几个记录,现指的是第几个记录。在这个程序中,每个记录都含有图形,用image来显示的。
 
就我个人理解,
用query查询出来后,返回一个数据集,
用recno可以得到当前记录号,recordcount返回记录数
好像不需要编号吧
 
支持lhxu的观点,用query查询recno表示查询结果集当前记录号,recordcount表示查询结果集记录数.
 
var
TotalRec, CurrentRec: Integer;
begin
TotalRec := Table1.RecordCount; // Table1: 你的数据表名称
CurrentRec := Table1.RecNo;

//以下语句用于得知以上数值:

MessageBox(0,PChar(Format('总共有%d条记录',[TotalRec])+
Format('当前是第%d条',[CurrentRec])),'',
MB_ICONINFOMATION+MB_OK);
end;
 
{DEPHI5下调试通过}

var a,b:integer;
var c,d:string;
begin
table1.databasename:=THE DATABASENAME;
table1.tabletype:=THE TABLETYPE;
table1.tablename:=THE TABLENAME;
a:=table1.recordcount;
b:=table1.recno;
c:='共有'+inttostr(a)+'条记录';
d:='当前指向第'+inttostr(b)+'条记录';
c:=c+d;
showmessage(c);
end;
 
我有一个办法:
1. 对Table 控件 按鼠标右键,加入字段。同时新加入一个计算字段 RecoNo
2.定义一个变量,ReNo
3.在表的BeforOpen 事件中初始化 ReNo:=0;
4.在表的OnCalcField 事件中 计算RecNo 的值
Begin
ReNo:=ReNo+1;
Table1ReNo.Values:=ReNo;
end;

 
用recno,recordcount。
不过recno有局限,用Paradox肯定没问题,SQL server,Access的数据库就不能使用recno,
返回结果都是-1。

to dblin:
你的方法有问题,当数据集中的数据滚动时就会触发OnCalcField ,结果是计算字段 RecoNo不断变大。
 
表中不单只有一个图形字段吧,设有一个关键字段为ID,
select count(ID) From Table Where ... 来取得总记录数
这样比select * from ... 的recordcount要快得多(小数据没有
区别,大数据[十万以上])就立竿见影),因为图形字段为Blob型,
若BDE中Blob size太小,就会出问题了。
然后用select ID from ...来把结果依次扔到动态数组中去,以后
就判断那个ID在数组中位置既可.
 
你可以把查询的结果到一个临时表中,这个临时表中有一个自动增加字段
不就行了
 
教你一个办法, 用TClientDateSet 连接数据库, 就可以使用
RecordCount 和 RecordNo; (无论你使用和种数据库!!)
 
lhxu的说法只对了一半.用query查询出来后,返回一个数据集,
recordcount可以返回记录数.但是,recno可能得不到当前的记
录号,这取决于索引字段与查询条件的关系.
 
d5中增加计算字段,在ongettext中写dblin的东东.
 
SeaSky,笨笨了说的对。否则当数据库为sql server 时recno=-1,可用TClientDateSet
 
多人接受答案了。
 
后退
顶部