设置了主从表,使用了clientdataset数据集。
现,往从表插入数据,DBNavigator确认后,数据未提交成功。
请大家帮忙找一下代码错误。如能帮我彻底把程序调试搞定,另开帖子500分相送!
我QQ:41775863  谢谢!
procedure Tcust_user_detail.DBNavigator1Click(Sender: TObject;
  Button: TNavigateBtn);
begin
  if button = nbInsert then
  begin
  cdsus.ApplyRange;
    cdsus.Append;
    with dmform.ADOQ do
    begin
      sql.Clear;
      sql.Add('select max(user_id)+1 a ' +
              'from cust_user where user_id < 1000');
      open;
      cdsus.FieldByName('user_id').AsFloat := FieldByName('a').AsFloat;
    end;
  if button = nbPost then
  begin
    cdsus.fieldbyname('user_name').asstring := trim(dbedit1.text);
    cdsus.fieldbyname('user_code').asstring := trim(dbedit2.text);
    cdsus.fieldbyname('user_inter_code').asstring := trim(dbedit2.text);
    cdsus.fieldbyname('user_desc').asstring := trim(dbcombobox1.text);
    //-----------1.定损员添加----------
    if Trim(DBComboBox1.Text) = '定损员' then
    begin
      cdsus.fieldbyname('user_occup').asstring := '定损岗';
      cdsus.fieldbyname('cut_id').asfloat := 1;
      cdsus.fieldbyname('user_pwd').asstring := '9999';
      cdsus.fieldbyname('user_sign').asstring := '1';
      cdsus.fieldbyname('user_name_phon').asstring := trim(dbedit3.text);
      cdsus.fieldbyname('user_firm_code').asstring := '33013200';
      cdsus.fieldbyname('user_valid').asstring := 'Y';
    end;
    //-----------2.B类定损员添加----------
    if Trim(DBComboBox1.Text) = 'B类定损员' then
    begin
      cdsus.fieldbyname('user_pwd').asstring := '9999';
      cdsus.fieldbyname('user_sign').asstring := '1';
      cdsus.fieldbyname('user_valid').asstring := '1';
    end;
    //-----------3.报价员添加----------
    if Trim(DBComboBox1.Text) = '报价员' then
    begin
      cdsus.fieldbyname('user_occup').asstring := '报价岗';
      cdsus.fieldbyname('cut_id').asfloat := 1;
      cdsus.fieldbyname('user_pwd').asstring := 'hzbjzx';
      cdsus.fieldbyname('user_sign').asstring := '1';
      cdsus.fieldbyname('user_firm_code').asstring := '33013200';
      cdsus.fieldbyname('user_valid').asstring := 'Y';
    end;
    //-----------4.核损员添加----------
    if Trim(DBComboBox1.Text) = '核损员' then
    begin
      cdsus.fieldbyname('user_occup').asstring := '核损岗';
      cdsus.fieldbyname('cut_id').asfloat := 1;
      cdsus.fieldbyname('user_pwd').asstring := '9999';
      cdsus.fieldbyname('user_sign').asstring := '1';
      cdsus.fieldbyname('user_firm_code').asstring := '33013200';
      cdsus.fieldbyname('user_valid').asstring := 'Y';
    end;
    //-----------5.内勤添加----------
    if Trim(DBComboBox1.Text) = '内勤' then
    begin
      cdsus.fieldbyname('cut_id').asfloat := 1;
      cdsus.fieldbyname('user_pwd').asstring := '9999';
      cdsus.fieldbyname('user_sign').asstring := '1';
    end;
    //-----------6.高级查询用户添加----------
    if Trim(DBComboBox1.Text) = '高级查询用户' then
    begin
      cdsus.fieldbyname('user_pwd').asstring := '9999';
      cdsus.fieldbyname('user_sign').asstring := '1';
      cdsus.fieldbyname('user_firm_code').asstring := '33010000';
    end;
    //-----------7.B类报价员添加----------
    if Trim(DBComboBox1.Text) = 'B类报价员' then
    begin
      cdsus.fieldbyname('user_pwd').asstring := '5555';
      cdsus.fieldbyname('user_sign').asstring := '1';
      cdsus.fieldbyname('user_biz_phone').asstring := trim(dbedit5.text);
    end;
    //-----------8.理算员添加----------
    if Trim(DBComboBox1.Text) = '理算员' then
    begin
      cdsus.fieldbyname('user_occup').asstring := '理算岗';
      cdsus.fieldbyname('user_pwd').asstring := '9999';
      cdsus.fieldbyname('user_sign').asstring := '1';
      cdsus.fieldbyname('user_firm_code').asstring := '33010000';
    end;  cdsus.CheckBrowseMode();
  cdsus.ApplyUpdates(0);
  cdsus.Post;
   if   cdsus.UpdateStatus   =   usUnmodified   then
          cdsus.RefreshRecord;
  dmform.ADOQ.SQL.Clear;
  with dmform.adoq do
  sql.add('insert into cust_user(user_id,cut_id,user_code, ' +
                                'user_inter_code,user_pwd,user_sign, ' +
                                'user_name,user_name_phon,user_desc, ' +
                                'user_biz_phone,user_firm_code,user_occup, ' +
                                'user_valid) values(:a,:b,:c,:d,:e,:f,:g,:h,:i,:j,:k,:l,:m)');
  dmform.adoq.parameters[0].name := 'a';
  dmform.adoq.parameters[0].value := cdsus.fieldbyname('user_id').asfloat;
  dmform.adoq.parameters[1].name := 'b';
  dmform.adoq.parameters[1].value := cdsus.fieldbyname('cut_id').asfloat;
  dmform.adoq.parameters[2].name := 'c';
  dmform.adoq.parameters[2].value := cdsus.fieldbyname('user_code').asstring;
  dmform.adoq.parameters[3].name := 'd';
  dmform.adoq.parameters[3].value := cdsus.fieldbyname('user_inter_code').asstring;
  dmform.adoq.parameters[4].name := 'e';
  dmform.adoq.parameters[4].value := cdsus.fieldbyname('user_pwd').asstring;
  dmform.adoq.parameters[5].name := 'f';
  dmform.adoq.parameters[5].value := cdsus.fieldbyname('user_sign').asstring;
  dmform.adoq.parameters[6].name := 'g';
  dmform.adoq.parameters[6].value := cdsus.fieldbyname('user_name').asstring;
  dmform.adoq.parameters[7].name := 'h';
  dmform.adoq.parameters[7].value := cdsus.fieldbyname('user_name_phon').asstring;
  dmform.adoq.parameters[8].name := 'i';
  dmform.adoq.parameters[8].value := cdsus.fieldbyname('user_desc').asstring;
  dmform.adoq.parameters[9].name := 'j';
  dmform.adoq.parameters[9].value := cdsus.fieldbyname('user_biz_phone').asstring;
  dmform.adoq.parameters[10].name := 'k';
  dmform.adoq.parameters[10].value := cdsus.fieldbyname('user_firm_code').asstring;
  dmform.adoq.parameters[11].name := 'l';
  dmform.adoq.parameters[11].value := cdsus.fieldbyname('user_occup').asstring;
  dmform.adoq.parameters[12].name := 'h';
  dmform.adoq.parameters[12].value := cdsus.fieldbyname('user_valid').asstring;
  dmform.ADOC.BeginTrans;
  dmform.ADOQ.Prepared;
  dmform.ADOQ.ExecSQL;
  dmform.ADOC.CommitTrans; //dmform.ADOC.RollbackTrans;
  dmform.ADOQ.Close;
  end;
  end;
end;

解决方案 »

  1.   

    困扰我好久了。继续顶上去!ADOC :ADOCONNECTION
    ADOQ :ADOQUERY
    CDSUS :CLIENTDATASET
    DBGRID
      

  2.   

    cdsus.ApplyUpdates(0);
      cdsus.Post;看看是不是这两句反了。
      cdsus.Post;
      cdsus.ApplyUpdates(0);
      

  3.   

    我把DBNavigator删了,改用Button键了,现已经能插入数据了,谢谢大家!但是,还有个问题,就是如何把提交了的数据传回给主表?应该有个啥地方设置主从表数据一起更新的吧?
      

  4.   

    你的代码这样写DBNavigator就已经失去了其存在的意义了。
    数据传回给主表?是说数据在界面上更新出来?那就刷新一下,CLOSE一下,再OPEN一下。
      

  5.   

    我的程序是这样的,主页面有四张表,其中每两张表之间必有一个字段相关联
    主页面显示的只是各表的主要信息,详细信息要双击打开查看明细。
    现,在细表中新增一条记录,想在关闭细表窗口的同时,主窗体的数据也随之发生变化。Louis_WH,你的意思是,在关闭细表的时候,把CDS UPDATE一下,再MAINFORM ADOQ CLOSE OPEN?好的,我试试,谢谢!Louis_WH,如果方便的话,能加一下我QQ吗?