首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > .NET >

关于ClientDataSet的有关问题!请赐教

2012-03-01 
关于ClientDataSet的问题!请赐教我用存储过程将一个ADOQuery执行得到的Data赋予了ClientDataSet的Detail,

关于ClientDataSet的问题!请赐教
我用存储过程将一个ADOQuery执行得到的Data赋予了ClientDataSet   的Detail,在初

始化的时候,这个结果集中是没值的,然后我在执行了一个查询事件后得到一个临时

的ClientDataSet,两个语句是相同的.但是一个有数据,一个没有数据,这个时候,我

就把有数据的向没有数据的里面插,但是要抱错误,   说里面有一个列不能被修改.

查询语句类似于

SELECT   *,   CI_Name=(SELECT   CI_NAME   FROM   表A   WHERE   表A.ID=表B.ID)
FROM   表B

然后插入语句是
CDS1.APPEND;
CDS1.FieldByName( 'CI_Name ').AsString   =   CDS2.FieldByName( 'CI_Name ').AsString

我以前用过这些的存储过程,都可以添加,但是这次就不行不晓得为什么!

CREATE   PROCEDURE   T1
    @ID
AS
BEIGN
DECLARE   @M   int

      IF   (SELECT   *   FROM   表A   WHERE   ID=@ID)
            SELECT   @M   =   数字列   FROM   表A

      IF   @M> 50  
          SELECT   TOP   1   REVALUE=@M   FROM   Sysobjects

      IF   RTRIM(LTRIM(@ID))=   0  
          SELECT   REVALUE=CAST(NULL   AS   INT)   FROM   sysobjects
END
GO

我以前用这个类似的存储过程是成功执行了我想得到的结果,但是这次使用了级
联SQL语句以后,就要出现级联的字段不能修改的问题,请知道的同志给予赐教!
谢谢了

[解决办法]
SELECT *, CI_Name=(SELECT CI_NAME FROM 表A WHERE 表A.ID=表B.ID)
FROM 表B

CI_name是一个表达式当然不能修改
[解决办法]
这样是不能修改的

要用 CDS1:=TCliendDataSet.Creare(nil);
with CDS1do
begin
FieldDefs.Add( 'Field1 ',ftString,100);
end;
CDS1.CreateDataSet;
CDS1.APPEND;
CDS1.FieldByName( 'CI_Name ').AsString = CDS2.FieldByName( 'CI_Name ').AsString
[解决办法]
SELECT *, CI_Name=(SELECT CI_NAME FROM 表A WHERE 表A.ID=表B.ID)
FROM 表B

看来你的ci_name并不是表B的字段,既然你要更新的这个字段你应该操作表A才是,逻辑混乱了,楼主静下心来整理一下思路吧

热点排行