if (cbb1.Text='')and (cbb2.Text<>'') then //从表头查到指定记录位置
begin
//if DBISAMQuery1.Locate('qihao',trim(cbb2.Text),[loCaseInsensitive]) then
ShowMessage(cbb2.Text);
if DBISAMQuery1.Locate('qihao',trim(cbb2.Text),[]) then
begin
with DBISAMQuery1 do
begin
close;
sql.Clear;
s1:='select * from record where qihao<='+''''+trim(cbb2.Text)+'''';
sql.Add(s1);
open;
end;
end
else
ShowMessage('截止记录框输入异常,请检查输入!');
end
delphi 7 组件dbisamquery。一直不太喜欢locate这个函数,没道理可言,尤其是在query组件上。这次偶尔用了一下,就是上面这段。两个ComboBox控件cbb1,cbb2,分别指向查询的起止记录的‘qihao’字段,当其中cbb1为空默认从表头记录开始,而若cbb2为空时,默认查到表尾记录。上面这段就是从表头查到指定记录位置,为了防止ComboBox控件内容被人为修改不是合法的qihao字段值,查询前作了一个检测查询——正常情况下,由于作了预处理,只需点击选择记录的qihao不会出错,但不能够排除手动输入。奇怪的是,编译执行没问题,只是测试第一次执行正常,locate函数执行结果正常,但是后面只要重选了结束记录继续,locate函数执行结果都是false,程序就直接弹出“截止记录框输入异常,请检查输入!”不得其解,请指点。
问题提交后,重新测试又有新发现,就是后面如果cbb2里面的qishu字段值如果选择小于第一次查询记录的qishu值是没问题的,什么鬼?好像是指针在作祟哦,难怪潜意识里就不喜欢这个locate函数,具体是什么问题呢?求赐教!