关于ADOTable1.Locate()方法如何区分大小写的问题!!

panyang19790212 2004-06-14 07:10:52
with ADOTable1 do

Locate('Company;Contact;Phone', VarArrayOf(['Sight Diver', 'P', '408-431-1000']), [loPartialKey]);

其中第三个参数的值是[loPartiaKey]时是模糊查询,参数值[loCaseInsensitive]是
不区分大小写!!!我想严格分大小写,怎么办呢!我试了取值为[]好想也是不区分大小写的!!谁有好的办法??对了取[]值时是什么意思啊??帮助里没有啊!!

with ADOTable1 do

Locate('Company;Contact;Phone', VarArrayOf(['Sight Diver', 'P', '408-431-1000']), []);
...全文
198 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
zzg229 2004-07-11
  • 打赏
  • 举报
回复
刚学DELPHI
请问如何驱动数据库
谢谢
jacobran 2004-07-10
  • 打赏
  • 举报
回复
DataModule4.ClientDataSet1.Locate('Category',VarArrayOf([edit2.Text]),[loCaseInsensitive,loPartialKey]);
hongqi162 2004-06-17
  • 打赏
  • 举报
回复
与数据库的安装有关系,安装的时候默认不区分大小写
creativepeter 2004-06-17
  • 打赏
  • 举报
回复
今天一定把你的问题解决掉。咱们逐个来说:
1.打破你的定势思维,你问“要是取[]得话,应该是空呀!什么也不取。是什么意思呢?”。对呀,[]就是空集的意思,因为参数必须为集合类型,而你有不需要添加附加条件,当然就是空集了。Locate是这样工作的,如果你有附加条件,就按附加条件查询,如果为空,就按不区分大小写和必须字符串完全匹配查询。你的定势思维在于,觉得如果要匹配全字符串就应该加条件,要大小写区分
就加条件,可是Delphi就不按你的习惯,你只有不要匹配全字符串才附加条件,不区分大小写才附加条件。
2.同意Dlwxn(流云)所言。
3.所以,我们必须找到一个办法。
按我的步骤去做,我已经通过测试验证以下方法能够实现大小写区分定位。
①给你的窗体类增加一个私有方法,声明如下:
private
procedure ReOpenWithID(ProductID : Integer);
在实现区域增加该私有方法的具体定义:
procedure TLocateForm.ReOpenWithID(ProductID : Integer);
begin
with self.ADOQuery1 do
begin
Filtered := False;
Locate('ProductID', ProductID, []);
end;
end;
②假设你按下Botton1执行查询,下面是按下的事件定义:
procedure TLocateForm.Button1Click(Sender: TObject);
var
tempProductID : Integer;
begin
with self.ADOQuery1 do
begin
DisableControls;
tempProductID := -1;
Filter := 'ProductName = ''TestString'''; //可以用TEdit等组件输入你要找的字符串
Filtered := True; //将过滤出所有各种大小形式的伪字符串
if IsEmpty then
begin
ShowMessage('没有匹配的记录');
Filtered := False;
EnableControls;
exit;
end;
while not Eof do
begin
if not (FieldValues['ProductName'] = 'TestString') then
Next
else
begin
//这时将过滤出真正要找的字符串,并将它的ID号记录下来
tempProductID := FieldValues['ProductID'];
//使用声明和定义过的私有方法
ReOpenWithID(tempProductID);
break;
end;
end;
if tempProductID = -1 then
begin
ShowMessage('没有匹配的记录');
Filtered := False;
end;
EnableControls;
end;
end;
请认真将此代码揣摩,相信你能够明白或得到启发。
Dlwxn 2004-06-16
  • 打赏
  • 举报
回复
区不区分大小写和数据库有关系,如果你用oracle,想不区分都不行。不知道你要干吗?
wj964124 2004-06-16
  • 打赏
  • 举报
回复
我觉得你应该好好去看一下Locate的帮助文件。
panyang19790212 2004-06-16
  • 打赏
  • 举报
回复
还有照 creativepeter(头皮屑)的说法参数值要是取[]得话,应该是空呀!什么也不取。是什么意思呢?越来越晕了!!呵呵
panyang19790212 2004-06-16
  • 打赏
  • 举报
回复
那我想严格区分大小写呢?使用LOCATE()能实现吗???
还有照 creativepeter(头皮屑)的说法参数值要是取[loPartiaKey,loCaseInsensitive]代表什么意思呢??
creativepeter 2004-06-14
  • 打赏
  • 举报
回复
1.[]是不区分大小写和必须字符串完全匹配;
2.看来你对集合的概念不熟,下面的例子将告诉你答案:
type
T武林秘籍=(降龙十八掌,九阴真经);//定义枚举
T武林秘籍选=set of T武林秘籍;//定义集合
var
我的武林秘籍选:T武林秘籍选;
我的武林秘籍选:=[];//明白了吗,意思就是我没有武功,如果有一天我能遇到乔峰的话
我的武林秘籍选:=[降龙十八掌];//对,我就学会了一门武功,如果我再碰到欧阳锋
我的武林秘籍选:=我的武林秘籍选+[九阴真经];//好好体会集合的概念
wangguan007 2004-06-14
  • 打赏
  • 举报
回复
这种方式我没有用过,不过能不能换种方式。
通过查询实现,首先找到该记录,然后ADOTable1.setfocus
方法是笨了一点,但不妨试试。

5,388

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧