我的代码如下:
  var
    
    FMajorGrade:TField;
begin
 
    dataset2.CommandText:='select * from 专业年级';
    FMajorGrade.FieldKind:=fkLookup;
    FMajorGrade.Lookup :=true;
    FMajorGrade.LookupDataSet:=dm2.DSLookup;
    FMajorGrade.KeyFields :='专业年级编号';
    FMajorGrade.LookupResultField :='专业年级名称';
    dataset1.Fields.Add(FMajorGrade);
    dataset2.open;
    dataset1.open;
    
运行时系统报错,请问那里错了

解决方案 »

  1.   

    var a,b: TStringField;
    begin
      dm.lookupqry.open;  //打开LOOKUP字段要连接到的子表
      a := TStringField.Create(dm.editsql_info); //dm.editsql_info要加入lookup字段的表
      a.FieldKind := fkLookup;  //字段类型
      a.FieldName := 'pnames';  //字段名称 
      a.LookupDataSet := dm.lookupqry;  //指定
      a.LookupKeyFields := 'id_j'; 
      a.KeyFields := 'id_w';  
      a.LookupResultField := 'pname';
      a.DataSet:= dm.editsql_info;
      b := TStringField.Create(dm.editsql_info);
      b.FieldKind := fkLookup;
      b.FieldName := 'units';
      b.LookupDataSet := dm.lookupqry;
      b.LookupKeyFields := 'id_j';
      b.KeyFields := 'id_w';
      b.LookupResultField := 'jobs_j';
      b.DataSet:= dm.editsql_info;
    能看懂了没有?
      

  2.   

    楼上的为什么要两个TstringField字段都是lookup型的
      

  3.   

    我的代码:
    var FMajorGrade:TstringField;
    begin
      dm.DMOA.ADODSOA.CommandText :='select * from 班级表';
      dm.DMOA.DSLookup.CommandText:='select * from 专业年级';
      dm.DMOA.DSLookup.Open;
      FMajorGrade:=Tstringfield.Create(dm.DMOA.ADODSOA );//要加入的表
      FMajorGrade.FieldKind:=fklookup;
      FMajorGrade.FieldName :='专业年级名称';
      FMajorGrade.LookupDataSet:=dm.DMOA.DSLookup ;
      FMajorGrade.LookupKeyFields :='专业年级编号';
      FMajorGrade.LookupResultField:='专业年级';
      FMajorGrade.Lookup :=true;
      FMajorGrade.KeyFields :='专业年级编号';
      FMajorGrade.DataSet:=dm.DMOA.ADODSOA;
      ds.DataSet:=dm.DMOA.ADODSOA ;
      dm.DMOA.ADODSOA.Open;
    end;
    报错,找不到keyfields设的那个字段!
      

  4.   

    要把查询得出的所有字段都加入到query中才行。方法有二,一个是如下的方法,一个是在设计期加入。
    根据不同的类型加:var c:TAutoIncField;
    d,g,h,i:TstringField;
    e,f:TDateTimeField;
    j:TMemoField;
    begin
      c.FieldName := 'pnumber';
      c.DataSet := dm.editsql_info;
      d.FieldName := 'id_w';
      d.DataSet := dm.editsql_info;
      e.FieldName := 'starday';
      e.DataSet := dm.editsql_info;
      f.FieldName := 'endday';
      f.DataSet := dm.editsql_info;
      g.FieldName := 'jobs_w';
      g.DataSet := dm.editsql_info;
      h.FieldName := 'duty_w';
      h.DataSet := dm.editsql_info;
      i.FieldName := 'poples_w';
      i.DataSet := dm.editsql_info;
      j.FieldName := 'memos_w';
      j.DataSet := dm.editsql_info;//你可以写个函数来自动处理这个过程,不要一个个手动的加。