我从三个表里选出了想要的字段,用ADOQuery控件显示出来了。
现在我想向这个组合表里增加(或修改)一个记录。
选表的SQL语句如下:
select a_tline.f_name as 线路名称,a_tbuslist.f_buscode as 测点编码,a_tbuslist.f_busname as 监测点名称,
a_tbuslist.f_kva as 容量,a_tbuslist.f_addr 安装地址,a_tbuslist.f_busnum as 仪表号,
a_ttype.f_name as 型号,a_tbuslist.f_size as 变比,a_tbuslist.f_setdate as 安装日期,a_tbuslist.f_note as 备注
 from a_tline,a_tbuslist,a_ttype
where a_tline.f_lineno=a_tbuslist.f_lineno and a_ttype.f_type=a_tbuslist.f_type 
想要增加或修改字段如下: 线路名称 测点编码 监测点名称 容量  安装地址 
                      仪表号  型号 安装日期 备注{
   form2.ADOQuery1.append;
   form2.ADOQuery1.fieldvalues['测点编码']:=strtoint(edit1.text);
   form2.ADOQuery1.fieldvalues['监测点名称']:=edit2.text;
   form2.ADOQuery1.post;
   form2.ADOQuery1.refresh;
}//开始这样写的,可惜这段代码实现不了各位高手给点思路或来段实现代码更好(呵呵),小弟谢了先!

解决方案 »

  1.   

    用存储过程肯定可以实现。实际上你的问题等价于:建立一个多表来源的视图,对此视图进行增加修改。理论上来说,如果只是对其中的一张表进行操作,是可以的。但是我也好像有过问题。现在我是再用其他QUERY连接后台表,对此QUERY定位,再修改后台表,则随之前台的数据刷新改变。例如:
    //删除计划
    var
      XH: INTEGER;begin  if (Edit_ND.Text = '') or (ComboBox_YF.Text = '') then
      begin
        abort;
      end;  if DataModule1.AQ_YFMDJH.FieldByName('计划下达部门').AsString = 'FC' then
      begin
        Application.MessageBox('此零件由分厂下达,车间不可删除', '错误', MB_OK
          +
          MB_ICONEXCLAMATION + MB_DEFBUTTON1 + MB_APPLMODAL);
        ABORT;
      end;  if DataModule1.AQ_YFMDJH.RecordCount = 0 then
      begin
        Application.MessageBox('目前没有记录可供删除', '错误', MB_OK
          +
          MB_ICONEXCLAMATION + MB_DEFBUTTON1 + MB_APPLMODAL);
        ABORT;
      end;  XH := DataModule1.AQ_YFMDJH.FIELDBYNAME('序号').AsInteger;  ///进行删除
      try    DataModule1.ADOCon_cjjh.BeginTrans;    DataModule1.AQ_YFMDJH.Edit;
        DataModule1.AQ_YFMDJH.Delete;
        DataModule1.AQ_YFMDJH.UpdateBatch;    //找出所有比这个序号大的数值
        ADOQuery_DELETE.Close;
        ADOQuery_DELETE.Parameters.ParamByName('XH_CS').Value := XH;
        ADOQuery_DELETE.Parameters.ParamByName('ND_CS').Value := Edit_ND.Text;
        ADOQuery_DELETE.Parameters.ParamByName('YF_CS').Value := ComboBox_YF.Text;
        ADOQuery_DELETE.Open;
        ADOQuery_DELETE.First;    //进行序号的根新
        while not ADOQuery_DELETE.Eof do
        begin
          ADOQuery_DELETE.Edit;
          ADOQuery_DELETE.FieldByName('XH').AsInteger :=
            ADOQuery_DELETE.FieldByName('XH').AsInteger - 1;
          ADOQuery_DELETE.Post;
          ADOQuery_DELETE.UpdateBatch();
          ADOQuery_DELETE.Next;
        end;    DataModule1.ADOCon_cjjh.CommitTrans;  except
        DataModule1.ADOCon_cjjh.RollbackTrans;
        Application.MessageBox('出现错误,请检查网络', '错误', MB_OK
          +
          MB_ICONEXCLAMATION + MB_DEFBUTTON1 + MB_APPLMODAL);
      end;  DataModule1.AQ_YFMDJH.Refresh;end;上段程序ADOQuery_DELETE就是专门来删除的。
    一点意见,希望高手批评!