locate有定位不准的问题吗?(50分)

  • 主题发起人 主题发起人 xinjia
  • 开始时间 开始时间
X

xinjia

Unregistered / Unconfirmed
GUEST, unregistred user!
登录程序,先输入代码,再输入密码,然后查到找库中相应代码的记录
取出密码,与输入对比。
我用locate查找第1条和最后1条记录正确,中间老找下面一条!!
源程序如下:
table1.first;
if loginin.Table1.Locate('操作员代码',czydm,[]) then
begin
czymm:=loginin.Table1.fieldbyname('操作员密码').Asstring;
数据库内容:
操作员代码 操作员密码
‘001’ ‘11111111’
‘002’ ‘22222222’
‘003’ ‘33333333’
‘004’ ‘44444444’
跟踪时发现 输入001和004代码时能找到密码11111111和44444444,输入
002和003时找到33333333和44444444


 
有点奇怪. 你确信上面的就是你的源代码吗?

不清楚为什么,不过建议最好不要用中文字段名.
 
建议你用TQuery,用SQL来查找密码。
 
登录窗体的确定按扭
procedure Tloginin.BitBtn1Click(Sender: TObject);
begin
czyxm:=ComboBox1.Items[ComboBox1.ItemIndex];
loginin.Table1.Locate('操作员姓名',czyxm,[]);
czydm:=loginin.Table1.fieldbyname('操作员代码').Asstring;
loginin.table1.Active :=false;
loginin.Table1.TableName :='czqx';
loginin.table1.Active :=true;
table1.First ;
if loginin.Table1.Locate('操作员代码',czydm,[]) then
begin
czymm:=loginin.Table1.fieldbyname('操作员密码').Asstring;
end
 
试试这个
query1.sql.clear;
query1.sql.add('select 操作员密码 from czqx where 操作员代码='+combobox1.text;
query1.open;
if query1.eof then 没找到
else begin
czymm:=query1.fieldbyname('操作员密码').Asstring;
end;
 
改成英文字段试试。
 
该成英文字段也不行,只能用query了吗?
 
建议你试一下。
 
Locate之前先执行First试以下
 
我用SQL解决了这个问题,locate的问题始终存在。
 
出差几天,耽误时间了
 
很抱歉这个问题拖了2个月,年前的大富翁一直上不去。感谢各位大侠的指教,
locate定位不准的原因终于找到了,与使用汉语字段和执行locate前是否frist
无关,可能是因为集成环境下运行的问题,同一个值,第一次locate与再locate
结果不一样,我将程序编译后,执行exe文件,locate又能定位准了。

 
这个是不是Locate的Bug?我试了一下Locate对以数字结尾的字符串字段的定位经常出问题。
 
后退
顶部