当前位置:首页
开发技术指南» 文章正文
    引言:
 

 

    摘要: 因为查询时要连接三个表进行查询所以add()里的内容很长,运行时出错,出现: [error] qa.pas(77): string literals may have at most 255 elements 这可怎么办啊?我的语句是这样的。 adoquery2.sql.add(select usraccounts.datetime,usraccounts.province,usracco......
    摘要: 程序经常提示‘数据库连接过多’、‘堆扎溢出’。 我的程序在登录窗口、主窗口分别有一个数据库连接,使用完后均未手工断开连接, 在执行重新登录菜单时,提示‘数据库连接过多’、‘堆扎溢出’,平时也时有发生。 我的登录窗口是打开主窗口之前的: application.initialize; splashfrm:=tsplashfrm.create(application); splashfrm.s......


有个关于ADO的问题解决不了,回来问问各位兄弟。

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字段,所以数据集肯定是多表关联的结果,应该怎样在最后更新时实现对单一的表进行更新呢?

NO.1   作者: CoolSlob

我出去走了一圈  
  回来还是没人回答!人(气)呢?  
 

NO.2   作者: chenjiong

forgot2000   (忘记2000年)   :请教   一个问题:好象ado多表联合查询的结果是只读不能修改的呀?你是如何做到的,能说说不?

NO.3   作者: 8341

可以修改的,我就遇到过,不过我那次是哪个表在前面,就修改(插入)哪个表,正合我意。如:select   a.*,b.*   from   a,b     这时插入数据,就只插入到a表  
 

NO.4   作者: andykwok

ADO可以同時處理多個表的更新,而且一句代碼都不用寫,但比較容易出現數據更新的錯誤,因為每個表都有自己的保存規則,如某個字段不能為空之類的東西,新增的時候就更煩了。  
  修改的時候大慨沒什麼問題,因為數據本來就是合法的)。  
  在新增的時候,就很大可能出錯了,因為你可能隻選了一部分的字段出來,DataSet隻會處理這些字段,沒選的字段的合法性難以保障。  
  還有它更新第二個表的時候它的處理方法應該是這樣的:  
  Update   Table1   Set   更改的字段=新值   Where   B_ID=對應的B_ID  
  Update   Table2   Set   更改的字段=新值   Where   B_ID=對應的B_ID  
  這樣的話,你說有什麼保障呢?  
  你可以用Profiler看一下後端做了些什麼!:)

NO.5   作者: andykwok

TO:   forgot2000(忘记2000年)   ,每一個版本MDAC都有一點點區別。  
          用了ADO快一年了,現在基本上沒什麼問題,Borland公司有對MDAC2.6   Bug  
  (EOF   AND   BOF)的解決方法,多點到BORLAND公司的網站看一下吧!主要是使用模式的問題,當你開始做的時候要做好技術測試,要不做之前遇不到的,後面才發現,這就有點晚了!我修改了部分ADO.DB的代碼是正常的,如在查找字段中找不到對應的值時出現的非終斷型報錯,但DELPHI好象是提示"未知錯誤":。

NO.6   作者: gcj123

一般情况,我都用SQL语句对数据库进行各种操作

NO.7   作者: zhangpeigao

关注帮你up.  
  ADO也用了很长时间了,一般在设计编码的时候就应该注意  
  多表查询后不可改的问题,及时采用gettext、lookup、计算字段等等  
  方法来避免修改的情况。对于你的情况可能要用另adoquery的SQL语句  
  直接对数据库操作,然后在重新刷新原adoquery,和定位记录  
  另adoquery的SQL可以在原adoquery的beforepost内操作吧。

NO.8   作者: Jiker

最好数据查询和数据操作分开处理,这种多表处理不太标准。

NO.9   作者: fengerfeifei

主要问题好像在添加上,你接管BoforePost事件,在里面写insert代码再在另外一个Query中执行,将书签保存,然后将自己cancel掉,close再open,还原书签,然后abort掉,试试。  
   
  不过我觉得还是使用单个表,用lookup字段吧,如果你认为Lookup字段不能添加新名字,那么你加一个可编辑计算字段,在字段的OnGetText中将Lookup字段的值  
  写入,BoforePost时,看看编辑字段的DisplayText是否能loacte   name不行的话  
  就在b表中添加一条记录。

NO.10   作者: fengerfeifei

主要问题好像在添加上,你接管BoforePost事件,在里面写insert代码再在另外一个Query中执行,将书签保存,然后将自己cancel掉,close再open,还原书签,然后abort掉,试试。  
   
  不过我觉得还是使用单个表,用lookup字段吧,如果你认为Lookup字段不能添加新名字,那么你加一个可编辑计算字段,在字段的OnGetText中将Lookup字段的值  
  写入,BoforePost时,看看编辑字段的DisplayText是否能loacte   name不行的话  
  就在b表中添加一条记录。


 ·socket::sendto ()问题    »显示摘要«
    摘要: 我如何知道sendto ()函数中是怎么工作的?我很想知道。 当你send一个包到目的ip时,那他的源地址ip是怎么加进去的? 可以修改么?怎么才能修改? thank you. mailto: wangchi_cn@21cn.com ......
» 本期热门文章:

©2000-2007 All Rights Reserved. 最佳浏览:1024X768 MSIE