有一个表,表名为A,另有一表,表名为A_HIS。它们都有BranchNO、ReportDate、LastBalance、NowBalance等字段我想用A_HIS表中的某个字段的内容替换到A表中,条件是A表的BranchNO要等于A_HIS中的BranchNO且A_HIS中的ReportDate要等于一个指定值,该值用参数指导定。我写了下面的代码,执行时出错!提示说“至少有一个参数没有被指定值”,请问我的代码哪有问题??请指教!
.......
.......
with AdoQuery1 do
begin
close;
sql.Clear ;
sql.Add('Update A set LastBalance=A_his.NowBalance ');
sql.Add('where BranchNO=A_his.BranchNO and A_his.ReportDate=:mLdateA');
Parameters.ParamByName('mLdateA').Value :=StrToDate(mLdate);
Execsql;
end;
........
........
.......
.......
with AdoQuery1 do
begin
close;
sql.Clear ;
sql.Add('Update A set LastBalance=A_his.NowBalance ');
sql.Add('where BranchNO=A_his.BranchNO and A_his.ReportDate=:mLdateA');
Parameters.ParamByName('mLdateA').Value :=StrToDate(mLdate);
Execsql;
end;
........
........
不能使用.value
直接使用字段名ReportDate
这样对么
update a set LastBalance=(select LastBalance from A_his where A_his.BranchNO=A.BranchNO and A_his.ReportDate=:mLdateA)
ParamByName('ReportDate').AsDate:=mLDataA
这么些就可以了
用你的推荐仍是出现同样的错误。:(
To 哭沙、Jency
我用的是AdoQuery,它的参数附值方法和Query的附值方法不同。:(
To 新新虫
能写写你用的代码吗?谢谢!!
用你的方法出现的错误是:“操作必须使用一个事更新的查询”!!
盼请指教!!!
你可以手工修改Paramter参数(在对象面板上),主要参数长度(Size)和类型
(type).
可你是怎么实现的呢?我一直以为是SQL的问题,因为以前我用VB写程序的时候就遇到过这类似的问题,也没有办法解决,可能是我动脑不够吧,可实在是想不出来了。
:(
sql.Add('from a_His,a where a.BranchNO=A_his.BranchNO and A_his.ReportDate=:mLdateA');
还是有问题啊,update命令里面是没有...from <表>...这样的写法的啊,这样的写法对SQL来说是非法的,程序也这样提示。若去掉from a_his,a 则提示“至少有一个参数未指定值”
sql.Add('Update A set LastBalance=A_his.NowBalance');
sql.Add(where exists(select * from A_his where a.BranchNO=A_his.BranchNO and A_his.ReportDate=:mLdateA)');
再试试
Access 数据库
用你刚才的建议,仍是出现“至少有一个参数未指定值”的提示,我想应该是delphi中,不能写a_his.BranchNO之类的语句吧,deplphi可能会把BranchNO当成a_his的一个属性而不是字段。
:(:(((((
2、如果还不行。只有不用参数了,直接写SQL语句也一样啊。如下:
sql.Add('Update A set LastBalance=A_his.NowBalance');
sql.Add(where exists(select * from A_his where a.BranchNO=A_his.BranchNO');
sql.Add('and A_his.ReportDate=''#'+datetostr(日期字段)+'#'')');
可是错误还是出现,报告说“参数A_his.NowBalance没有默认值”!百思不得其解…………………………
A表:
--------------------------------------
BranchNO Lastbalance ReportDate
--------------------------------------
A001 0 2002-10-01
A002 0 2002-10-01
A003 0 2002-10-01
A004 0 2002-10-01
A005 0 2002-10-01
A006 0 2002-10-01
A007 0 2002-10-01
A008 0 2002-10-01
A009 0 2002-10-01
A010 0 2002-10-01
--------------------------------------A_HIS表:
--------------------------------------
BranchNO Nowbalance ReportDate
--------------------------------------
A001 100 2002-9-30
A002 100 2002-9-30
A003 200 2002-9-30
A004 200 2002-9-30
A005 0 2002-9-30
A006 100 2002-9-30
A007 100 2002-9-30
A008 200 2002-9-30
A009 200 2002-9-30
A010 0 2002-9-30
--------------------------------------
通过一条SQL语句将A表变成如下表所示:
--------------------------------------
BranchNO Lastbalance ReportDate
--------------------------------------
A001 100 2002-10-01
A002 100 2002-10-01
A003 200 2002-10-01
A004 200 2002-10-01
A005 0 2002-10-01
A006 100 2002-10-01
A007 100 2002-10-01
A008 200 2002-10-01
A009 200 2002-10-01
A010 0 2002-10-01
--------------------------------------
我的头都大了……:(((((((((((::((((((((
update a set lastbalance =(select Nowbalance from a_his where branchno=a.branchno and reportdate=‘2002-10-01’)
还是提示"操作必须是一个可更新的查询。"
失败了………………
with AdoQuery1 do
begin
close;
sql.Clear ;
sql.Add('Update A,A_his set a.LastBalance=A_his.NowBalance ');
sql.Add('where a.BranchNO=A_his.BranchNO and A_his.ReportDate=:mLdateA');
Parameters.ParamByName('mLdateA').Value :=StrToDate(mLdate);
Execsql;
end;
你再试试看!