DBgrid只能读当前行的数据,好像没有直接的办法读指定某行某列的数据,不过可以变通一下,先用ADO把记录移到指定行的记录,然后再读出指定列的数值。
ADORecNo := n; //第n行s := DBGrid1Fields[m]DisplayText; //第m列元素
var
LStrList:TStrings;
begin
LStrList := TStringListCreate;
LStrListDelimiter := '$';
LStrListDelimitedText :='断裂拉伸强度$撕裂强度$扯断伸长率$粘接剥离强度$不透水性$低温弯折';
{LStrList里方的就是
断裂拉伸强度
撕裂强度
扯断伸长率
粘接剥离强
不透水性
低温弯折}
end;
如果,你一定要在DBGrid中比对,那就必须对每一个表格进行比对。其实,我认为最好的方式是在使用SQL读取数据后通过后续比对为好,不一定要显示在表格上。我实在想不出使用表格显示后再进行比对的优点和必要性。实在是想要用你想到的方法比对,你可以从表一或表二中一个一个数据获取再进行比对。
比较麻烦,目前想到一个笨办法。
{
显示DBGrid中鼠标指向的记录号
by 宋银海
}
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Grids, DBGrids, DB, DBTables;
type
TForm1 = class(TForm)
Table1: TTable;
DataSource1: TDataSource;
DBGrid1: TDBGrid;
Button1: TButton;
procedure Button1Click(Sender: TObject);
procedure DBGrid1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
procedure DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
DataCol: Integer; Column: TColumn; State: TGridDrawState);
private
{ Private declarations }
FDBRow:Integer;
FDBCurrentRec:Integer;
public
{ Public declarations }
published
property DBRow: Integer read FDBRow write FDBRow;
property DBCurrentRec: Integer read FDBCurrentRec write FDBCurrentRec;
end;
var
Form1: TForm1;
implementation
{$R dfm}
procedure TForm1Button1Click(Sender: TObject);
begin
if not Table1Active then
Table1Open;
end;
procedure TForm1DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
DataCol: Integer; Column: TColumn; State: TGridDrawState);
begin
DBRow:=(RectBottom-DBGrid1Top+1) div (RectBottom-RectTop+1);
DBCurrentRec:=DBGrid1DataSourceDataSetRecNo;
end;
procedure TForm1DBGrid1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
var
pt:TGridCoord;
begin
pt:=(Sender as TDBGrid)MouseCoord(x,y); //获取DBGrid中的坐标
Caption:='鼠标指向记录号是 '+IntTostr(DBCurrentRec+ptY-DBRow);
end;
end
很简单的,你在DBGrid的列单击事件中,写查询代码就行了,取数据集组件的当前字段值,(你要作查询依据的字段),其原理是:当数据感知组件DBGrid和数据集组件连接着的时候,你在DBGrid中移动光标,数据集组件的指针也在跟着移动这样你就可以直接取数据集组件的字段值了
procedure
GetSelectedRecord(DataSet
:
TDataSet;
FieldName
:
String;BookmarkList
:
TBookmarkList;
Strings
:
TStrings);//这个过程中的参数分别为:数据表、字段名称、书签、用来保存所选字段内容的//字符串(用于将内容传递到另一个单独窗体中的TLIST控件中)varI:
Integer;bm
:
TBookMark;beginStringsClear;with
Dataset
do
beginDisableControls;bm
GetBookMark;try//每个选择的记录都有一个书签标志,这就为处理它们提供了条件for
I
0
to
BookmarkListCount
-
1
do
beginBookmark
BookmarkList
;StringsAdd(DataSetFindField(fieldname)AsString);end;finallyGotoBookMark(bm);FreeBookMark(bm);EnableControls;end;end;end;调用举例:GetSelectedRecord(Table1,
'NAME',
DBGrid1SelectedRows,
Form2ListBox1Items
DBGrid1DataSourceDataSetPrevious;
应该可以直接找到上一条记录吧
不要直接 *** 作数据敏感部件,你可以使用ClientDataSet,把 *** 作跟数据库隔离出来
只有按特定的按钮才更新数据库,不然,一量出错,而你不小心退出,就有你哭的啊
以上就是关于delphi怎样取出DBgrid固定第几行第几列单元格中的数据,放到设定的变量中全部的内容,包括:delphi怎样取出DBgrid固定第几行第几列单元格中的数据,放到设定的变量中、delphi DBGrid 获取字段里的值进行循环截取并取值 怎么实现的啊!、我用DELPHI的两个DBGrid从数据库里获取了数据,我想对比着两个表做自动的批量性的改动,应该怎么实现等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)