在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
答案 0 :(得分:2)
首先欢迎来到StackOverflow。
您对数据集的工作方式存在一些误解。首先,如果你想知道你发现了多少行,你可以调用RecordCound属性:
procedure TfrmMain.btnRecNumberClick(Sender: TObject);
begin
ShowMessage('We found ' + IntToStr(DBGridSimPipa.DataSource.DataSet.RecordCount) + ' records');
end;
如果您想访问数据集中的第一行,可以拨打First
,但没有Second
或Third
属性,因此您必须使用该属性{{ 1}}
RecordNo
与DataSet.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;