我支持手写,但最好能利用上delphi控件的优势。祝你成功。

解决方案 »

  1.   

    二者不可得兼!关于方法2:由于Delphi事务机制有问题,我只能使用SQL的事务机制,把begin tran rollback tran commit tran 等加入了SQL语句,但执行完后,并不只知道它是否执行成功。关于方法1:我没发现ADOQuery有缓存用法,TQuery控件是有的。如果使用方法1,如何实现,如果使用方法2,如何截获异常错误?
      

  2.   

    1。把数据传入存储过程,再存储过程中进行事务处理。
    2。不用把数组传递到中间层,这样处理起来麻烦,直接把参数拼接成sql语句在传递就行。
      

  3.   

    我同意 findcsdn(findcsdn)的观点,在我公司的项目中很多都作为动态SQL处理
      

  4.   

    背景:三层结构,ADO驱动,Corba协议 
    干嘛把ADO跟corba搞在一起呢?这样恐怕不是很好吧,ADO配合dcom应该好一点,在delphi6中好像一对多的查询很好更新
      

  5.   

    首先一点:我不把任何SQL语句放在客户端。其次:细表数据存储如何使用存储过程呢?再次:即使可以使用存储过程+事务处理,在Delphi中你又如何获取执行成功与否呢?
      

  6.   

    我决定继续使用方法2,在Delphi中如何获取执行成功与否呢?
      

  7.   

    其实问题的关键是如何返回MSSQL的系统变量@@error的值,我用循环生成细表数据的SQL语句,包含事务处理,如:Str:='begin tran ';for i:=0 to NumCount-1 do
    begin
       str:=str+'insert into table ...'+
                'if @@error<>0 rollback tran';
    end;
    str:=str+'commit tran ';请问,执行该语句后,如何获得@@error的值,这样就知道到底成功没有。
      

  8.   

    问题是我不想使用ADOTable控件,我的主细表结构太多了,我想用你上面的方法用循环生成插入细表数据的SQL语句,为了安全和数据一致性,我在SQL语句中加入了事务处理,想得到@@error的值,从而判断是否真正插入成功。
      

  9.   

    如果你客户端有什么ADO,我想你的不是三层。
    在应用服务器中,才有ADO连接数据库。客户端只有 clientdataset.而且我们的三层系统里应用服务器总共只有一2个ADOQUERY。
      

  10.   

    to renzhm(戴尔飞) :你采取的方式和我现在用的差不多。由客户端传递要更新的数据到应用服务器去用query执行。应用服务器只有一到2个query。或者若干个adostoredproc,
    不知道你的应用服务器是什么?mts/com+?
    如果是那样的话,可以用Mts/com+的本身的事务环境。不过要改动delphi的源代码。在李维的ado/mts/com+中有介绍,你可以看看,如果有什么不明白,可以再问我
      

  11.   

    to talisman(talisman) :   您道出了我心底最深的痛,如果可以用Mts/com+的本身的事务环境,我的问题应该能解决了,试试先!
      

  12.   

    可以通过将TADOQuery或TADOdataset的locktype设为ltBatchOptimistic来实现缓存的功能啊用 UpdateBatch()提交就可以了
      

  13.   

    主表的数据一样啊,你可以先下载主表和子表的结构,如:select * from Table where 1=2 然后先不管主从关系啊,最后用事务一起提交啊,不过要注意先提交主表的数据。
      

  14.   

    to  redwh(如果我想飞) :  不能使用事务,原因:  以前曾用过TQuery的事务处理(TDatabase),每当执行该方法时,会造成关联表锁定,以至使其它用户无法提交,造成全局应用无响应,所以一直不敢用Delphi的事务处理,不知道ADO是否也存在这个问题?具体原因未查明。
      

  15.   

    如果你能说出这个问题的原因,此问题也就解决了:http://www.csdn.net/expert/topic/921/921062.xml?temp=.7010462
      

  16.   

    to renzhm(戴尔飞) : 我想你是否使用了行级锁之类的东西,我用ADO做过很多试验,特别是各种单据试验,都没有发生你所说的情况
     有没有可能你用的数据库的问题
      

  17.   

    没使用行级锁!   你的测试环境是不是多用户?举例:有2个用户,一个用户保存单据,同时更改库存,在该用户开启事务,但并未最后提交时,另一用户在查询库存,此刻会造成双方死锁。我是用TDataBase测试的。
      

  18.   

    我的实现方法:
      1、下载结构框架,其实这个时候已经可以断开连接了
      2、分别录入主表数据和子表数据
      3、存入数据前先取单据号,然后分别写入主表和子表
      4、提交数据 在这里我的单据号是放在单独的一个表!
     我用的是ADO,我想BDE也一样吧