1、给zone到phone这两个表中的zoneid字段建立一个一对多的关系
在Interbase的ISQL中
Alter Table Phone 
Add Foreign Key(Phoneid) Reference Zone;
(当然:Zone中PK为zoneid,Phone中PK为Zoneid和PhoneID2、然后在程序的删除按钮中:
try
  TIBTablePhone.Delete;
  TTransactionPhone.Commit;
except
  on E: Exception do begin
    MessageDlg('该区域有话机,不能删除该区域!',mtInformation,[mbOK],0)
  end;
end;

解决方案 »

  1.   

    你可以简单地在数据库物理上设置连接关系,使phone表的zoneid为zone的子表、外键,这样在zone表里就不能删除在 pnone表里有数据的相关记录了;或者你也可以在删除前查询在phone里是否有本区域的话机,如果有则不删除。
      

  2.   

    用一个query:
    with query1 do
    begin
      close;
      sql.clear;
      sql.add('select p.phoneno from zone z,phone p');
      sql.add(' where z.zoneid=p.zoneid and z.zonename='+quotedstr               (form1.treevew1.selected.text));
      open;
      if fieldbyname('phoneno').asstring='' then
      begin
        showmessage('对不起,区域不能删除!');
        exit;
      end
      else begin
       <你要删除记录的代码>
      end;end;
      

  3.   

    错了!
    用一个query:
    with query1 do
    begin
      close;
      sql.clear;
      sql.add('select p.phoneno from zone z,phone p');
      sql.add(' where z.zoneid=p.zoneid and z.zonename='+quotedstr(form1.treevew1.selected.text));
      open;
      if fieldbyname('phoneno').asstring<>'' then
      begin
        showmessage('对不起,区域不能删除!');
        exit;
      end
      else begin
      <你要删除记录的代码>
      end;end;