加入我有两个表 class 和 grade
 class字段中:class_id ,class_name,grade_id (class_id为关键字)
 grade字段中:grade_id,grade_name (grade_id为关键字)
在一个dbgird中实现 class_id, class_name,grade_name
怎样做才能实现在dbgird中录入一条纪录,同时保存到class 和 grade表中?

解决方案 »

  1.   

    数据库是access! 在程序中实现该要求!
      

  2.   

    读取SQL视图能满足你的要求。
      

  3.   

    使用MIDAS应该能,就是用TClientDataSet和TDataSetProvider和TQuery类的组合。
    读出时:使用SELECT语句或使用视图,
    写入时:TClientDataSet.ApplyUpdates(0);
    我没有试过,你用用看吧:)
      

  4.   

    可以按下列方式通过视图修改数据: 使用具有支持 INSERT、UPDATE 和 DELETE 语句的逻辑的 INSTEAD OF 触发器。
    使用修改一个或多个成员表的可更新分区视图。 
    如果视图不使用 INSTEAD OF 触发器或者不是可更新分区视图,则只要符合下列条件,仍可更新: 视图在视图定义的 FROM 子句中包含至少一个表;视图不能只基于一个表达式。
    在选择列表中没有使用聚合函数(AVG、COUNT、SUM、MIN、MAX、GROUPING、STDEV、STDEVP、VAR、VARP)或 GROUP BY、UNION、DISTINCT 或 TOP 子句。但是,可以在 FROM 子句定义的子查询范围内使用聚合函数,前提条件是聚合函数生成的派生值没有修改过。 
    说明  使用 UNION ALL 运算符的分区视图是可更新视图。在选择列表中不使用派生列。派生列是由除简单列引用以外的一切构成的结果集列。 
      

  5.   

    with query1 do
    begin
    add('select class.class_id,class.class_name,class.grade_id,grade.grade_id,grade_name');
    add('from class,grade ');
    add('where class.class_id=grade.grade.grade_id');
    open;
    end;
    datasource.dataset:=query1;修改的时候直接调用post就行了
    ado会自动维护多表引用字段,详细请看李维的书
      

  6.   

    楼上说的够多了,比较清楚啊,如果你不是用ado,你可以用bde的updatesql,或者直接在delphi中自己写sql手动进行更新,但无论如何,最好用事务,以避免数据完整性得到破坏
      

  7.   

    用查询嘛..查完再改..
    记得要把CACHEUPDATE设为TRUE