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 ;
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 ;
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
不好意思,刚才没有看到错误提示,从提示看,确实是数据库端提示的关键字重复,请搂主检查。