数据库:Oracle 9i
ADO版本:2.7 CN
DELPHI :V6.0BodyQuery的属性设置LockType为ltBatchOptimistic;
这是我的SQL语句:
With BodyQuery do
  begin
    Close;
    SQL.Clear;
    SQL.Add('select S.LISTNO , G.GDSID ,G.GDSINID , G.GDSNAME , G.SPECIFY ,G.UOMID ,');
    SQL.Add('S.UNITPRICE , S.TOTALQTY ,S.DISCOUNT ,S.AMOUNT ,S.ROWNO');
    SQL.Add('FROM STOCKIMPORTBODY S ,GOODS G WHERE S.GDSINID = G.GDSINID');
    SQL.Add('and ListNO = :ListNO ORDER BY ROWNO');
    Parameters.ParamByName('ListNO').Value := '00001';
    Open;
    Filtered := False;
    FilterGroup := fgNone;
  end;而我在BeforePost,AfterPost 事件中写:procedure TOrigInputStockForm.BodyQueryBeforePost(DataSet: TDataSet);
begin
  showmessage(dataset.Fields.Fields[1].AsString);{可以正常看到输入的数据}
end;procedure TOrigInputStockForm.BodyQueryAfterPost(DataSet: TDataSet);
begin
  showmessage(dataset.Fields.Fields[1].AsString);{显示的只有一片空白,但插入的这条记录还存在,只不过没有内容!}
end;
如果我修改原来已存在的记录的话,则会出现在BeforePost显示的是你修改后的值,但到了AfterPost时,显示的就还是最开始没有被修改的值!不知道这是为什么?

解决方案 »

  1.   

    不紧张怎么行呢?晚上碰到这种问题,不是鬼是什么?啊....TNND,谁在后面拍我背?不是真的是鬼吧!
      

  2.   

    关键的问题是,我上面的一个SQL语句其实关联到了三个表!这个adoquery被命名为BodyQuery还有一个称之为HeadQuery这两个Query就是用ListNO字段来关联的!我在这里只是为了简单,所以没有写出来罢了!
      

  3.   

    数据库哪能说换就换的呀~!这可是公司的不知道称不称得上是MRPII的系统,够复杂的了!如果要换的话,我们还得花大半年时间重来呀!
      

  4.   

    你用SHOWMESSAGE显示的只能是在你界面上的数据
    而已经POST数据库的是无法显示的呀!
    你可以用DBEDIT看看是否已经POST数据库了
      

  5.   

    To:回复人: ddvboy(ddv)  我用的是ADO的BatchUpdate模式,所以数据是暂时存在客户端,暂时是不会提交到数据库中的!
      而且我ShowMessage的是记录集中的数据,如果显示为空的话,当然是什么数据也没有了!
      

  6.   

    MD,我也遇到这类事了/我的TClientDataSet删除了一行数据后,保存也没有提示出错, 
    可是当下次打开时,那条被删除的记录又出现了!
    但是你增加的记录可以保存进去也可删除就不会出问题!
    前二天还好好的.真是活见鬼了.
      

  7.   

    1
    最好不要用select 打开多个表来进行增加和删除呀,那样要是删除则会把多
    个表的数据都同是删除呀,最好用lookup字段呀,
    2
    TCleintDataSet 是做什么呀,是连三层吗,TCleintDataSet一般做了修改都ApplyUpdates()来提交数据呀。
      

  8.   

    为略表谢意,恳请XXXXX来领分:)CoolSlob 说:
    hi, 问你个怪问题
    Tian 说:
    sure
    CoolSlob 说:
    我有一应用程序(.exe文件),在A机器上运行正确,在B机器上却错误,所做的程序仅仅是修改数据,ADO版本一样,连接的数据库也是一样(Oracle9i)
    Tian 说:
    what kind of errors?  
    CoolSlob 说:
    在机器A上可以执行修改数据的操作,而机器B上却不可以!没有任何错误信息出现!
    Tian 说:
    are you using odbc?
    CoolSlob 说:
    OLE DB for ORACLE
    CoolSlob 说:
    到了机器B上,它的Dataset就好像是ReadOnly了,不能接受用户输入数据了
    Tian 说:
    what about oracle client side driver version?
    CoolSlob 说:
    v9
    Tian 说:
    not the database, but the client utility version
    CoolSlob 说:
     client utility 在哪里查看呀?因为我不是用Oracle的 
    CoolSlob 说:
    这个问题也是我同学的问题 
    Tian 说:
    oracle has a server component and client utility, basically, the utility gives you the tools and basic drivers
    CoolSlob 说:
    嘻嘻 他说他找不到,我看是没办法救他了
    Tian 说:
    go odbc data source administrator, go to Drivers tab, look there, check oracle's version
    CoolSlob 说:
    他发一这么一串:oracle in oradb V9!是不是这个?
    CoolSlob 说:
    microsoft ODBC for ORACLE V2.573
    CoolSlob 说:
    还有这个 
    CoolSlob 说:
     我请你喝咖啡先
    Tian 说:
    what's his connection string?
    Tian 说:
    ask him to check the drivers on a and b machines are same
    CoolSlob 说:
    Provider=OraOLEDB.Oracle.1;Password=frans;Persist Security Info=True;User ID=frans;Data Source=oracled是指这个connection string吗?
    Tian 说:
    yes, looks fine
    Tian 说:
    ask him to remove "Persist Security Info=True;"
    CoolSlob 说:
    ok,
    CoolSlob 说:
    是的,是客户端的问题,V8与V9的不一样,V9会出问题!
    CoolSlob 说:
    我同学说的 
    CoolSlob 说:
    呵呵 让他自己再看了,谢谢你!我也要做事了,为了帮同学,公司的事都没做,
    Tian 说:
    no problem
    CoolSlob 说:
    为略表心意,来这里 领分吧 我等你http://expert.csdn.net/Expert/TopicView1.asp?id=1137952
    Tian 说:
    hehe, no need
      

  9.   

    Tian 说:
    by the way, here is a link for ado connection strings for all kinds of dbs:http://www.able-consulting.com/MDAC/ADO/Connection/OLEDB_Providers.htm#OLEDBProviderForOracleFromOracle
      

  10.   

    去啦,我把我们的聊天记录 都贴上去了,没人敢说我们“倒分”的,呵呵 
    Tian 说:
    really no need
    CoolSlob 说:
    代我谢他!
    CoolSlob 说:
    嘻嘻 
    CoolSlob 说:
    那我代领啦 <<<------------------Here!!!
    Tian 说:
    sure, please thank him for his kindness<<<------------------Here!!!