ADOQuery的问题(100分)

  • 主题发起人 主题发起人 xWolf
  • 开始时间 开始时间
X

xWolf

Unregistered / Unconfirmed
GUEST, unregistred user!
在下同事近日遇到一问题,请教各位大侠:
因为听说ADO不错,所以程序中都是弃BDE用ADO。其中有一ADOQuery从两个表Table1,Table2
中读取记录:ADOQuery.SQL.Text := 'SELECT .. FROM Table1, Table2 WHERE ...';在使用中却
发现在与此ADOQuery相关联的DBGrid中按Ctrl+Del删除记录时,会把Table1, Table2中相关记录都
删除。用MS SQLServer中Profile跟踪时发现执行了如下SQL:
DELETE FROM Table1 WHERE ...
DELETE FROM Table2 WHERE ...

但是这样是不对的,我们只希望删除其中一个表的数据,请问是否有比较简便的方法?(用
Query+UpdateSQL不算,截获DBGrid的KEY_DOWN也不算)
先行谢过!
 
你自己用DELETE语句写了,用DElphi自带的DB控件写程序不是很好控制,还是用标准控件,
自己用SQL语言来实现比较好控制,只不过工作量大一些。
 
这样自然可以,但是我觉得ADO不至于这么弱智的。我并没有怎么用过,所以只能请教诸位
 
用ADO写程序有时候会觉得怪怪的,毕竟不是Borland自己的东西吗!不过用ADO写程序,
不需要带很多的连接库应该是大家都喜欢用的原因吧,但微软的东西就不要希望他很完美吧
 
把你要使用的主要表作为主表,比如:table1,然后用table2的表中的子段作爲TABLE1的回查子段
如:"Select EmpNO,MonthSal from table1","Select EmpNo,EmpName from table2",在AdoQuery1中加回查子段。
 
ado修改数据的流程是:判断键值字段及被修改的字段是否
匹配。通过ADOQuery.SQL.Text := 'SELECT .. FROM Table1, Table2 WHERE ...'
再DBGrid中按Ctrl+Del删除记录时,sql 7.0 server profiler显现:只判断
where 键值=@p1.而table1.键值=table2.键值,所以...

事实上’我们只希望删除其中一个表的数据‘对于一查询结果在grid里,这在
语意上存在二意性。
 
xWolf:如果你还要继续讨论请定期提前你的帖子,如果不想继续讨论请结束帖子。
请认真阅读大富翁论坛规则说明 http://www.delphibbs.com/delphibbs/rules.htm
 
多人接受答案了。
 
后退
顶部