用TQuery控件显示出查询到的记录的序号,1,2,3,4,5...,用计算字段+recno字段,总显示-1,可不可以自己做字段处理呀,调试通过,给100分.

解决方案 »

  1.   

    1、在tquery构件query1中加入一计算字段recnum
    2、在query1的Query1CalcFields事件中加入如下代码即可:
    query1.FieldByName('recno1').asinteger:=query1.RecNo;
      

  2.   

    我用的数据库是ms sql 2000,不支持recno, 返回值都是-1,
      

  3.   

    对不起,以上代码写错了,正确如下
    1、在tquery构件query1中加入一计算字段recnum
    2、在query1的Query1CalcFields事件中加入如下代码即可:
    query1.FieldByName('recnum').asinteger:=query1.RecNo;
      

  4.   

    我用的数据库是ms sql 2000,不支持recno, 返回值都是-1呀,
      

  5.   

    幸好ClientDataset本身支持
    ADODataset->DatasetProvider->ClientDatasetCliendataset增加一个计算字段FRecNo
    在OnCalcFields事件中加入
     Dataset.FieldByName('FRECNO').Value :=DaTaset.RecNo;
    好象没有什么问题呀Delphi 6加MS SQL SERVER 2000测试通过
      

  6.   

    看起来,这个问题不能用Tquery控件来解决了?应该可以通过增加字段来解决的,但我一直试不出来,
      

  7.   

    显示-1,加绝对值  abs(dataset.recno)
      

  8.   

    select identity(1,1) as id,othercolumns from yourtable
      

  9.   

    不知道你用什么数据库,如果是oracle,可以使用rownum
      

  10.   

    sql2000用adoquery吧, 这是我的一段程序,正常使用:
    procedure Tyhjfb.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
      DataCol: Integer; Column: TColumn; State: TGridDrawState);
    begin
    with (Sender as TDBGrid) do
      begin
        if ((State = [gdSelected]) or (State = [gdSelected, gdFocused])) then
        begin
          Canvas.Font.Color := clHighlightText;
          Canvas.Brush.Color := clHighlight;
        end
        else
        begin
          //注意这里, if data.yhjfb.FieldByName('back').asinteger mod 2 <> 0 then
          if data.yhjfb.RecNo  mod 2 <> 0 then  //这样更简单,精确
            Canvas.brush.Color := clAqua//$00F2F2F1
          else
            Canvas.brush.Color :=clwhite;
        end;
      

  11.   

    方法:
      1、不用SQL2000,要用7,2000bug太多!
      2、在存储过程中使用游标进行计数就可以了!
      3、用视图进行查询!
      4、计算字段直接显示不管RecNO,然后在字段的OnGetText里做手脚如何?
      

  12.   

    是不是用TQuery和sql2000,不能实现dbgrid生成序号问题??
    有能实现的,给200分。