delphi如何用locate实现模糊查询(满意加分)

作者&投稿:月皆 (若有异议请与网页底部的电邮联系)
delphi如何用locate实现模糊查询(满意加分)~

以前我也碰过这个问题,但使用Locate没有找到答案

后来找了一个变通的方法,稍微麻烦一些,但也能达到要求

先认识一下TDataset的RecNo属性
DataSet.RecNo
RecNO其实就是行号,标识了某一行数据,如DataSet.RecNo := 1
这个操作可以使指针指向第一行,所以:如果你能将符合你要求的数据行号保存下来,意味着你能做到如你所想的一个个查询。

你所需要做的:
1.定义一个行号列表
RecNoList: TStringList;

2.对DataSet进行循环得到标识列表
RecNoList.Clear;
DataSet.First;
DataSet.DisableControls; //加这个语句可以明显提高循环效率,原因请自己查
While Not DataSet.Eof do
begin
if DataSet.FieldByName('tName').AsString = EdtName.Text then
//我这里查的是同名的人,你可以根据自己的要求修改这里实现你需要的模糊查询
begin
RecNoList.Add(IntToStr(DataSet.RecNo));
end;
DataSet.Next;
end;
DataSet.EnableControls;

3.有了列表,就可以方便的指向你的查询结果。这里面的控制你就自己考虑下吧(需要一个标签保存你当前所指向的RecNoList.Index,以便再次点击按钮可以指向下一个)。

4.如果你有Locate的解决方法,请帖出来。

'select id,name,nation from 学生信息'+
' where id LIKE ''%'+studentNo+'%''';
肯定可以的,你在SQL中测试下就知道了!

以前我也碰过这个问题,但使用Locate没有找到答案

后来找了一个变通的方法,稍微麻烦一些,但也能达到要求

先认识一下TDataset的RecNo属性
DataSet.RecNo
RecNO其实就是行号,标识了某一行数据,如DataSet.RecNo := 1
这个操作可以使指针指向第一行,所以:如果你能将符合你要求的数据行号保存下来,意味着你能做到如你所想的一个个查询。

你所需要做的:
1.定义一个行号列表
RecNoList: TStringList;

2.对DataSet进行循环得到标识列表
RecNoList.Clear;
DataSet.First;
DataSet.DisableControls; //加这个语句可以明显提高循环效率,原因请自己查
While Not DataSet.Eof do
begin
if DataSet.FieldByName('tName').AsString = EdtName.Text then
//我这里查的是同名的人,你可以根据自己的要求修改这里实现你需要的模糊查询
begin
RecNoList.Add(IntToStr(DataSet.RecNo));
end;
DataSet.Next;
end;
DataSet.EnableControls;

3.有了列表,就可以方便的指向你的查询结果。这里面的控制你就自己考虑下吧(需要一个标签保存你当前所指向的RecNoList.Index,以便再次点击按钮可以指向下一个)。

4.如果你有Locate的解决方法,请帖出来。

分三步:
1,确定使用那个表
ADOQuery1.Close;
ADOQuery1.SQL.Text := 'select * from your_table';
ADOQuery1.Open;
2,确定locate那个字段列表
ADOQuery1.Locate('your_cloumns', 'your_data', []);
Edit1.Text := ADOQuery1.FieldValues['your_cloumns'];
3,点击继续
两种方法
A,直接NEXT
ADOQuery1.Next;
Edit1.Text := ADOQuery1.FieldValues['your_cloumns'];
B,RecNo+1
ADOQuery1.RecNo := ADOQuery1.RecNo + 1;
Edit1.Text := ADOQuery1.FieldValues['your_cloumns'];

上边三个步骤,顺序不能错。

完全符合你的要求。

思路应该是这样的,将qry里存你模糊查询后的数据集,然后遍历qry在edit上显示,而不是先locate,明白?


期刊投稿边框如何设置?
在D elphi、Visual、Basic、Visual、FoxPro、Pascal等语言中,大小写所表示的意义是相同的,因此,在书写时采用单词首字母大写的约定,如: Write、If、Then、FileOpen、FileClose等。对控件、构件及普通单词等还应注意拼写正确,不要出现缺(或多)字母、排序混乱、大小写不规范的现象,能在屏幕图中找到的严格按图中英文...

怎样用电子邮件向杂志社投稿?
在D elphi、Visual、Basic、Visual、FoxPro、Pascal等语言中,大小写所表示的意义是相同的,因此,在书写时采用单词首字母大写的约定,如: Write、If、Then、FileOpen、FileClose等。 对控件、构件及普通单词等还应注意拼写正确,不要出现缺(或多)字母、排序混乱、大小写不规范的现象,能在屏幕图中找到的严格按图中英文...

桥西区19631744056: delphi如何用locate实现模糊查询(满意加分) -
微隶阿思: 以前我也碰过这个问题,但使用Locate没有找到答案 后来找了一个变通的方法,稍微麻烦一些,但也能达到要求 先认识一下TDataset的RecNo属性 DataSet.RecNo RecNO其实就是行号,标识了某一行数据,如DataSet.RecNo := 1 这个操作可以...

桥西区19631744056: delphi7 Locate 该如何使用? -
微隶阿思: Delphi syntax:function Locate(const KeyFields: String; const KeyValues: Variant; Options: TLocateOptions): Boolean; ex:Locate('Company;Contact;Phone', VarArrayOf(['Sight Diver', 'P', '408-431-1000']), [loPartialKey]); type TLocateOption = (loCaseInsensitive, loPartialKey);

桥西区19631744056: delphi adotable如何用locate查询? -
微隶阿思: adotable1.locate('field1',var1,[])Locate('Company;Contact;Phone', VarArrayOf(['Sight Diver', 'P', '408-431-1000']), [loPartialKey]);

桥西区19631744056: delphi 如何完成这种功能?
微隶阿思: adoquery1.locate('字段1;字段2',vararryof([值1,值2]), )

桥西区19631744056: Delphi中代码:Locate()问题 -
微隶阿思: 我猜你估计是用的TADOQuery或者是TADODataSet的Locate方法,这个方法是有TDataSet集成而来的,所以如果你要使用lopartialkey,必须在uses中引用DB这个单元.给一个例子:Locate('Company;Contact;Phone', VarArrayOf(['Sight Diver', '...

桥西区19631744056: delphi 各位高手:在Delphi中如何用TLocateOptions 这函
微隶阿思: locate('ddddd',yourfieldname,[loPartialKey,loCaseInsensitive])

桥西区19631744056: 请问有关delphi中ADO控件的locate方法?
微隶阿思: 我碰到了一个难题,数据库是oracle8.05,我用adotable控件,用locate办法萌芽,当所查的字段是字符时一切问题都没有,但当所查的字段是整形时,如不雅结不雅是true,则没问题,但如不雅是false,则会显示未知缺点,请问这是为什么?如何清除?

桥西区19631744056: 如何实现:locate:
微隶阿思: with ADOTable1 do Locate('Company;Contact;Phone', VarArrayOf(['Sight Diver', 'P', '408-431-1000']), [loPartialKey]); 体系提示说:没有定义 loPartialKey 是怎么一回工作?高手协助

桥西区19631744056: Delphi在Table中查找,find和locate有什么不同,为什么loca
微隶阿思: if DataModule1.FSJHTable.Locate('ZYDH;SFDM;KLDM',VarArrayOf([Copy(ComboBox1.Text,1,2),DataModule1.TJSTable['SFDM'],DataModule1.TJSTable['KLDM']]),[]) then if DataModule1.FSJHTable['SYRS']=0 then begin ShowMessage('该专业已录满!'); end Abort; end; else begin begin ShowMessage('无此专业!'); Abort; end;

桥西区19631744056: DELPHI里使用LOCATE查找关键字,如何让他指向下一条记录 -
微隶阿思: LOCATE每次都是从第一条记录开始查找,不能指向下一条记录,只能用别的方法.

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网