.......
.......
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;
........
........
21 个解决方案
#1
--------------
不能使用.value
直接使用字段名ReportDate
不能使用.value
直接使用字段名ReportDate
#2
ParamByName('ReportDate').AsDate:=mLDataA
这样对么
这样对么
#3
应该是SQL语句错误,写成这样应该没
update a set LastBalance=(select LastBalance from A_his where A_his.BranchNO=A.BranchNO and A_his.ReportDate=:mLdateA)
update a set LastBalance=(select LastBalance from A_his where A_his.BranchNO=A.BranchNO and A_his.ReportDate=:mLdateA)
#4
不对,是你负值语句的问题,
ParamByName('ReportDate').AsDate:=mLDataA
这么些就可以了
ParamByName('ReportDate').AsDate:=mLDataA
这么些就可以了
#5
To iceshape
用你的推荐仍是出现同样的错误。:(
To 哭沙、Jency
我用的是AdoQuery,它的参数附值方法和Query的附值方法不同。:(
To 新新虫
能写写你用的代码吗?谢谢!!
用你的推荐仍是出现同样的错误。:(
To 哭沙、Jency
我用的是AdoQuery,它的参数附值方法和Query的附值方法不同。:(
To 新新虫
能写写你用的代码吗?谢谢!!
#6
To iceshape:
用你的方法出现的错误是:“操作必须使用一个事更新的查询”!!
用你的方法出现的错误是:“操作必须使用一个事更新的查询”!!
#7
我现在的解决方法是先把A_HIS中的表中满足ReportDate的数据先放到一个AdoQueryTemp中,然后对A表进行循环,逐个与AdoQueryTemp中的数据进行匹配,这样能实现我的要求,可是较慢,若数据量很大时………… 天哪!!那不知道会要等多久,有没有好办法呀?难道用一条SQL语句不能解决吗??
盼请指教!!!
盼请指教!!!
#8
我也遇到过相同问题。主要是Delphi出问题。
你可以手工修改Paramter参数(在对象面板上),主要参数长度(Size)和类型
(type).
你可以手工修改Paramter参数(在对象面板上),主要参数长度(Size)和类型
(type).
#9
谢谢zxkid!
可你是怎么实现的呢?我一直以为是SQL的问题,因为以前我用VB写程序的时候就遇到过这类似的问题,也没有办法解决,可能是我动脑不够吧,可实在是想不出来了。
:(
可你是怎么实现的呢?我一直以为是SQL的问题,因为以前我用VB写程序的时候就遇到过这类似的问题,也没有办法解决,可能是我动脑不够吧,可实在是想不出来了。
:(
#10
就算更新了A表,也只更新第一条记录………………
#11
对不起是我没看清楚。
sql.Add('Update A set LastBalance=A_his.NowBalance ');
sql.Add('from a_His,a where a.BranchNO=A_his.BranchNO and A_his.ReportDate=:mLdateA');
sql.Add('Update A set LastBalance=A_his.NowBalance ');
sql.Add('from a_His,a where a.BranchNO=A_his.BranchNO and A_his.ReportDate=:mLdateA');
#12
To zxkid:
还是有问题啊,update命令里面是没有...from <表>...这样的写法的啊,这样的写法对SQL来说是非法的,程序也这样提示。若去掉from a_his,a 则提示“至少有一个参数未指定值”
还是有问题啊,update命令里面是没有...from <表>...这样的写法的啊,这样的写法对SQL来说是非法的,程序也这样提示。若去掉from a_his,a 则提示“至少有一个参数未指定值”
#13
什么数据库?
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)');
再试试
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)');
再试试
#14
To zxkid
Access 数据库
用你刚才的建议,仍是出现“至少有一个参数未指定值”的提示,我想应该是delphi中,不能写a_his.BranchNO之类的语句吧,deplphi可能会把BranchNO当成a_his的一个属性而不是字段。
:(:(((((
Access 数据库
用你刚才的建议,仍是出现“至少有一个参数未指定值”的提示,我想应该是delphi中,不能写a_his.BranchNO之类的语句吧,deplphi可能会把BranchNO当成a_his的一个属性而不是字段。
:(:(((((
#15
1、可能是Delphi的问题。在对象面板上设置Adoquery的Paramters属性,看看有没有参数,核对参数是否正确。如name是否是mLdateA,字段长度和类型是否与数据库的A_his.ReportDate字段相匹配。
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(日期字段)+'#'')');
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(日期字段)+'#'')');
#16
可是错误还是出现,报告说“参数A_his.NowBalance没有默认值”!百思不得其解…………………………
#17
这些是Access中的表
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
--------------------------------------
我的头都大了……:(((((((((((::((((((((
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
--------------------------------------
我的头都大了……:(((((((((((::((((((((
#18
试试这样的SQL语句:
update a set lastbalance =(select Nowbalance from a_his where branchno=a.branchno and reportdate=‘2002-10-01’)
update a set lastbalance =(select Nowbalance from a_his where branchno=a.branchno and reportdate=‘2002-10-01’)
#19
To b51:
还是提示"操作必须是一个可更新的查询。"
失败了………………
还是提示"操作必须是一个可更新的查询。"
失败了………………
#20
是你的最后赋值错误了!你应该安上面的说法仔细认真去核对!
#21
在Access里面update语句应该如此:
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;
你再试试看!
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;
你再试试看!
#1
--------------
不能使用.value
直接使用字段名ReportDate
不能使用.value
直接使用字段名ReportDate
#2
ParamByName('ReportDate').AsDate:=mLDataA
这样对么
这样对么
#3
应该是SQL语句错误,写成这样应该没
update a set LastBalance=(select LastBalance from A_his where A_his.BranchNO=A.BranchNO and A_his.ReportDate=:mLdateA)
update a set LastBalance=(select LastBalance from A_his where A_his.BranchNO=A.BranchNO and A_his.ReportDate=:mLdateA)
#4
不对,是你负值语句的问题,
ParamByName('ReportDate').AsDate:=mLDataA
这么些就可以了
ParamByName('ReportDate').AsDate:=mLDataA
这么些就可以了
#5
To iceshape
用你的推荐仍是出现同样的错误。:(
To 哭沙、Jency
我用的是AdoQuery,它的参数附值方法和Query的附值方法不同。:(
To 新新虫
能写写你用的代码吗?谢谢!!
用你的推荐仍是出现同样的错误。:(
To 哭沙、Jency
我用的是AdoQuery,它的参数附值方法和Query的附值方法不同。:(
To 新新虫
能写写你用的代码吗?谢谢!!
#6
To iceshape:
用你的方法出现的错误是:“操作必须使用一个事更新的查询”!!
用你的方法出现的错误是:“操作必须使用一个事更新的查询”!!
#7
我现在的解决方法是先把A_HIS中的表中满足ReportDate的数据先放到一个AdoQueryTemp中,然后对A表进行循环,逐个与AdoQueryTemp中的数据进行匹配,这样能实现我的要求,可是较慢,若数据量很大时………… 天哪!!那不知道会要等多久,有没有好办法呀?难道用一条SQL语句不能解决吗??
盼请指教!!!
盼请指教!!!
#8
我也遇到过相同问题。主要是Delphi出问题。
你可以手工修改Paramter参数(在对象面板上),主要参数长度(Size)和类型
(type).
你可以手工修改Paramter参数(在对象面板上),主要参数长度(Size)和类型
(type).
#9
谢谢zxkid!
可你是怎么实现的呢?我一直以为是SQL的问题,因为以前我用VB写程序的时候就遇到过这类似的问题,也没有办法解决,可能是我动脑不够吧,可实在是想不出来了。
:(
可你是怎么实现的呢?我一直以为是SQL的问题,因为以前我用VB写程序的时候就遇到过这类似的问题,也没有办法解决,可能是我动脑不够吧,可实在是想不出来了。
:(
#10
就算更新了A表,也只更新第一条记录………………
#11
对不起是我没看清楚。
sql.Add('Update A set LastBalance=A_his.NowBalance ');
sql.Add('from a_His,a where a.BranchNO=A_his.BranchNO and A_his.ReportDate=:mLdateA');
sql.Add('Update A set LastBalance=A_his.NowBalance ');
sql.Add('from a_His,a where a.BranchNO=A_his.BranchNO and A_his.ReportDate=:mLdateA');
#12
To zxkid:
还是有问题啊,update命令里面是没有...from <表>...这样的写法的啊,这样的写法对SQL来说是非法的,程序也这样提示。若去掉from a_his,a 则提示“至少有一个参数未指定值”
还是有问题啊,update命令里面是没有...from <表>...这样的写法的啊,这样的写法对SQL来说是非法的,程序也这样提示。若去掉from a_his,a 则提示“至少有一个参数未指定值”
#13
什么数据库?
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)');
再试试
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)');
再试试
#14
To zxkid
Access 数据库
用你刚才的建议,仍是出现“至少有一个参数未指定值”的提示,我想应该是delphi中,不能写a_his.BranchNO之类的语句吧,deplphi可能会把BranchNO当成a_his的一个属性而不是字段。
:(:(((((
Access 数据库
用你刚才的建议,仍是出现“至少有一个参数未指定值”的提示,我想应该是delphi中,不能写a_his.BranchNO之类的语句吧,deplphi可能会把BranchNO当成a_his的一个属性而不是字段。
:(:(((((
#15
1、可能是Delphi的问题。在对象面板上设置Adoquery的Paramters属性,看看有没有参数,核对参数是否正确。如name是否是mLdateA,字段长度和类型是否与数据库的A_his.ReportDate字段相匹配。
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(日期字段)+'#'')');
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(日期字段)+'#'')');
#16
可是错误还是出现,报告说“参数A_his.NowBalance没有默认值”!百思不得其解…………………………
#17
这些是Access中的表
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
--------------------------------------
我的头都大了……:(((((((((((::((((((((
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
--------------------------------------
我的头都大了……:(((((((((((::((((((((
#18
试试这样的SQL语句:
update a set lastbalance =(select Nowbalance from a_his where branchno=a.branchno and reportdate=‘2002-10-01’)
update a set lastbalance =(select Nowbalance from a_his where branchno=a.branchno and reportdate=‘2002-10-01’)
#19
To b51:
还是提示"操作必须是一个可更新的查询。"
失败了………………
还是提示"操作必须是一个可更新的查询。"
失败了………………
#20
是你的最后赋值错误了!你应该安上面的说法仔细认真去核对!
#21
在Access里面update语句应该如此:
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;
你再试试看!
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;
你再试试看!