比如用户表 user
id name city_id
1  张三  01
2  李四  02
城市表 city
id  name
01  北京
02  上海
我在DBGridEh1+DBLookupComboboxEh1显示
Select  a.*,b.name as CityName from [user] a  left join city b on a.city_id
=b.id   
DBGridEh1 显示3列
id  name  CityName 
1  张三   北京
2   李四   上海当我在DBGridEh下拉框,把李四的城市名改成北京 ,然后ADOQuery1.UpdateBatch();
城市表竟然也更新了 02 变成北京...我只想更新表user  不想更新表city这要怎么解决呢?

解决方案 »

  1.   

    大家都是怎么解决的?如果保存用手写sql的话  对于DBGridEh那么多列 太麻烦了吧
      

  2.   

    你改的是CityName,就是更新城市表里面的name字段,有啥奇怪的
    应该是改city_id把02变01,重新open也可以指定更新的表
    ADOQuery1.Properties['Unique Table'].Value:='表名';
    ADOQuery1.UpdateBatch();--另外:联接的查询,不建议做更新的动作
      

  3.   


    我只要改city_id   就可以了 不想改city,
    显示CityName是为了给用户显示直观点而已 我这样操作,表city还是被更新了
    procedure TForm1.Button3Click(Sender: TObject);
    begin
    ADOQuery1.Properties['Unique Table'].Value:='user';
    ADOQuery1.UpdateBatch();
    end;
      

  4.   

    可以通过ClientDataSet+dataprovider+AdoQuery,通过指定表名及主键来更新,不过要繁琐些。这种做法可以实现多表更新中,只更新一个表。但是现在下班了,手上又没DELPHI,贴些代码出来给你参考下
      

  5.   

    Left Join生成的视图只是让用户看的,具体更新单表,直接用TSQL更新
      

  6.   


    更新dbgrid的话
    100行 修改了5行的话    得一个个循环保存啊
      

  7.   


    中间加ClientDataSet  会不会变慢呢?