小问题?大问题?Delphi主从表中,如何判断明细表中资料重复?(100分)

  • 主题发起人 主题发起人 h_q_p
  • 开始时间 开始时间
H

h_q_p

Unregistered / Unconfirmed
GUEST, unregistred user!
在Delphi中,Table1为请购单主表与Table2请购单明细表,通过
单号关联成主从表结构,实现时,主表(Table1)用DBEdit控件,从
表Table2用DBGrid控件,如何在DBGrid中输入一货品编码后,判
断此编码在本单中是否重复?
 
在table1的beforepost中用下列语句检测
with adoquery1 do begin
close;
sql.clear;
sql.add('select 货品编码 from talbe1 group by 货品编码 where 单号=:@no');
parameters.parambyname('@no').value:=主表单号;
open;
if not adoquery1.eof then begin
showmessage('重复');
abort;
end;
end;

 
在主表中locate一下。
 
to王公子:
你的做法是在保存时判断,若要在输入时判断字段的OnChange中写代码,但这
效率很低...
各位FW,还有其它办法吗?我的idea已poor...8)
 
问题不明确?
 
在Table2的AfterEdit事件中编写主表中的Locate
 
//Table表的Name字段编辑

procedure TForm1.Table1NameSetText(Sender: TField; const Text: string);
var
l_BookMark: TBookmark;
begin
Table1Name.OnSetText := nil;
try
with Table1 do
begin
DisableControls;
l_BookMark:=GetBookmark ;
First;
while not Eof do
begin
if Locate('Name', Text, []) then
begin
Application.MessageBox('输入重复!', '提示', 64);
Break;
end
else
Sender.AsString := Text;
Next;
end;
GotoBookmark(l_BookMark);
FreeBookmark(l_BookMark);
EnableControls;
end;
finally
Table1Name.OnSetText := Table1NameSetText;
end;
end;
 
Query1.close;
Query1.sql.clear;
Query1.sql.add('select 貨品編號 from 明細檔 where 編號=主檔編號')
Query1.open;
if Query1.fields[0].asstring = DBGrid.seletField.Asstring then
showmessage('有重復');
寫在dbgrid的OnEditButtonClick試試
 
多人接受答案了。
 
后退
顶部