为什么用LAST取不到数据库的最后一条记录(100分)

  • 主题发起人 主题发起人 rainlovesea
  • 开始时间 开始时间
R

rainlovesea

Unregistered / Unconfirmed
GUEST, unregistred user!
if (InExeclFrm.ShowModal=mrok) then //InExeclFrm此窗体调用DLL向数据库插入一条数据
begin
with DeDataModule.TempQuery do
begin
close;
SQL.Text := 'SELECT * FROM T_DELB order by ID ';
open;
Last;
ID := FieldByName('ID').AsInteger;
Mc := FieldByName('F_DEMC').AsString;
Cjsj := FieldByName('F_CJSJ').AsString;
Xgsj := FieldByName('F_XGSJ').AsString;
Bz := FieldByName('F_BZ').AsString;
CanChange := FieldByName('F_CANCHANGE').AsBoolean;
Close;
end;
l_id:=dbcDe.Items.AddObject(id); //这个不是插入的数据而是插入之前的最后一条
end;
我想取的是插入的最后一条,ID是自动加1 。造成这样的原因是不是我调用DLL向数据库写数据时,和执行下面的SELECT是同时进行的?
 
什么原因看不明白,不过可以提供一种思路:你可以在模块InExeclFrm里写些代码,当这个DLL成功插入了数据后,再马上获取新添加的数据的ID号,并返回给调用者,这样调用者用 select *from table where id=:id 获取指定的记录就行了,DLL获取最后ID的语句: select max(id) as id from table。
 
SELECT top 1 * FROM T_DELB order by ID asc
不就OK了
不过LAST应该有用的阿
你看你现在这样取到的是插入前最后一条记录么?
如果是那肯定是你dll还没提交成功,找dll的问题
 
可能是Dll中提交更新的问题
 
if (InExeclFrm.ShowModal=mrok) then
这个条件有问题吧,
InExeclFrm只是show出来,还没有成功插入数据啊,
所以取的当然不是最新插入的那条数据(最后一条数据).
应该在插入数据成功后再查询出最后一条数据
 
现在是不是取不到,只是要等到那么不到1S的时间才能取到!感觉是提交完了,还没来得及更新就又查询了!现在加了ADOCONNECTED:= FASLE再TRUE就行了
 
'SELECT ID FROM T_DELB'
open;
Last;
 
后退
顶部