今天迂到一个奇怪的现象.
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' 删掉, 就正常了.
百思不得其解.
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' 删掉, 就正常了.
百思不得其解.
可以用中间值存储sort的排序字段,当操作数据后,排序可能会乱,sort=中间值,又可会恢复操作前的状况,然后Locate定位之前操作的记录。如果不Locate,默认游标是在第一条记录
楼主你的目的是什么?