注册 登录
编程论坛 Delphi论坛

为什么不运行这一行啊?总是跳过去,然后提示说违反了约束主键,说主键不能重复

红枫林 发布于 2007-04-14 17:26, 1691 次点击

为什么不运行红色的这一行啊?总是跳过去,然后提示说违反了约束主键,说主键不能重复
请指教!!!
procedure TForm1.Button2Click(Sender: TObject);
begin
with ADOTableStore do
begin
first;
while not eof do
begin
if((edit1.Text=fieldbyname('StorehouseID').AsString) and (edit2.Text=fieldbyname('Sbin').AsString)) then
begin
ShowMessage('该位已经存货,请选择别的货位!');
edit1.Text:='';
edit2.Text:='';
end;

if ((edit1.Text='')or (edit2.Text='')or(edit3.Text='')or(edit4.Text='')or(edit5.Text='')or(edit6.Text='')or(edit7.Text='')or(edit8.Text='')or(edit9.Text='')or(edit10.Text='')or(edit11.Text='')or(edit12.Text='')or(edit13.Text='')or(edit14.Text='')or(edit15.Text='')) then
begin
ShowMessage('信息填写不完整!')
end
else
begin
edit;
append;
fieldbyname('StorehouseID').AsString:=edit1.Text;
fieldbyname('Sbin').AsString:=edit2.Text;
fieldbyname('ItemID').AsString:=edit3.Text;
fieldbyname('Sfrom').AsString:=edit4.Text;
fieldbyname('SIntoQty').AsString:=edit5.Text;
post;
Refresh;
showmessage('存货成功!');
end;

break;
end;
next;

end;
end;

8 回复
#2
nongen2007-04-14 22:37
不要在循环中append 数据
你的这种方式,根本就不起作用,当第一条记录都不满足前面的if 时,就会增加,根本不去找后面还有没有.

[此贴子已经被作者于2007-4-14 22:42:03编辑过]

#3
红枫林2007-04-15 15:09

谢谢版主,能不能告诉我,我改怎么改啊?多谢了

#4
aaron520882007-04-15 15:19
我想问一个问题: if((edit1.Text=fieldbyname('StorehouseID').AsString) and (edit2.Text=fieldbyname('Sbin').AsString)) then
这句使用的时候前面不需要添加上查询语句:
adoquery1.close;
adoquery1.sql.clear;
adoquery1.sql.add('select * from **表');
adoquery1.open;
吗?
我没添加的时候,程序运行的时候会出现说adoquery1:Field 'storehouID' not found之类的话,为什么呢?
#5
红枫林2007-04-15 15:22

我用的是Ttable控件,不是Query

#6
nongen2007-04-16 20:13
用boolean变量来查找是否有重复的,
在循环结束后根据此变量来判断是否添加记录
#7
红枫林2007-04-16 22:08
多谢版主!!!
#8
红枫林2007-04-16 22:23
nongen版主,快点帮我回答下一个问题,我的脑袋都木了
下一个问题就是关于datanoudal的那个
#9
sgliuxiu2007-04-17 22:56
if((edit1.Text=fieldbyname('StorehouseID').AsString) and (edit2.Text=fieldbyname('Sbin').AsString)) then
begin
ShowMessage('该位已经存货,请选择别的货位!');
edit1.Text:='';
edit2.Text:='';
end;
将if改为如下试试
if((trim(edit1.Text)=fieldbyname('StorehouseID').AsString) and (trim(edit2.Text)=fieldbyname('Sbin').AsString)) then
1