这可能是其中的一个表有一个INSERT触发器,当你向其中INSERT时,它检查另一表中条件是否成立,是则通过,否则否决,你可以试着换一下两个表操作的先后顺序。可能会解决问题。

解决方案 »

  1.   

    宿舍要熄灯了,不然可以给出详细答案。sxlshmily讲的是对的。人家在从表里面用触发器做了限制,如果主表中该身份证号不存在的话您就不能对从表进行insert 操作。所以要想对从表进行插入,必须先检验主表中是否存在此身份证号,如果存在,可以直接对从表进行insert,如果不存在,先讲身份证号插入主表,然后再对从表进行insert.以上操作可以用一个storedprocedure进行。明天要考试,不能讲的太详细,呵呵。如果明下午没人回答再来up一下
      

  2.   

    代码:
    data.addQuery.Close;
    data.addQuery.SQL.clear;
    data.addQuery.SQL.Add('select * from midtch2,midtch1');
    data.addQuery.SQL.Add('where midtch1.身份证号=midtch2.身份证号');
    data.addQuery.Open;
    data.addQuery.Insert;
    data.addQuery.FieldByName('姓名').AsString:=addedit1.Text;
    data.addQuery.FieldByName('性别').AsString:=addcombobox1.Text;
    data.addQuery.FieldByName('民族').AsString:=addedit2.Text;
    data.addQuery.FieldByName('出生年月').AsDateTime:=strtodatetime(addmedit1.Text);
    data.addQuery.FieldByName('身份证号').AsString:=addedit3.Text;
    data.addQuery.FieldByName('职务').AsString:=addedit4.Text;
    data.addQuery.FieldByName('学校').AsString:=addedit5.Text;
    data.addQuery.FieldByName('政治面貌').AsString:=addedit6.Text;
    data.addQuery.fieldbyname('参加工作时间').AsDateTime:=strtodatetime(addmedit2.Text);
    data.addQuery.FieldByName('文化程度').AsString:=addedit7.Text;
    data.addQuery.FieldByName('职称').AsString:=addcombobox2.Text;
    data.addQuery.FieldByName('所教学科').AsString:=addedit8.Text;
    data.addQuery.FieldByName('最高奖励证').AsString:=addedit9.Text;
    data.addQuery.FieldByName('继续教育证').AsString:=addedit10.Text;
    data.addQuery.FieldByName('身份').AsString:=addcombobox3.Text;
    data.addQuery.FieldByName('月工资额').AsInteger:=strtoint(addedit11.Text);
    data.addQuery.FieldByName('工资档次').AsInteger:=strtoint(addcombobox4.Text);
    data.addQuery.FieldByName('普通话等级').AsString:=addcombobox5.Text;
    data.addQuery.FieldByName('籍贯').AsString:=addedit12.Text;
    data.addQuery.FieldByName('备注').AsString:=addmemo.Text;
    data.addQuery.post;
    end;
      

  3.   

    您同时从两个表中选择,在插入的时候只是对一个表操作,当然会出错了。请在您的 SQL 语句中加上需要操作的字段名称。如:
    data.addQuery.SQL.Add('select 姓名,性别,民族…… from midtch2,midtch1');
    data.addQuery.SQL.Add('where midtch1.身份证号=midtch2.身份证号');
      

  4.   

    因为两个表中都有“身份证号”,所以data.addQuery.FieldByName('身份证号').AsString:=addedit3.Text;肯定会出现异常。就象mudeen(笑哥哥) 说的一样,你可以把字段选出来(如有相同的,请加上别名)。我想这样应该能够解决问题。
      

  5.   

    data.addQuery.Close;
    data.addQuery.SQL.clear;
    data.addQuery.SQL.Add('select 姓名,性别,民族,出生年月,midtch1.身份证号,'+
    'midtch2.身份证号,职务,学校,政治面貌,参加工作时间,文化程度,职称,所教学科,最高奖励证,'+
    '继续教育证,身份,月工资额,工资档次,普通话等级,籍贯,备注 from midtch2,midtch1');
    data.addQuery.SQL.Add('where midtch1.身份证号=midtch2.身份证号');
    data.addQuery.Open;
    data.addQuery.Insert;
    data.addQuery.FieldByName('姓名').AsString:=addedit1.Text;
    data.addQuery.FieldByName('性别').AsString:=addcombobox1.Text;
    data.addQuery.FieldByName('民族').AsString:=addedit2.Text;
    data.addQuery.FieldByName('出生年月').AsDateTime:=strtodatetime(addmedit1.Text);
    data.addQuery.FieldByName('midtch1.身份证号').AsString:=addedit3.Text;
    data.addQuery.FieldByName('midtch2.身份证号').AsString:=addedit3.Text;
    data.addQuery.FieldByName('职务').AsString:=addedit4.Text;
    data.addQuery.FieldByName('学校').AsString:=addedit5.Text;
    data.addQuery.FieldByName('政治面貌').AsString:=addedit6.Text;
    data.addQuery.fieldbyname('参加工作时间').AsDateTime:=strtodatetime(addmedit2.Text);
    data.addQuery.FieldByName('文化程度').AsString:=addedit7.Text;
    data.addQuery.FieldByName('职称').AsString:=addcombobox2.Text;
    data.addQuery.FieldByName('所教学科').AsString:=addedit8.Text;
    data.addQuery.FieldByName('最高奖励证').AsString:=addedit9.Text;
    data.addQuery.FieldByName('继续教育证').AsString:=addedit10.Text;
    data.addQuery.FieldByName('身份').AsString:=addcombobox3.Text;
    data.addQuery.FieldByName('月工资额').AsInteger:=strtoint(addedit11.Text);
    data.addQuery.FieldByName('工资档次').AsInteger:=strtoint(addcombobox4.Text);
    data.addQuery.FieldByName('普通话等级').AsString:=addcombobox5.Text;
    data.addQuery.FieldByName('籍贯').AsString:=addedit12.Text;
    data.addQuery.FieldByName('备注').AsString:=addmemo.Text;
    data.addQuery.post;
    end;
    我已经在选择中加上了所有的字段尤其是midthc1.身份证号和midtch2.身份证号
    但是再执行过程中提示没有midthc1.身份证号
    同时在dbgrid中出现了两个身份证号字段。
      

  6.   

    搞定了
    将原先的该为如下:
    data.addQuery.FieldByName('身份证号').AsString:=addedit3.Text;
    data.addQuery.FieldByName('身份证号_1').AsString:=addedit3.Text;
    谢谢大虾们:
    mudeen(10分)linush2001 (10分)