这是delphi一个关于数据访问的问题:
var
  str:string;
begin  str:=a:=a+' select a.*,b.DpNa, b.DpTyp, (select DpNa from EpDept where b.DpPrId=DpId) as DpPrId, c.EdNa, d.DtNa , e.TyNa,   f.ElDate,g.HoNa ,h.PoNa,i.TryPay '+
             'from  Employee AS a '+
             'LEFT JOIN EpDept as b  ON  a.DpId = b.DpId '+
             'LEFT JOIN EpEdu as  c  ON  a.EdNo = c.EdNo '+
             'LEFT JOIN EpDuty as  d  ON a.DtNo = d.DtNo '+
             'LEFT JOIN EpTyP as  e  ON a.TyNo = e.TyNo '+
             'LEFT JOIN EpLeave as  f ON a.EpId = f.EpId '+
             'LEFT JOIN   EpHome as g  ON  a.HoNo = g.HoNo '+
             'LEFT JOIN EpPost as  h ON a.PoNo = h.PoNo '+
             ' LEFT  JOIN  TryPay as  i  ON  a.EpId = i.EpId'+
             ' where 1=1 ';  ADODataSet1.Close;
  ADODataSet1.CommandText:='';
  ADODataSet1.CommandText:=a;
  ADODataSet1.Open;
我现在想直接在ADODataSet1上赋值!
比如:
  ADODataSet1.edit;
  ADODataSet1.FieldByName('EpId').AsString:=edit1.txt;
  ADODataSet1.FieldByName('EpNa').AsString:=edit2.txt;
....................
   直接在ADODataSet1上赋值好像不行?????? 怎样才能做到?????

解决方案 »

  1.   

    补充一下,要在不改变查询结果的情况下,怎么样才能给上面的ADODataSet1各字段赋值???
      

  2.   

    我没理解错的话,LZ是想将SQL语句中的某些值改掉吧,这样的话用format就可以了,我一像都 是这样拼SQL语句的
      

  3.   

    join的资料集一般是只读的,但ADO也可以修改,需要主键。
      

  4.   

    我想修改查询结果中的某一条记录,专业才能做到啊。。我已经在SQL表Employee   中中设置了主键。主键为EpID,是不是其中的每个表都要设置主键啊?
      

  5.   

    我想修改查询结果中的某一条记录,怎么样才能做到啊。。我已经在SQL表Employee       中中设置了主键。主键为EpID,是不是其中的每个表都要设置主键啊?
      

  6.   

    每个表都要主键。
    但习惯上我们把join的结果集还是当成只读。用delphi的lookup代替sql join。
      

  7.   

    "用delphi的lookup代替sql join"  ??能说得详细一点吗?
      

  8.   

    ADODataSet1.FieldByName( 'EpId ').AsString:=edit1.txt;
    这种不行AsString是给其它变量赋值时使用的。
    .value
      

  9.   

    为什么非要在这个结果集里修改呢,你可以针对你要修改的的记录,做UPDATE操作
    再放一个ADODataSet2
    ADODataSet2.close;
    ADODataSet2.commandtext := 'update Employee set(EpId,EpNa,....)values('''+edit1.txt+''','''+edit2.txt''',....) where 记录唯一标识';
    ADODataSet2.Execute;
      

  10.   

    使用多表联合查询以后,最好不要直接在数据集上修改,而改用update
      

  11.   

    为什么非要在这个结果集里修改呢,你可以针对你要修改的的记录,做UPDATE操作 
    再放一个ADODataSet2 
    ADODataSet2.close; 
    ADODataSet2.commandtext   :=   'update   Employee  
       set EpId = '''+edit1.txt+''',EpNa = '''+edit2.txt''',......
       where   记录唯一标识'; 
    ADODataSet2.Execute;