如何使用DBGrid从第3列的第1行,第2行,第3行获取值?

时间:2015-03-14 03:17:59

标签: mysql delphi pascal dbgrid

在Delphi中,我有一个组件:

dbgridsimpipa: Tdbgrid,
DSpipa: Tdatasource,
Qpipa: Tquery,
btnViewdata: tbutton
btnRecNumber: tbutton.

我用这段代码搜索表格:

procedure TfrmMain.btnViewDataClick(Sender: TObject);
var
  st,st4,y0,y1,y2: string;
begin
  st:='5';
  grid2.Enabled := True;
  st5 := 'SELECT tblRekapROT.CY2IDR, tblRekapROT.Produk, tblRekapROT.Total,         tblRekapROT.ARRWL, tblRekapROT.ARBYL, tblRekapROT.Status '+
  'FROM tblRekapROT '+
  'WHERE ((tblRekapROT.Status Like  ''%'+st+'%''))';
   Qpipa.Close;
   Qpipa.SQL.Clear;
   Qpipa.SQL.Add(st5);
   Qpipa.Open;
   label22.Caption:= dbgridsimpipa.Fields[0].AsString;
end;

然后我用DBGrid计算记录:

procedure TfrmMain.btnRecNumberClick(Sender: TObject);
var
  vCount: Integer;
  vBookmark: TBookmark;
begin
  vCount := 0;

  with DBGridSimPipa.DataSource.DataSet do
  begin    
    vBookmark := GetBookmark;
    First;  // move to the first record

    while not EoF do
    begin
      vCount := vCount + 1;      
      Next;                   // move to next record
    end;

    GotoBookmark(vBookmark);
    FreeBookmark(vBookmark);
  end;  
  ShowMessage('We found ' + IntToStr(vCount) + ' records');
end;

如何在一列中的DBGrid中获取行的值?也许是这样的:

//label1.Caption:= dbgridsimpipa.DataSource.DataSet.First          //record vtotal row 1

   //label2.Caption:= dbgridsimpipa.DataSource.DataSet.second         //record vtotal row 2
   //label3.Caption:= dbgridsimpipa.DataSource.DataSet.third           //record vtotal row 3

This a screenshot of my program.

1 个答案:

答案 0 :(得分:2)

首先欢迎来到StackOverflow。

您对数据集的工作方式存在一些误解。首先,如果你想知道你发现了多少行,你可以调用RecordCound属性:

procedure TfrmMain.btnRecNumberClick(Sender: TObject);
begin      
  ShowMessage('We found ' + IntToStr(DBGridSimPipa.DataSource.DataSet.RecordCount) + ' records');
end;

如果您想访问数据集中的第一行,可以拨打First,但没有SecondThird属性,因此您必须使用该属性{{ 1}}

RecordNoDataSet.First

相同

通过致电Dataset.RecordNo := 0等获得第二行

然后你想将一行的内容放入标签中。没有这样做的构建,所以你必须为此编写自己的函数。

Dataset.RecordNo := 1

最后我们只需要调用新创建的函数:

function DataRowToString(const aDataset: TDataSet; aRecNo: Integer): String;
var
  i: Integer;
begin
  aDataset.RecNo := aRecNo;
  Result := '';
  for i := 0 to aDataset.FieldCount - 1 do
    Result := Result + aDataset.Fields[i].AsString + ' ';

  Result := Trim(Result);
end;