我来回答第一个问题。我有两个解决方案:
  (1)如果单纯要显示记录的行号,那么最简单的方法就是在数据库中的数据表里设置自动编号的字段,那么当你每次往数据表里添加记录时,数据库将自动产生一个编号来记录该记录的编号的,该编号即说明该记录的行号了。但是,这有一个缺点,就是自动编号是按照自然数递增的,即使你将其中的记录删除了,其他记录的编号不会刷新的,还是保持原来的编号的,也就是被删除记录的编号将成为缺号的。
  (2)实际上,第二种方法克服对第一种方法的不足的。原始数据表里不要建立自动编号的字段,而是将你要的数据选出来,然后将这些数据Insert到一个临时的数据表中,该临时表里面要求有自动编号的字段,这样在将这里的数据显示的界面上,也就是在TDbGrid控件里,就会有各行对应的行号了,当然每次Insert之前,必须将临时数据表里的数据全部清空(形如:Delete from TempTableName)。
   如果你采用TF1Book控件,那我将有第三种解决方案。就是采用TQuery控件将你要显示的数据先选出来,然后采用如下方法将数据显示到TF1Book的表格中:
   ...
   with Query1 do
   begin
     ...
     Close();
     Sql.Clear();
     Sql.Add(SqlStr);{SqlStr:String就是你要查询的Sql语句}
     Open();
     first();
     iK:=1;{iK用来表示当前记录的行号}
     while not eof do
     begin
        for n=-1 to fieldCount-1 do 
        beign
            if n=-1 then F1Book1.TextRC[iK,1]:=intostr(iK); 
            else F1book1.TextRC[iK,n]:=fields.fields[n].asstring;
        end;
        iK:=iK+1; 
     end;
   ...
   end;
   如果别人有更好的解决方法,请你通知我。谢谢!