这是源代码,每次执行查询时当时都不能显示,要关闭窗体重新打开时才有.而且,如果一连点击两次查询按钮,就会有" 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 ;

解决方案 »

  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'这个错表示数据中关键字重复,查你的表的主键,并检查数据中该主键是否重复