是这样的,在一个窗口里有主细两个DBGRID,我想添加一个编辑的按钮。我想按下按钮的时候哪个DBGRID获得了焦点,然后就用哪个ADOTABLE部件的EDIT方法。但是我发现因为主表的记录移动一下,细表马上要更新里面相关联的数据,所以最后主表根本无法获得焦点。请问这个问题该怎么解决呢?十分感谢!
解决方案 »
- delphi2006中为何小数0.23只显示.23
- xxmmmx(踢踏)请进,又重新开了一贴!动态生成按钮及不同事件触发的问题!
- 如何调用C开发的DLL函数,谢!
- 媳妇给婆婆的一封信~ 牛死了!!!
- 我想用fieldbyname输出多个表列里的数据请问能实现吗?
- 在使用F1BOOK的过程中,为什么 a: F1CellFormat; 这条语句不能通过?我用的是F1BOOK3.0
- 请大家推荐一下delphi学习com/com+方面的书籍(电子书籍最好)
- 请问Delhpi中怎样得到一个字符的ASCII码?
- 在数据库里定义了小数位为8,为何在DBEdit和DBGrid中只显示4位小数?
- 如何取得网上邻居中任意一台计算机的IP地址?特急
- 简单的问题,但是很着急 怎么用ado的存储过程啊?
- 急,关于socket问题.救救我吧
MainGrid.datasource.dataset.edit;
MainGrid.SetFocus;
....操作
MainGrid.Post;
var
i, j, Get_Link_Id : Integer;
begin
with MasAds do // 判断主表的修改/新增状态
begin
if FieldByName(LinkId).AsInteger = -1 then
Get_Link_Id := GetMaxId(Ms_Tab,LinkId)
else
Get_Link_Id := FieldByName(LinkId).AsInteger;
end;
try // 从表保存
with Dt1Ads do
begin
if IsEmpty then
CancelBatch()
else
begin
First;
for i := 0 to RecordCount - 1 do
begin
Edit;
if (FieldByName(LinkId).AsInteger = -1) or
(FieldByName(LinkId).IsNull) then
FieldByName(LinkId).AsInteger := Get_Link_Id;
FieldByName(Dt_Field).AsInteger := i + 1;
Post;
Next;
end;
// showmessage('出错1');
UpdateBatch(); end;
end;
if Dt2Ads <> Nil then
begin
with Dt2Ads do
begin
if IsEmpty then
CancelBatch()
else
begin
First;
for j := 0 to RecordCount - 1 do
begin
Edit;
if (FieldByName(LinkId).AsInteger = -1) or
(FieldByName(LinkId).IsNull) then
FieldByName(LinkId).AsInteger := Get_Link_Id;
FieldByName(Dt_Field).AsInteger := j + 1;
Post;
Next;
end;
UpdateBatch();
end;
end;
end; with MasAds do //主表保存;
begin
if FieldByName(LinkId).AsInteger = -1 then
begin
// showmessage('出错2');
Edit;
FieldByName(LinkId).AsInteger := Get_Link_Id;
end;
UpdateBatch();
end;
Except
// showmessage('出错3');
Application.MessageBox('保存数据出现异常,请重试!','系统信息',
MB_OK+MB_ICONINFORMATION);
end;
end;