如何将焦点放在任意的记录上(50分)

  • 主题发起人 ghostrooms
  • 开始时间
G

ghostrooms

Unregistered / Unconfirmed
GUEST, unregistred user!
我使用BDE引擎访问Sybase数据库中的一张表(DataSource1-Query1-DBGrid1)当对窗口Form1中DBGrid1所显示的某条记录双击左键时会出现一个用于插入记录的窗口Form2,当填写完相应的字段值“确定”后会对表进行刷新。其Form2中“确定”语句为:
form2.query1.close;
form2.query1.SQL.Clear;
form2.query1.sql.Add('insert into 表名(...) values (...)');
form2.query1.ParamByName('p0').asstring:=edit1.Text;
...
query1.ExecSQL;
form1.query1.close;
form1.query1.open;
selectfirst;
我的问题是:每当刷新过后焦点都会放在DBGrid1显示的第一条记录上而不是当前的记录上面,这样每当连续进行插入操作的时候就需要将焦点重新放到新的记录上面,十分的麻烦。请问各位大侠有没什么办法能够将焦点控制在你所需要的记录上面呢?
 
var
bkmk: string;
begin
bkmk := ADOTable1.Bookmark;
ADOTable1.Close;
ADOTable1.Open;
ADOTable1.Bookmark := bkmk;
end;
 
使用BOOKMARK,如下:

bmSavePoint := query1.GetBookmark;
query1.DisableControls;
try
.......
finally
if query1.ControlsDisabled then
query1.EnableControls;
query1.GotoBookmark(bmSavePoint);
query1.FreeBookmark(bmSavePoint);
end;
 
想法挺好的!
 
form2直接引用form1的query就行了
 
function FuncQueryRefresh(var Qry:TAdoQuery):boolean;
var
V_StrSql:String;
V_BookMark:TBookMark;
begin
V_BookMark:=Qry.GetBookmark;
qry.DisableControls;
Result:=false;
V_StrSql:=qry.SQL.Text;
if (V_strSql='') or (pos('select',V_strSql)<1) or (pos('from',V_strSql)<1) then exit;
result:=FuncQueryOpen(Qry,V_strSql);
qry.EnableControls;
Qry.GotoBookmark(V_BookMark);
Qry.FreeBookmark(V_BookMark);
end;
 
如何进行调用呢?各位大侠能否继续赐教呢?
 
多人接受答案了。
 
顶部