access violation at address 6F747475. read of address 6F747475.错误!

de410 2008-12-09 09:17:13
procedure Tietafm.DBEdit1Change(Sender: TObject);
var
taqry1:TadoQuery;
Tmp_Str:String;
begin
Tmp_Str:=' SELECT * FROM bmta '+' WHERE trim(TA001)=trim("'+dbedit1.Text+'")';
with taqry1 do
begin
taqry1.Close;
taqry1.SQL.Clear;
taqry1.SQL.Add(Tmp_Str);
taqry1.Open;
end;
if not taqry1.IsEmpty then
begin
taqry1.Free;
Application.MessageBox('对不起,产品编号不能重复', '添加数据错误', MB_OK);
DBEdit1.Clear;
tatable.Refresh;
tatable.Append;
Abort;
end
else
//Continue
end;

用意是当dbedit1中内容与数据库中的内容如果重复,则在dbedit1发生变化时,提示数据重复,但是当我编译程序时,老出现如题所示的错误!!郁闷中。。。
...全文
114 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
yinxd6112 2008-12-10
  • 打赏
  • 举报
回复
同楼上的
你的这种错误属于未创建对象就使用对象的。

这个地方也有问题
if not taqry1.IsEmpty then
begin
taqry1.Free; //未创建就释放对象
de410 2008-12-10
  • 打赏
  • 举报
回复
谢谢各位的解答~~
Corn1 2008-12-10
  • 打赏
  • 举报
回复
照这个错误提示的意思,是你在调用一个已经被释放了的对象。
如果如2楼所说,是由于未创建就使用对象,就不是这个错误地址,而应该是全0

程序改成:

procedure Tietafm.DBEdit1Change(Sender: TObject);
var
taqry1:TadoQuery;
Tmp_Str:String;
begin
Tmp_Str:=' SELECT * FROM bmta WHERE trim(TA001)=''' + trim(dbedit1.Text) + ''''; //原来的SQL语句也有问题
taqry1 := TADOQuery.Create(nil);
try
taqry1.Connection := ADOConnection1.Connection;
with taqry1 do
begin
Close;
SQL.Clear;
SQL.Add(Tmp_Str);
Open;
if not IsEmpty then
begin
Application.MessageBox('对不起,产品编号不能重复', '添加数据错误', MB_OK);
DBEdit1.Clear;
tatable.Refresh;
tatable.Append;
end;
end;
finally
taqry1.Free;
end;
end;

长沙三毛 2008-12-09
  • 打赏
  • 举报
回复
1)taqry1是局部对象,需要创建对象:taqry1 := TADOQuery.Create(Application);
2)taqry1需要一个ADOConnection连接,或建立自己的连接

2,498

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 数据库相关
社区管理员
  • 数据库相关社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧