为什么点“修改””保存“时,emp表的数据随quit表数据更新了,点新增保存时quit表数据写进去了,可是emp表数据却没有更新。代码如下,不知哪里错了。
procedure TForm5.Button1Click(Sender: TObject);
var
intNum:string;
begin
intNum:=dbgrideh1.Fields[0].AsString;
if  Panel3.Tag=1 then
begin
//showmessage('当前为修改状态');
adoquery1.Close;
adoquery1.SQL.Clear;
adoquery1.SQL.Add('update quit set id1='''+edit1.Text+'''');
adoquery1.SQL.Add(',id2='''+edit2.text+'''');
adoquery1.SQL.Add(',name='''+edit3.text+'''');
adoquery1.SQL.Add(',sex='''+combobox1.Text+'''');
adoquery1.SQL.Add(',part='''+combobox2.Text+'''');
adoquery1.SQL.Add(',edu='''+combobox3.Text+'''');
adoquery1.SQL.Add(',idcard='''+edit4.Text+'''');
adoquery1.SQL.Add(',nation='''+edit5.Text+'''');
adoquery1.SQL.Add(',in_time='''+edit6.Text+'''');
adoquery1.SQL.Add(',out_time='''+edit7.Text+'''');
adoquery1.SQL.Add(',reason='''+edit8.Text+'''');
adoquery1.SQL.Add(',status='''+combobox4.Text+'''');
adoquery1.SQL.Add(' where id1='''+intNum+'''');
adoquery1.ExecSQL;
dbgrideh1.Refresh;
adoquery1.SQL.Clear;
adoquery1.sql.Add('select * from quit');
adoquery1.open;adoquery2.Close;
adoquery2.SQL.Clear;
adoquery2.SQL.Add('update emp set id1='''+edit1.Text+'''');
adoquery2.SQL.Add(',status='''+combobox4.text+'''');
adoquery2.SQL.Add(' where id1='''+intNum+'''');
adoquery2.ExecSQL;
form2.dbgrideh1.Refresh;
adoquery2.SQL.Clear;
adoquery2.sql.Add('select * from emp');
adoquery2.open;Panel3.Visible:=false;
showmessage('修改成功!');
end
else if Panel3.tag<>1 then
begin
if (edit1.Text='') and (edit3.Text='') then
begin
showmessage('必须输入姓名!') ;
exit;
end
else
adoquery1.Close;
adoquery1.SQL.Clear;
adoquery1.SQL.Text:='insert into quit(id1,id2,name,sex,part,edu,idcard,'+#13#10+
'nation,in_time,out_time,reason,status) VALUES ('''+edit1.text+''','''+edit2.text+''','+#13#10+
''''+edit3.text+''','''+combobox1.text+''','''+combobox2.text+''','+#13#10+
''''+combobox3.text+''','''+edit4.text+''','+#13#10+
''''+edit5.text+''','+#13#10+
''''+edit6.text+''','+#13#10+
''''+edit7.text+''','''+edit8.text+''','''+combobox4.text+''')';
adoquery1.ExecSQL;
DBGrideh1.Refresh;
adoquery1.SQL.Clear;
adoquery1.sql.Add('select * from quit');
adoquery1.open;adoquery2.Close;
adoquery2.SQL.Clear;
adoquery2.SQL.Add('update emp set id1='''+edit1.Text+'''');
adoquery2.SQL.Add(',status='''+combobox4.text+'''');
adoquery2.SQL.Add(' where id1='''+intNum+'''');
adoquery2.ExecSQL;
form2.dbgrideh1.Refresh;
adoquery2.SQL.Clear;
adoquery2.sql.Add('select * from emp');
adoquery2.open;Panel3.Visible:=false;
showmessage('新增成功!');
end
else showmessage('未知错误!');
end;

解决方案 »

  1.   

    在新插入记录后,因intNum并未改变,emp表只会更新原来的记录,新增的id1并没有赋值到intNum。
      

  2.   

    從你的代碼看,在quit表新增後,emp表沒有id1=edit1.text的記錄,emp表也應新增。如果有這條記錄,要更新的話,應在:
    ……
    adoquery1.SQL.Text:='insert into quit(id1,id2,name,sex,part,edu,idcard,'+#13#10+
    'nation,in_time,out_time,reason,status) VALUES ('''+edit1.text+''','''+edit2.text+''','+#13#10+
    ''''+edit3.text+''','''+combobox1.text+''','''+combobox2.text+''','+#13#10+
    ''''+combobox3.text+''','''+edit4.text+''','+#13#10+
    ''''+edit5.text+''','+#13#10+
    ''''+edit6.text+''','+#13#10+
    ''''+edit7.text+''','''+edit8.text+''','''+combobox4.text+''')';
    adoquery1.ExecSQL;
    DBGrideh1.Refresh;
    adoquery1.SQL.Clear;
    adoquery1.sql.Add('select * from quit');
    adoquery1.open;
    //如果emp表有id1=edit1.text的記錄,加入下句。如果沒有相應的記錄,下面的update就要改成insert語句。
    intNum := edit1.text;
    adoquery2.Close;
    adoquery2.SQL.Clear;
    adoquery2.SQL.Add('update emp set id1='''+edit1.Text+'''');
    adoquery2.SQL.Add(',status='''+combobox4.text+'''');
    adoquery2.SQL.Add(' where id1='''+intNum+'''');
    adoquery2.ExecSQL;
    form2.dbgrideh1.Refresh;
    adoquery2.SQL.Clear;
    adoquery2.sql.Add('select * from emp');
    adoquery2.open;
    ……
      

  3.   

    主從表更新時,需要定位其焦點Focused是在主表,還是在從表。然後再update...