我在
procedure TfrmMain.QueryQuestionAfterScroll(DataSet: TDataSet);
var strQuestID,strQuestValue :string ;
  var DbRecNo,i:integer;
begin
 if fsCreating in FormState then Exit;
   with QueryQuestion do
   begin
        strQuestID := Fieldbyname('QuestID').asstring;
        QueryAnswer.SQL.Clear;
        QueryAnswer.SQL.Add('select * from QuestionAnswer where QuestID='+strQuestID);
        QueryAnswer.Open;
        RadioGroupAnswer.Items.Clear;
        while not QueryAnswer.Eof  do
            begin
            strQuestValue:= QueryAnswer.FieldByName('ID').AsString+'/'+QueryAnswer.FieldByName('Memo').AsString;
            RadioGroupAnswer.Items.Add(strQuestValue);
            QueryAnswer.next;
            end;
        RadioGroupAnswer.Items.Add('不选');        DbRecNo:=DBGridQuestion.DataSource.DataSet.RecNo;            for i:=Low(RadioRecNO) to High(RadioRecNO) do
            begin
            if  RadioRecNO[DbRecNo-1]<>'' then
            begin
            RadioGroupAnswer.ItemIndex:=strtoint(RadioRecNO[DbRecNo-1]);
            end
            end   end
end;
里面用DbRecNo:=DBGridQuestion.DataSource.DataSet.RecNo;为什么得不到DBGridQuestion的当前的纪录号?调试发现这个值等于-1.
请大家帮帮忙

解决方案 »

  1.   

    你的DataSet现在是eof那当然是-1了
      

  2.   

    你的DBGridQuestion的DataSet和QueryAnswer不是一个?
      

  3.   

    在这里我主要就是想得到在datagrid中点击时它的记录号,请大家指点一二。
      

  4.   

    把DbRecNo:=DBGridQuestion.DataSource.DataSet.RecNo;
    放到
    strQuestID := Fieldbyname('QuestID').asstring;
    的前面看看
      

  5.   

    DBGridQuestion的当前的纪录号?调试发现这个值等于-1.说明数据集为空。
    请确保数据已打开
      

  6.   

    procedure TfrmMain.FormShow(Sender: TObject);
    var i:Integer;
    begin
        QueryQuestion.Close;
        QueryQuestion.Open;
        SetLength(arrayfield,QueryQuestion.RecordCount);
        SetLength(arrayvalue,QueryQuestion.RecordCount);
        SetLength(arrayerrorvalue,QueryQuestion.RecordCount);
        SetLength(RadioRecNO,QueryQuestion.RecordCount);    DBGridQuestion.DataSource.DataSet.RecNo:=1;   while not QueryQuestion.Eof do        begin
            for i := Low(arrayfield) to High(arrayfield) do
                begin
                arrayvalue[i] := '0';
                RadioRecNO[i] := '';
                arrayfield[i] :=QueryQuestion.FieldByName('ErrorAttri').AsString;
                arrayerrorvalue[i]:=QueryQuestion.FieldByName('ErrorValue').AsString;
                showmessage(arrayfield[i]);
                QueryQuestion.Next;
                end;
           end;end;在Fromshow中已经打开了QueryQuestion
      

  7.   

    在delphi的帮助文件中有这么一句话
    As implemented in TDataSet, the value of RecNo is always -1. 不知道是什么意思
      

  8.   

    procedure TForm1.DataSet1CalcFields(DataSet: TDataSet);
    begin
        DataSet1NO.Value:=SQLClientDataSet1.RecNo;
    end
    ;
    DataSet1NO是在daset里面添加的一个字段,双击就可以dataset就可以添加
      

  9.   

    As implemented in TDataSet, the value of RecNo is always -1. Ordinarily an application does not access RecNo at the TDataSet level. Instead a re-implemented RecNo property in a descendant class such as TTable is accessed. RecNo provides a fallback property for derived datasets that do not support record numbers.
    ================================================================
    你说的是这个吗?它是说TDataSet对象的RecNo属性值总等于-1,只有它的派生类重新实现后,才有正确的属性值。你把
    with QueryQuestion do
    改为:
    with TTable(QueryQuestion) do就可以了,当然我举的是一个例子,你如果使用TADOQurey,就转化成相应类型。