delphi的小问题,各位帮帮忙啊,急用!

时间:2021-11-20 14:32:00
这是源代码,每次执行查询时当时都不能显示,要关闭窗体重新打开时才有.而且,如果一连点击两次查询按钮,就会有" project project1.exe raised exception class EDBEngineError with message 'key violation'.process stopped.use step or run to continue."的提示.请问这是哪里出了问题,该怎么解决啊!
procedure Tform77.Button1Click(Sender: TObject);
var
zhenghao:string;
table3:ttable;
begin
if table1.Locate('书名',edit1.Text ,[lopartialkey])  then
 begin
 zhenghao:=table1.FieldValues ['借阅证号'];
 if table2.Locate('借阅证号',zhenghao,[lopartialkey]) then
  begin
  table3:=ttable.Create(self);
  table3.DatabaseName :='rsg1';
  table3.TableName :='zhongjie.db';
  table3.Open ;
  table3.Append ;
  table3.FieldByName('借阅证号').AsString :=table2.FieldValues['借阅证号'];
  table3.FieldByName('院系').AsString :=table2.FieldValues['院系'];
  table3.FieldByName('姓名').AsString :=table2.FieldValues['姓名'];
  table3.FieldByName('班级').AsString :=table2.FieldValues['班级'];
  table3.FieldByName('性别').AsString :=table2.FieldValues['性别'];
  table3.Post ;
end
else
showmessage('查无此人!');
end
else
showmessage('此书没有被借出!');
end ;

5 个解决方案

#1


Table3要先释放掉,否则肯定出现这个错误的,已经创建了,你再点“查询”按钮系统就又创建了一遍,在同一个内存区域怎么能创建两个同名的对象呢?

#2


procedure Tform77.Button1Click(Sender: TObject);
var
zhenghao:string;
table3:ttable;
begin
if table1.Locate('书名',edit1.Text ,[lopartialkey])  then
 begin
 zhenghao:=table1.FieldValues ['借阅证号'];
 if table2.Locate('借阅证号',zhenghao,[lopartialkey]) then
  begin
  table3:=ttable.Create(self);
  table3.DatabaseName :='rsg1';
  table3.TableName :='zhongjie.db';
  table3.Open ;
  table3.Append ;
  table3.FieldByName('借阅证号').AsString :=table2.FieldValues['借阅证号'];
  table3.FieldByName('院系').AsString :=table2.FieldValues['院系'];
  table3.FieldByName('姓名').AsString :=table2.FieldValues['姓名'];
  table3.FieldByName('班级').AsString :=table2.FieldValues['班级'];
  table3.FieldByName('性别').AsString :=table2.FieldValues['性别'];
  table3.Post ;
  table3.close;
  table3.Destory;
end
else
showmessage('查无此人!');
end
else
showmessage('此书没有被借出!');
end ;

#3


另外,'key violation'这个错表示数据中关键字重复,查你的表的主键,并检查数据中该主键是否重复

#4


谢谢各位,我按楼上建议的填上释放语句,可还是要在第二次打开时才能显示相关记录,麻烦各位在帮我看一下还有哪可能出错了.谢谢大家了!

#5


不好意思,刚才没有看到错误提示,从提示看,确实是数据库端提示的关键字重复,请搂主检查。

#1


Table3要先释放掉,否则肯定出现这个错误的,已经创建了,你再点“查询”按钮系统就又创建了一遍,在同一个内存区域怎么能创建两个同名的对象呢?

#2


procedure Tform77.Button1Click(Sender: TObject);
var
zhenghao:string;
table3:ttable;
begin
if table1.Locate('书名',edit1.Text ,[lopartialkey])  then
 begin
 zhenghao:=table1.FieldValues ['借阅证号'];
 if table2.Locate('借阅证号',zhenghao,[lopartialkey]) then
  begin
  table3:=ttable.Create(self);
  table3.DatabaseName :='rsg1';
  table3.TableName :='zhongjie.db';
  table3.Open ;
  table3.Append ;
  table3.FieldByName('借阅证号').AsString :=table2.FieldValues['借阅证号'];
  table3.FieldByName('院系').AsString :=table2.FieldValues['院系'];
  table3.FieldByName('姓名').AsString :=table2.FieldValues['姓名'];
  table3.FieldByName('班级').AsString :=table2.FieldValues['班级'];
  table3.FieldByName('性别').AsString :=table2.FieldValues['性别'];
  table3.Post ;
  table3.close;
  table3.Destory;
end
else
showmessage('查无此人!');
end
else
showmessage('此书没有被借出!');
end ;

#3


另外,'key violation'这个错表示数据中关键字重复,查你的表的主键,并检查数据中该主键是否重复

#4


谢谢各位,我按楼上建议的填上释放语句,可还是要在第二次打开时才能显示相关记录,麻烦各位在帮我看一下还有哪可能出错了.谢谢大家了!

#5


不好意思,刚才没有看到错误提示,从提示看,确实是数据库端提示的关键字重复,请搂主检查。