JzZhuanYong.First;
    while not JzZhuanYong.Eof do
    begin
        If JzListQuery.Locate('ymid;jzfs;ymjc',VarArrayOf([
            JzZhuanYong.fieldbyname('ymID').AsString,
            JzZhuanYong.fieldbyname('myType').AsString,
            JzZhuanYong.fieldbyname('ymNum').AsInteger]),[]) then
        begin
            ShowMessage('找到记录:'+
                ' ymID='+JzZhuanYong.fieldbyname('ymID').AsString+
                ' myType='+JzZhuanYong.fieldbyname('myType').AsString+
                ' ymNum='+JzZhuanYong.fieldbyname('ymNum').AsString);
        end else
        begin
            ShowMessage('没有找到记录:'+
                ' ymID='+JzZhuanYong.fieldbyname('ymID').AsString+
                ' myType='+JzZhuanYong.fieldbyname('myType').AsString+
                ' ymNum='+JzZhuanYong.fieldbyname('ymNum').AsString);
        end;
        JzZhuanYong.Next;
    end;
JzZhuanYong中的记录在JzListQuery中都有,为什么有的记录就是找不到!!!
我发现凡是JzZhuanYong.FieldByName('myType').AsString='2'的记录都找不到,
其它的记录都能找到,为什么啊???到底哪里错了!!!

解决方案 »

  1.   

    是否字符串字段的大小写不一致或者有多余的空格?如果要忽略大小写要加上loCaseInsensitive选项
      

  2.   

    这些我都考虑了,我用了下面的方法证实了两个表的对应字段完全相同:
    因为两个表的记录是一一对应的,所以两个表同时 Next,然后用下面的语句判断
    If (JzListQuery.FieldByName('ymid').AsString=
           JzZhuanYong.FieldByName('ymID').AsString)and
       (JzListQuery.FieldByName('jzfs').AsString=
           JzZhuanYong.FieldByName('myType').AsString)and
        (JzListQuery.FieldByName('ymjc').AsString=
           JzZhuanYong.FieldByName('ymNum').AsString) then
    用上面的语句代替Locate,结果显示都能找到对应的记录。
    因为两个表现在是记录一一对应,但是并不能保证一直是一一对应,
    所以不能用上面的方法代替Locate
      

  3.   

    VarArrayOf里的数据类型一定要和真实的数据类型一致,否则是找不到的
      

  4.   

    本来就是查找,还用循环干嘛。呢。
    直接first后
    就locate
    试试看。
      

  5.   

    一要考虑:你的字段类型与VarArrayOf里面的值类型是完全一致.
    二最好再好面加上Locate的类型,在不区分大小写的情况下加:loCaseInsensitive
    如果实在不行的话,建议换一种查找方式.使用Filter
      

  6.   

    If JzListQuery.Locate('ymid;jzfs;ymjc',VarArrayOf([
                JzZhuanYong.fieldbyname('ymID').AsString,
                JzZhuanYong.fieldbyname('myType').AsString,
                JzZhuanYong.fieldbyname('ymNum').AsInteger]),[]) then
    在[]加上参数试试,或者就是有空格存在,用Trim()试试
      

  7.   

    错误我找到了!不是Locate的原因!是我的 SQL 语句写错了,
    以致于在JzListQuery中有两个字段名相同的列:jzfs人人有分!