菜鸟送分:TTable记录定位 table1.editkey;table1.fieldbyname('FieldName').asstring:='aaa';table1.gotokey 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 补充一下,用gotokey要以FieldName建立索引 在表格中搜索记录要在表格中搜索记录有几种方式,我们推荐调用Locate函数和Lookup函数,这两个函数可以在任何表格中基于任何类型的字段来搜索记录,不管表格是否建立了索引。Locate函数用于在表格中搜索一条符合特定条件的记录,如果找到的话,就使该记录成为当前记录。Lookup函数与Locate 函数的区别是,如果找到匹配的记录后,当前记录不变。事实上,Locate函数和Lookup函数并不仅适用于TTable构件,它还适用于其他数据集构件。8.2.1 基于索引中的字段搜索记录除了Lookup函数与Locate 函数外,TTable构件还保留了Goto系列和Find系列的方法,这些方法可以基于索引中的字段搜索匹配的记录,并使找到的记录成为当前记录。在Delphi 4中,索引中的字段称为关键字段。与Locate不同的是,GotoKey、GotoNearest要求表格必须已建立了索引,并且只能基于关键字段搜索记录,而Locate则没有这个要求。下面列出了Goto系列和Find系列中的6种方法:l EditKey使数据集进入dsSetKey状态,程序就可以指定关键字段的值。l FindKey综合了SetKey和GotoKey两个方法。l FindNearest综合了SetKey和GotoNearest两个方法。l GotoKey基于关键字段搜索特定的记录,并使找到的记录成为当前记录。l GotoNearest类似于GotoKey,但只要近似匹配即可(适合于字符串类型的字段)。l SetKey使数据集进入dsSetKey状态,程序就可以指定关键字段的值。与EditKey不同的是,如果SetKey没有调用成功,原先的键值被清掉。其中,GotoKey和FindKey是返回布尔值的函数,如果调用成功,就返回True,并使找到的记录成为当前记录。如果没有找到匹配的记录,这两个函数就返回False。GotoNearestand和FindNearest分别类似于GotoKey和FindKey,不同的是,如果它们没有找到精确匹配的记录,就查找近似匹配的记录。8.2.2 Goto系列使用Goto系列的方法来搜索和定位记录,一般是这么几个步骤:第一步是设置IndexName属性指定要使用的索引(对SQL数据库来说,需要设置IndexFieldNames属性)。当然,如果使用表格本身的主索引,可以不设置这个属性。第二步是打开表格。第三步是调用SetKey使数据集进入dsSetKey状态。第四步是通过Fields属性或FieldByName函数指定关键字段的值。第五步是调用GotoKey或GotoNearest查找匹配的记录。下面的例子实际演示了上述5个步骤:Procedure TSearchDemo.SearchExactClick(Sender: TObject);BeginTable1.SetKey;Table1.Fields[0].AsString := Edit1.Text;If not Table1.GotoKey thenShowMessage('Record not found');End;上述例子演示的是GotoKey,其实GotoNearest也是差不多的,程序示例如下:Table1.SetKey;Table1.Fields[0].AsString := 'Sm';Table1.GotoNearest;8.2.3 Find系列使用Find系列的方法来搜索和定位记录,一般是这么几个步骤:第一步是设置IndexName属性指定要使用的索引(对SQL数据库来说,需要设置IndexFieldNames属性)。当然,如果您使用表格本身的主索引,可以不设置这个属性。第二步是打开表格。第三步是调用FindKey或FindNearest函数查找匹配的记录。这两个方法都要传递一个KeyValues参数,用于指定关键字段的值。其中,FindNearest只适合于字符串类型的字段。8.2.4 KeyExclusive属性和KeyFieldCount属性调用GotoNearest、FindNearest等函数时,如果KeyExclusive属性设为False,匹配的记录将成为当前记录(如果找到的话); 如果KeyExclusive属性设为True,匹配的记录的下一条记录成为当前记录。如果一个索引中有多个字段,而您只想基于其中部分字段进行搜索,就要设置KeyFieldCount属性指定关键字段的个数。例如,假设索引中有三个关键字段,而您只想基于其中第一个字段进行搜索,就把KeyFieldCount属性设为1。如果把KeyFieldCount属性设为2,表示基于前面2个字段进行搜索。如果把KeyFieldCount属性设为3,表示基于前面3个字段进行搜索。但是,如果要基于第一个和第三个字段进行搜索,KeyFieldCount属性无能为力。8.2.5 基于副索引进行搜索如果不想基于主索引而想基于副索引进行搜索,就要通过IndexName属性指定索引名称。在设置IndexName属性之前,首先要关闭表格。程序示例如下:Table1.Close;Table1.IndexName := 'CityIndex';Table1.Open;Table1.SetKey;Table1['City'] := Edit1.Text;Table1.GotoNearest;对于SQL表来说,可以直接用IndexFieldNames属性指定索引中的字段。对于Paradox和dBASE表来说,必须事先建立索引,而且只能基于索引中的字段进行搜索,否则,会触发异常。每次调用SetKey或FindKey函数,总是清除前一次对键值的设置。如果想基于前面设置的键值继续搜索,或者要在原来的基础上加入新的关键字段,就不能调用SetKey或FindKey,而要调用EditKey函数。例如,假设原先设置City和Country两个键值,现在要增加一个Company字段,程序示例如下:Table1.EditKey;Table1[' Company] := Edit2.Text;Table1.GotoNearest; table1.IndexName:=...table1.FindKey(); 各位兄弟多谢了但是我想用移动的方式如:TTable.First;TTable.Next;能否直接移动到某个记录? daifei(daifei) 说得可真详细!!! 如何读取在WORD中的"姓名:" WebBrowser的visible为什么不起作用? 請“大家”給個思路 能用delphi 写出VXD吗,让它能随操作系统启动 SOCKET问题 关于FTP的问题!请求帮助! 我在一个form中有N个DBedit 我应该什么判断如果有一个dbedit的数据改变了,就执行某一段程序? 把汇编用在delphi中有什么好处吗? 对 textfile 文件的操作,清空文件内容,除了 rewrite 外,还有其他函数吗? 关于制作安装文件的,希望大家帮忙。 csdn为什么这么冷清? 如何将两个程序捆绑在一起
table1.FindKey();
能否直接移动到某个记录?