我用存储过程将一个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语句以后,就要出现级联的字段不能修改的问题,请知道的同志给予赐教!
谢谢了
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语句以后,就要出现级联的字段不能修改的问题,请知道的同志给予赐教!
谢谢了
解决方案 »
- 急急!!!Delphi 調用 label matrix
- delphi .dpk与.dpl有什么不同?
- INDY的TIDTCPSERVER在有客户端连接时关闭服务器程序时,总是报线程超时,该如何解决?
- 请问民航在线售票系统是用什么语言/数据库开发的?
- Tdxdbtreelist有没分组功能吗?
- 程序有1个主窗体(包含一个treeview控件),3个子窗体.实现功能:点击treeview项目后,3个子窗体能知道被点击项目的名字.
- 《天下无贼》与it对照手册
- 交叉报表如何设计?
- 我刚装上XPMenu控件,觉得不爽,怎么卸掉它,有谁知道金山词霸2002具体是哪一套XPMenu做的吗?请告诉我详细下载地址?
- 如何屏闭delete键?????
- 当DBGRIDEH放在PageControl里面的时候,下面的代码就无效了
- 利用函数或处理过程调用多个 frame 的问题
FROM 表BCI_name是一个表达式当然不能修改
with CDS1do
begin
FieldDefs.Add('Field1',ftString,100);
end;
CDS1.CreateDataSet;
CDS1.APPEND;
CDS1.FieldByName('CI_Name').AsString = CDS2.FieldByName('CI_Name').AsString
FROM 表B看来你的ci_name并不是表B的字段,既然你要更新的这个字段你应该操作表A才是,逻辑混乱了,楼主静下心来整理一下思路吧
用
存储过程拼凑过一个语句
比如得的变量@v1,@v2,@v3,@v4有查询值的时候
SELECT TOP 1 V1=@V1,V2=@V2,V3=@V3,V4=@V4 FROM SYSOBJECTS无查询值的时候
SELECT TOP1 V1=CAST(NULL AS VARCHAR), V2=CAST(NULL AS VARCHAR), V3=CAST(NULL AS VARCHAR), V4=CAST(NULL AS INT) FROM SYSOBJECTS WHERE 1<>1我用这样的存储过程完成过两个ClientDataSet的转换,可是为什么到这里却不行呢?要不我把语句改成这样的语句来试一试
SELECT * FROM (SELECT TOP 1 V1=@V1,V2=@V2,V3=@V3,V4=@V4 FROM SYSOBJECTS) A
DROP TABE #这样把ClientDataSet骗了过去,然后更新的时候我只要动态的把ClientDataSet生成一个sql语句就解决了! :)