我这里有一个两个表:
第一个表Medicines有三个字段:MedicineID,MedicineName,MakerID
第二个表Makers有两个字段:MakerID,MakerName这两个表的数据我用下面这条语句提取出来:
Select M.MedicineID, M.MedicineName, A.MakerName
From Medicines AS M Left Join Makers AS A On M.MakerID = A.MakerID这样查询出来的是一个记录集,我把这个记录集放到TDBGrid中显示。现在问题出来了:
我如果要在TDBGrid中增加、修改或者删除,完之后提交到数据库中。怎样在我对TDBGrid操作完成之后,提交到数据库中?
我要的不是那种另外重新写一个查询,提交到数据库,然后TDBGrid中刷新数据的那种;而是TDBGrid直接中直接修改,并提交到数据库中。

解决方案 »

  1.   

    想是只有在OnBeforePost事件中对表单独处理了,更新联合查询本来就是个很难的话题
      

  2.   

    有用过TClientDataSet,TDataSetProvider 吗,这个可以帮助人处理这个问题,多表更新,即通过视图去更新表,查看资料,最重要的是知道通过什么方式可以做,然后再去想怎么做这个问题
      

  3.   

    这种提交要用sql语句提交,提交后,Requery数据集,可以在字段的settext事件中处理
      

  4.   

    大家说的差不多都对。我没用TClientDataSet,TDataSetProvider 这类的控件,这只是一个演示的小程序。只包含了一个DBGrid、ADOConnection、ADOQuery和DataSource这几个控件。在BeforePost中手工填写了代码,执行之后,会提示“缺少更新或刷新的键列信息”,此时结束程序之后再运行,就会发现数据更改成功了。在AfterPost中手工填写代码,执行完毕之后,同样会出现上面的错误信息,但是数据不会发生更改。同时在上面的两个事件中添加相同的代码,还是会出现上面的错误,但是情况和只在前面手工填写代码相同。在这里我想的就是是不是有一个OnPost事件,我手工填写代码覆盖这个事件的原始代码?不过这个事件我没发现或者在执行了BeforePost事件之后,屏蔽系统的Post代码,转而跳出不往下继续执行。这个想法实现了,提交页成功了。但是提交之后只让你编辑这一行代码,其他的都不能动,程序假死不明白是不是原始Post代码里面有什么功能,导致我屏蔽了之后更新失败。
      

  5.   

    至于bdmh大大所说的我不大明白,bdmh能解释一下吗?