with ADODataSet1 do begin Close; try CommandText:='insert into 特性评价表 select :SoftWareSN as 软件编号,特性编号 as 特性外编号 from 模型特性表 where 模型编号=1001'; Parameters.ParamByName('softwareSN').value:=???;//赋值 execsql; except raise; end; end;
非常感谢大家的关心,可是大家把我问题的主要矛盾和次要矛盾弄倒了 关于execSQL只是一个次要问题,因为我现在的程序执行是成功的。如果要说execSQL请告诉我如何在TADOdataSet中使用(我没有用query和Command),至于几位朋友说要给模型编号传值,我只能说我已写的很清楚了,这是个标识种子,会自动递增的好,下面是我的主要矛盾,是我问此问题最想知道的 SoftwareSN!!!!!!! SoftwareSN这个参数是我已知的(它并不存在于模型特性表中,所以我有此问),我已赋值给它,我就是想知道SQL语句这样写对吗?(因为这个SoftwareSN是“外来的”) 'insert into 特性评价表 (软件编号,特性外编号) select :SoftWareSN,特性编号 from 模型特性表 where 模型编号=:ModelSN' 从意思上来讲是对的,可是从SQL语法上来讲我觉得怪怪的,好像不对。每次提问,我都怕我表意不清,唉,谢谢
不应该用open方法,应该用ExecSql方法 with ADODataSet1 do begin Close; try CommandText:='insert into 特性评价表 (软件编号,特性外编号) select :SoftWareSN,特性编号 from 模型特性表 where 模型编号=1001'; ExecSql; except end; end; 如果SoftWareSN已经知道,也可以这样直接用常量代替,假设SoftWareSn=5,可以这样写 with ADODataSet1 do begin Close; try CommandText:='insert into 特性评价表 (软件编号,特性外编号) select 5,特性编号 from 模型特性表 where 模型编号=1001'; ExecSql; except end; end;
select :para from table_name这从SQL语法上看有什么错误么?和select aa,2*4 from table_name 有什么区别么?都是返回常量啊 ★==========★==========★ ‖ Delphi里的最后一丝游魂‖ ★==========★==========★
★==========★==========★
‖ Delphi里的最后一丝游魂‖
★==========★==========★
exesql is right
adocommand.exec;
begin
Close;
try
CommandText:='insert into 特性评价表 select :SoftWareSN as 软件编号,特性编号 as 特性外编号 from 模型特性表 where 模型编号=1001';
Parameters.ParamByName('softwareSN').value:=???;//赋值
execsql;
except
raise;
end;
end;
===============================
特性编号 int 主键 设为标识
===============================
你的 Insert 语句中怎么没有此字段?这肯定不行,假如你顺利增加了一条记录(此时“特性编号”为 Null),那么增加下一条记录时因为有重复的肯定无法 Insert 啊
用query的各种属性会比较好。
关于execSQL只是一个次要问题,因为我现在的程序执行是成功的。如果要说execSQL请告诉我如何在TADOdataSet中使用(我没有用query和Command),至于几位朋友说要给模型编号传值,我只能说我已写的很清楚了,这是个标识种子,会自动递增的好,下面是我的主要矛盾,是我问此问题最想知道的 SoftwareSN!!!!!!!
SoftwareSN这个参数是我已知的(它并不存在于模型特性表中,所以我有此问),我已赋值给它,我就是想知道SQL语句这样写对吗?(因为这个SoftwareSN是“外来的”)
'insert into 特性评价表 (软件编号,特性外编号) select :SoftWareSN,特性编号 from 模型特性表 where 模型编号=:ModelSN'
从意思上来讲是对的,可是从SQL语法上来讲我觉得怪怪的,好像不对。每次提问,我都怕我表意不清,唉,谢谢
with ADODataSet1 do
begin
Close;
try
CommandText:='insert into 特性评价表 (软件编号,特性外编号) select :SoftWareSN,特性编号 from 模型特性表 where 模型编号=1001';
ExecSql;
except end;
end;
如果SoftWareSN已经知道,也可以这样直接用常量代替,假设SoftWareSn=5,可以这样写
with ADODataSet1 do
begin
Close;
try
CommandText:='insert into 特性评价表 (软件编号,特性外编号) select 5,特性编号 from 模型特性表 where 模型编号=1001';
ExecSql;
except end;
end;
★==========★==========★
‖ Delphi里的最后一丝游魂‖
★==========★==========★
可立即看结果,亦可查看语法错误。
--我向来这么做的,不需求人了
好象没这个标准吧?
你的:SoftWareSN可能在TADODataSet里被解释为一个常量了。
这样的话由于是个常量,SELECT 可能看到一个列的值全是":SoftWareSN",而INSERT 语句由于没有对应的列而不起任何作用!不知道是不是这样,见笑了!
chen_zhonghua(小狼)
ajun21cn(每次问问题都给分的人)
你们三各老师说的好棒,听得我好舒服啊!to bluemeteor(挂月) :我原来的疑问根源就是不知道可以选择常量。
adocommand.exec;
就算是用ADOQuery,也无法返回数据集,SQL Server2000的帮助中好像说用insert into+ SELECT 子查询为一行或多行指定数据值返回的是成功插入的记录数(integer),而我非常渴望返回的是DataSet,请教各位。
这个问题看来只能由真正的高手来回答了。