dbgrid的Tadotable的LockType属性设为ltbatchoptimistic,
dbgrid中的数据就不会很快提交了.如果要提交,可以给一个button
(adotable.updatebatch就可以).

解决方案 »

  1.   

    用TADOQuery + SQL:
    var
      Qry:TADOQuery;
    ...
       Qry.SQL.Text := 'SELECT StudentName FROM Table1 A Table2 B WHERE
                        A.StudentID=B.StudentID';
      

  2.   

    For Example:
      Table1's Struct:
         id:integer;
         xx:xx
        ...
      Table2's Struct:
       Name:String
       id:integer
       ....
    Add Components:
     Query1:TAdoQuery;
     DbGrid1:TDbGrid;
     DataSource:TDataSource;
    Code;
      begin
      if Query1.Active then
        Query1.Close;
        DataSource1.DataSet:=Query1;
        DbGrid1.DataSource:=DataSource1;
    Query1.Sql.Clear;
        Query1.Add('Select name,....  from Tabel1,table2 where 
    Table1.id=table2.id');
     Query1.Open;
     DbGrid1.Refresh;
    end;   
      

  3.   

    显示用lookup属性.
    可是在用户输入后,存入数据库时,该如何办呢?
      

  4.   

    用LookUp字段时可以设定显示studentname而保存studentID.
    你说的Cancel功能不知是指什么?
    如果是不让滚动,可以在Tquery 的BeforeScroll 中Cancel,
    如果是出错后取消修改可以在OnPostError中Cancel,也可以设定Action重试..(daFail, daAbort, daRetry).对于修改多条记录后的Cancel,可以用:
    1.事务,用ADOConnection的在BeforePost中BeginTrans和在出错时RollbackTrans
    2.可以用imageonline()说的批操作,在执行adotable.updatebatch之前,数据库中的记录实际并没有改变。
      

  5.   

    改正:
    如果是不让滚动,可以在Tquery 的BeforeScroll 中Abort