Delphi Locate问题

jxqn_liu 2011-03-17 09:59:16
问题是这样的:
我有个客户表,表里有编码和名称,数据大概如下
编码 名称
01 A
02 B
03 C
04 D
05 A

问题来了,如果我想查找05 A的数据,使用Locate定位它只能定位到 01 A的那条数据,我的Locate的参数情况
LocateEh(ADataSet: TDataSet; AListFields,AValue: string;AKeyField: string = '';AHint: Boolean = True): string;
参数:
ADataSet: 是传入进来的数据源
AListFields: 是查找的字段列表,我的设置的是'编码,名称'
AValue:要查询的条件值
AKeyField: 数据源的值字段
AHint:提示消息

附源码:

//判断输入的值是否有效,有效返回KEY值,无KEY时返回第1列,无效显示提示并返回''.
function LocateEh(ADataSet: TDataSet; AListFields,AValue: string;
AKeyField: string = '';AHint: Boolean = True): string;
var
i:integer;
bFind:boolean;
lStr: TStrings;
cFields: string;
begin
Result := Char(255);
cFields := AListFields + ';';
if Pos(AKeyField + ';',cFields) > 0 then
lStr := StringToList(cFields,';')
else
lStr := StringToList(AKeyField + ';' + cFields,';');

bFind := False;
for i := 0 to lStr.Count - 1 do
try
if (lStr[i] <> '') and ADataSet.Locate(lStr[i],AValue,[loCaseInsensitive,loPartialKey]) then
begin
bFind := True;
if AKeyField = '' then
Result := ADataSet.FieldbyName(lStr[0]).Text
else
Result := ADataSet.FieldByName(AKeyField).Text;
Break;
end;
except
end;
lStr.Free;

if (not bFind) and AHint then
Application.MessageBox('无效的编码、名称或助记符或您没有使用该编码的权限!', '提示',64);
end;


这个Locate方法绑定在LookupCombobox上,在我定位之后,选择了05 A,但是返回的结果还是 01 A;如果我直接输入05定位的话,他还是返回01 A,并不回复返回所要的结果?
那么请问,应该怎么解决当有重复名称的时候,定位到对应的值?
...全文
185 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

5,387

社区成员

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

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