本人初学,采用DBGRID DataSource ADOQuery ADOConnection 连接mysql数据库,数据库连接正常,查询正常,修改数据时出现问题(部分代码如下),在xp下用ADOQuery1.Open;ADOQuery1.edit..... ADOQuery1.Post;正常,能成功修改数据,但在win7下出错,提示“数据提供程序或其他服务返回 E_FAIL状态”,修改ADOQuery locktype后,win7下不提示错误,但程序执行时DBGRID显示数据已经修改了,用select * from 刷新数据后发现数据并未修改。使用{}内代码时win7下正常,也能成功修改数据。请问大师们,如何在win7下使用ADOQuery1.Open;ADOQuery1.edit..... ADOQuery1.Post 成功修改数据。
部分代码如下:
if edit1.Text<>'' then
begin
Memo1.Lines.Add('');
Memo1.Lines.Add('高频模块');
IdIcmpClient1.Host:=Edit1.Text;
IdIcmpClient1.ReceiveTimeout:=1000;
Button1.Enabled:=false;
try
for i:=0 to 1 do
begin
IdIcmpClient1.Ping;
if (IdIcmpClient1.ReplyStatus.BytesReceived =0) or (IdIcmpClient1.ReplyStatus.TimeToLive =0) then
begin
with ADOQuery1 do
begin
{ ADOQuery1.Close;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Text:='Update cbat SET 状态1="0" where id='+idh ;
ADOQuery1.ExecSQL;
ADOQuery1.Close;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add('select * from cbat order by id ');
ADOQuery1.Open;
ADOQuery1.Locate('id',strtoint(idh),[loPartialKey]);
ADOQuery1.EnableControls;
}
ADOQuery1.Open;
ADOQuery1.edit;
ADOQuery1.FieldByName('状态1').value:='0';
ADOQuery1.Post;
end;
end
else
begin
with ADOQuery1 do
begin
{ ADOQuery1.Close;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Text:='Update cbat SET 状态1="1" where id='+idh ;
ADOQuery1.ExecSQL;
ADOQuery1.Close;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add('select * from cbat order by id ');
ADOQuery1.Open;
ADOQuery1.Locate('id',strtoint(idh),[loPartialKey]);
ADOQuery1.EnableControls;
}
ADOQuery1.Open;
ADOQuery1.Edit;
ADOQuery1.FieldByName('状态1').value:='1';
ADOQuery1.Post;
end;
end;
Application.ProcessMessages;
end;
finally
Button1.Enabled:=true;
end;
end;
部分代码如下:
if edit1.Text<>'' then
begin
Memo1.Lines.Add('');
Memo1.Lines.Add('高频模块');
IdIcmpClient1.Host:=Edit1.Text;
IdIcmpClient1.ReceiveTimeout:=1000;
Button1.Enabled:=false;
try
for i:=0 to 1 do
begin
IdIcmpClient1.Ping;
if (IdIcmpClient1.ReplyStatus.BytesReceived =0) or (IdIcmpClient1.ReplyStatus.TimeToLive =0) then
begin
with ADOQuery1 do
begin
{ ADOQuery1.Close;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Text:='Update cbat SET 状态1="0" where id='+idh ;
ADOQuery1.ExecSQL;
ADOQuery1.Close;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add('select * from cbat order by id ');
ADOQuery1.Open;
ADOQuery1.Locate('id',strtoint(idh),[loPartialKey]);
ADOQuery1.EnableControls;
}
ADOQuery1.Open;
ADOQuery1.edit;
ADOQuery1.FieldByName('状态1').value:='0';
ADOQuery1.Post;
end;
end
else
begin
with ADOQuery1 do
begin
{ ADOQuery1.Close;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Text:='Update cbat SET 状态1="1" where id='+idh ;
ADOQuery1.ExecSQL;
ADOQuery1.Close;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add('select * from cbat order by id ');
ADOQuery1.Open;
ADOQuery1.Locate('id',strtoint(idh),[loPartialKey]);
ADOQuery1.EnableControls;
}
ADOQuery1.Open;
ADOQuery1.Edit;
ADOQuery1.FieldByName('状态1').value:='1';
ADOQuery1.Post;
end;
end;
Application.ProcessMessages;
end;
finally
Button1.Enabled:=true;
end;
end;
解决方案 »
- Delphi + ADO + Oracle + ReportBuilder 问题求解?
- delphi7(ado) + oracle9i,oracle9i客户端程序如何分发???
- 整了2天了,还没弄出来(MDI数据库连接问题)
- 调用 dll 文件出错,急!!!!帮忙。
- 世界上最简单的问题
- 请教问题。
- 在isapi中,如何可分解读取图像和文字混合上传的request.content值??
- 给你一个问题,加分。
- Delph是数据库前端应用程序的开发利器,如何进阶的学习Delphi?
- 一个比较初级的问题,关于PARADOX表的数据
- datasnap服务端报ntdll.dll错误,midas.dll错误!!!
- DELPHI xe7 FastReport5 问题
0两侧分别用两个单引号另外,
with ADOQuery1 do
begin
ADOQuery1.Close; //ADOQuery1可以省略
Close;//这样写即可,with..do语句的目的就是为了省略
......
end;
一、没看出来你的 for 起了什么作用,你没有定位行,也许我看的不仔细;
二、数据库字段尽量不要用中文;
三、WIN7的有些设置和XP是不一样的,比如日期格式就会造成整个软件崩溃;
四、adoquery除了查询语句等必须设置外,不要修改诸如locktype等任何设置;
五、注意你的查询语句,联合查询结果在不同的环境下会有不同的效果,如果你想直接编辑数据,尽量避免联合查询,包括联合查询的视图。
With ADOQuery1 do
begin
Open;
First;
Edit;
.....
Post;
end;