建立两个表add(name,address),pho(name,phone);使用Access数据库,在数据库中将两表name都设为主键,建立关系,为什么我添加数据的时候,先对表add操作可以正常进行,但是先对表pho进行操作时,就提示出错呢?而且在删除数据时,从add表可以删除关于name的phone信息,而从pho表却不能删除address信息呢?   还有这两个表建立关系的都是主键,不存在主从表关系吧?   多谢

解决方案 »

  1.   

    你把SQL语句发出来看下阿
      

  2.   

    function Tmainform.mydata_execute(id:integer;sql:string;adoquery:TAdoquery):integer;
    begin
      result:=0;
      try
        adoquery.Close;
        adoquery.SQL.Clear;
        adoquery.SQL.Text:=sql;
        if id=0 then adoquery.Open;
        if id=1 then adoquery.ExecSQL;
      except
        on E:exception do begin
          showmessage(e.Message);
          result:=1;
          end;
      end;
    end;  //自定义的函数procedure TMainForm.Delete1Click(Sender: TObject);  //从add删除部分
    var
      sql:string;
    begin
      if adoquery1.RecordCount <-1 then
        showmessage('无可删除记录');
      if application.MessageBox('确认要删除此目录吗?','提示',mb_yesno)<>idyes then
        exit;
      stuname:=adoquery1.FieldValues['name'];
      sql:='delete * from add where name='''+stuname+'''';
      mydata_execute(1,sql,adoquery2);
      stu1click(sender);
    end;procedure TMainForm.Delete2Click(Sender: TObject); //从pho删除
    var
      sql:string;
    begin
      if adoquery1.RecordCount<-1 then
        showmessage('无可删除记录');
      stuname:=adoquery1.FieldValues['name'];
      if application.MessageBox('确定要删除?','提示',mb_yesno)<>idyes then
        exit;
      stuname:=adoquery1.FieldValues['name'];
      sql:='delete * from pho where name='''+stuname+'''';
      mydata_execute(1,sql,adoquery2);
      inf1click(sender);
    end;如果我在数据库中取消关系,程序对单个表操作没问题,无论添加或者删除,所以觉得sql语法错误应该没有吧
    麻烦各位指点下
      

  3.   

    我把两个表的name字段都设为了主键,然后两个表通过name字段建立了一对一的关联,我从add表删除时,可以删除pho表的相关信息,但从pho表,却删除不掉add表的相关信息.然后更新数据,如果先更新pho表,会提示出错,如果先更新add表,不会提示出错,但pho表不会建立相关的name信息.
      

  4.   

    你建立了主从表的关系,PHO表的NAME的值依懒与add表的NAME
    也就是说,PHO里的NAME值必须是在Add表的NAME值中有的!
    主键和外键的定义你得先弄清楚!你是否把PHO表的NAME列设为主键对于PHO和ADD两张表存在的外键关系没有任何影响
      

  5.   

    我想不使用sql语句,直接在Access数据库中直接建立关联
      

  6.   

    Access数据库没有触发器吧?
      

  7.   

    我仔细看了下资料,觉得也不是简单的主外键关系呀,
    因为我无论从哪个表删除数据都没有提示出错,
    只是我从add表删除时,可以把一个人的信息全部删除,
    而从pho表删除时,只能删除pho表中的相关信息,而不能删除add表中有关此人的信息,
    哪位高手,仔细说下,多谢
      

  8.   

    多谢,触发器我不太熟悉,Access数据库没办法设置数据库吧,
    能说明白点吗,如何设置触发器^ ^,在delphi中用sql语句吗
      

  9.   

    首先access 没有触发器一说
    我估计你这两个表间建了外键约束,只要把这个约束删了就可以