今天迂到一个奇怪的现象.
adoQuery加了sort后, 再locate的结果总是同一条记录, 除掉 sort这句, 就正常了. 
代码如下:
  if not dm1.qEmpl.Active then dm1.qEmpl.Open;
  dm1.qEmpl.sort:='wkno';
  with TDataSource(Sender).DataSet do
  begin
   if (State in [dsInsert,dsEdit])and(Field <> nil)and(Field.FieldName='fs1') then
   begin
     if dm1.qEmpl.Locate('wkno',Field.AsString,[]) then
     begin
      FieldByName('fs2').AsString:=dm1.qEmpl.fieldbyname('wkna').AsString;
      FieldByName('fi1').AsString:=dm1.qEmpl.fieldbyname('EmplID').AsString;
    end else showmessage('No Found');
  end;
    
把第二行 dm1.qEmpl.Sort:='wkno' 删掉, 就正常了.
百思不得其解.

解决方案 »

  1.   

    dm1.qEmpl.sort:='wkno'; -> qEmpl.Sort := 'wkno DESC';sort也不是这么用的哦。 要加ASC 或DESC
      

  2.   

    dm1.qEmpl.sort:='wkno'; -> qEmpl.Sort := 'wkno DESC';sort也不是这么用的哦。 要加ASC 或DESC
      

  3.   

    locate不是同一条记录就出问题了,没有问题啊
      

  4.   

    Sort是排序,字段后要加上ASC/DESC(大写)
      

  5.   


    可以用中间值存储sort的排序字段,当操作数据后,排序可能会乱,sort=中间值,又可会恢复操作前的状况,然后Locate定位之前操作的记录。如果不Locate,默认游标是在第一条记录
    楼主你的目的是什么?
      

  6.   

    case5166,kaikai_kk: SORT 不加ASC/DESC就会自动取默认值 ASCjonathanscor:可能没理解我意思, 无论我LOCATE哪个 wkno, 得出的结果都是同一条记录的值. wrost: 我加上 dm1.qEmpl.sort:='wkno' 这一行, 原意是想加快LOCATE的速度, 其实不加也可以. 你说的中间值不知何意.我不明的是, 加了之后LOCATE的结果不正确, 不加倒是正常.