ADOQuery的数据集是多表关联的,如select a.*,b.name from table1 a,table2 b where a.b_id=b.id,
象这样的ADOQuery在Post时会自动地进行多表更新,比如删除时会把两个表的数据同时删除,如果
在ADOQuery的AfterOpen事件中写ADOQuery1.Recordset.Properties.Item[Unique Table].Value:=table1;
可以解决这个问题,但如果是新增记录的话还是同时更新两个表。但我只需要更新一个表呀!
不知道大家有没有遇到过这个问题,就是ADO中多表关联的数据应该怎样进行单表更新的问题,请救就我吧,各位大虾!
我知道在BDE中很容易解决这个问题,但现在程序写了很多了,不能临时换控件了,因为我有特殊原因,也不能使用Lookup字段,所以数据集肯定是多表关联的结果,应该怎样在最后更新时实现对单一的表进行更新呢?
我出去走了一圈
回来还是没人回答!人(气)呢?
forgot2000 (忘记2000年) :请教 一个问题:好象ado多表联合查询的结果是只读不能修改的呀?你是如何做到的,能说说不?
可以修改的,我就遇到过,不过我那次是哪个表在前面,就修改(插入)哪个表,正合我意。如:select a.*,b.* from a,b 这时插入数据,就只插入到a表
ADO可以同時處理多個表的更新,而且一句代碼都不用寫,但比較容易出現數據更新的錯誤,因為每個表都有自己的保存規則,如某個字段不能為空之類的東西,新增的時候就更煩了。
修改的時候大慨沒什麼問題,因為數據本來就是合法的)。
在新增的時候,就很大可能出錯了,因為你可能隻選了一部分的字段出來,DataSet隻會處理這些字段,沒選的字段的合法性難以保障。
還有它更新第二個表的時候它的處理方法應該是這樣的:
Update Table1 Set 更改的字段=新值 Where B_ID=對應的B_ID
Update Table2 Set 更改的字段=新值 Where B_ID=對應的B_ID
這樣的話,你說有什麼保障呢?
你可以用Profiler看一下後端做了些什麼!:)
TO: forgot2000(忘记2000年) ,每一個版本MDAC都有一點點區別。
用了ADO快一年了,現在基本上沒什麼問題,Borland公司有對MDAC2.6 Bug
(EOF AND BOF)的解決方法,多點到BORLAND公司的網站看一下吧!主要是使用模式的問題,當你開始做的時候要做好技術測試,要不做之前遇不到的,後面才發現,這就有點晚了!我修改了部分ADO.DB的代碼是正常的,如在查找字段中找不到對應的值時出現的非終斷型報錯,但DELPHI好象是提示"未知錯誤":。
一般情况,我都用SQL语句对数据库进行各种操作
关注帮你up.
ADO也用了很长时间了,一般在设计编码的时候就应该注意
多表查询后不可改的问题,及时采用gettext、lookup、计算字段等等
方法来避免修改的情况。对于你的情况可能要用另adoquery的SQL语句
直接对数据库操作,然后在重新刷新原adoquery,和定位记录
另adoquery的SQL可以在原adoquery的beforepost内操作吧。
最好数据查询和数据操作分开处理,这种多表处理不太标准。
主要问题好像在添加上,你接管BoforePost事件,在里面写insert代码再在另外一个Query中执行,将书签保存,然后将自己cancel掉,close再open,还原书签,然后abort掉,试试。
不过我觉得还是使用单个表,用lookup字段吧,如果你认为Lookup字段不能添加新名字,那么你加一个可编辑计算字段,在字段的OnGetText中将Lookup字段的值
写入,BoforePost时,看看编辑字段的DisplayText是否能loacte name不行的话
就在b表中添加一条记录。
主要问题好像在添加上,你接管BoforePost事件,在里面写insert代码再在另外一个Query中执行,将书签保存,然后将自己cancel掉,close再open,还原书签,然后abort掉,试试。
不过我觉得还是使用单个表,用lookup字段吧,如果你认为Lookup字段不能添加新名字,那么你加一个可编辑计算字段,在字段的OnGetText中将Lookup字段的值
写入,BoforePost时,看看编辑字段的DisplayText是否能loacte name不行的话
就在b表中添加一条记录。