读书人

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

发布时间: 2012-03-01 10:25:46 作者: rapoo

关于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才是,逻辑混乱了,楼主静下心来整理一下思路吧

读书人网 >.NET

热点推荐