Access数据库中使用update出错
我有两个数据库,名称和结构、数据样例如下:
User1.mdb
UserID UserName ReportCount …………
某某 王一 23 …………
某某 马二 45 …………
某某 张三 26 …………
某某 李四 78 …………
某某 胡五 25 …………
Report.mdb
Author title …………
王一 某某 …………
马二 某某 …………
马二 某某 …………
张三 某某 …………
张三 某某 …………
张三 某某 …………
赵六 某某 …………
赵六 某某 …………
许七 某某 …………
许七 某某 …………
如上所见,数据库User1的字段ReportCount记录的是Report数据库的Author的文章数。
现在我面临的困扰是,两个数据库的记录不统一,需要整理。我需要在User1中查看,如果Report数据库中的文章数不正确,则统计添加。
我用的是Access数据库。我用了如下语句:
procedure TAutoArticlecount_Form.BitBtn1Click(Sender: TObject);
var
sqlstr:string;
begin
if ADOTable1.eof=false then
with ADOQuery1 do
begin
SQL.Clear;
sqlstr:='update User1 set User1.ReportCount=( select count(Author) from Report where Report.Author=User1.UserName )';
SQL.Add(sqlstr);
showmessage(sqlstr);
ExecSQL;
end;
ADOTable1.Refresh ;
DBGrid1.DataSource :=DataSource1;
end;结果出现出错提示:
Operation must use an updateable query 请问我出了什么错,应该如何修改呢?
我有两个数据库,名称和结构、数据样例如下:
User1.mdb
UserID UserName ReportCount …………
某某 王一 23 …………
某某 马二 45 …………
某某 张三 26 …………
某某 李四 78 …………
某某 胡五 25 …………
Report.mdb
Author title …………
王一 某某 …………
马二 某某 …………
马二 某某 …………
张三 某某 …………
张三 某某 …………
张三 某某 …………
赵六 某某 …………
赵六 某某 …………
许七 某某 …………
许七 某某 …………
如上所见,数据库User1的字段ReportCount记录的是Report数据库的Author的文章数。
现在我面临的困扰是,两个数据库的记录不统一,需要整理。我需要在User1中查看,如果Report数据库中的文章数不正确,则统计添加。
我用的是Access数据库。我用了如下语句:
procedure TAutoArticlecount_Form.BitBtn1Click(Sender: TObject);
var
sqlstr:string;
begin
if ADOTable1.eof=false then
with ADOQuery1 do
begin
SQL.Clear;
sqlstr:='update User1 set User1.ReportCount=( select count(Author) from Report where Report.Author=User1.UserName )';
SQL.Add(sqlstr);
showmessage(sqlstr);
ExecSQL;
end;
ADOTable1.Refresh ;
DBGrid1.DataSource :=DataSource1;
end;结果出现出错提示:
Operation must use an updateable query 请问我出了什么错,应该如何修改呢?
解决方案 »
- IDHTTP能否上传大文件
- TcpClient 关于如何使用~~~~~?--------------------基础问题 高分
- 高分问题!!idtcpclient如何接受从一个JAVA返回的TCP消息呢?
- 如何用Delphi控制控件的透明度啊?
- DBgrid可以这样更新数据吗?
- 感谢Linux2001提供ADSL计时器代码
- 怎样使DBGrid控件连续选择几条记录,比如可以按SHIFT键再单击一下???
- qreport报表,出怪问题?
- tgroupbox控件与tradiogroup控件的区别
- 模拟键盘击键(急!!!)
- 各位好!怎么样减小delphi7编译程序的大小,谢谢讨论!
- 哪有Delphi6的官方的中文班下啊
回复二:不支持复合SQL语句,默……那,要达到我希望的目的,该如何是好?
while not ADOTable1.eof do
begin
ADOQuery1.sql.text :='select Count(Author) as T from report where Auther=:A';
AdoQuery1.parameter.parameterByName('A').value=AdoTable1.FieldByName
('UserName').asstring;
AdoQuery1.open;
if AdoQuery1.FieldByName('T').asInteger<>AdoTable.FieldByName('').asInteger then begin
//更新
end;
AdoTable.next;
end;
adoquery1.sql.text := 'select username, reportcount from user1';
adoquery1.open;
adoquery1.first;
while not adoquery1.eof do
begin
adoquery2.close;
adoquery2.sql.text := 'select count(*) as num from report where author = ' + quotedsrt(varrostr(adoquery1.fieldvalues['username']));
adoquery2.open;
if varrostr(adoquery1.fieldvalues['reportcount']) <> varrostr(adoquery2.fieldvalues['num']) then
begin
adoquery3.close;
adoquery3.sql.text := 'update user1 set reportcount = ' + varrostr(adoquery2.fieldvalues['num']) + ' where name = ' + quotedsrt(varrostr(adoquery1.fieldvalues['username']));
adoquery3.execsql;
end; adoquery1.next;
end;
begin
ADOQuery1.close;
ADOQuery1.SQL.Clear;
sqlstr:='select * from Article where Author=';
sqlstr:=sqlstr+Label3.Caption+DBEdit1.text+Label3.Caption;
ADOQuery1.SQL.Add(sqlstr);
ADOQuery1.ExecSQL;
ADOQuery1.open;
ADOTable1.edit;
DBEdit3.Text:=inttostr(DataSource2.DataSet.RecordCount) ;
ADOTable1.Post ;
ADOTable1.next;
end;
以上,运行通过,简单的说,我用的是DataSource2.DataSet.RecordCount统计。