mysql - 如何使用 DBGrid 从第 1 行、第 2 行、第 3 行第 3 列中获取值?

标签 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.

最佳答案

首先欢迎来到 StackOverflow。

您对数据集的工作原理存在一些误解。首先,如果您想知道找到了多少行,您可以调用 RecordCound 属性:

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

如果您想访问数据集中的第一行,您可以调用 First 但没有 SecondThird 属性,因此您可以'必须使用属性RecordNo

DataSet.FirstDataset.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;

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

label1.Caption:= DataRowToString(dbgridsimpipa.DataSource.DataSet, 0); //record vtotal row 1
label2.Caption:= DataRowToString(dbgridsimpipa.DataSource.DataSet, 1); //record vtotal row 2
label3.Caption:= DataRowToString(dbgridsimpipa.DataSource.DataSet, 2);//record vtotal row 3

关于mysql - 如何使用 DBGrid 从第 1 行、第 2 行、第 3 行第 3 列中获取值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29045056/

相关文章:

delphi - 使用 Gold Parser 解析项目和包文件 - 需要 'IdList' 的帮助

mysql - 为什么 CASTing VarChar 到 DateTime 会导致 null?

mysql - 如何计算 SQL 中的平均日期?

java - JPA Hibernate 将类内类的字段映射到同一个表

delphi - Delphi (Win32) 中的静态类

delphi - TXMLNodeList 节点名称 #text

python - Pascal/Python 分解程序

arrays - 帕斯卡 'Split' 函数

php - 如何在php中将 session 从用户名更改为id?

delphi - FastMM 无法检测内存泄漏