大概思路是这样的,
1、新建一个窗体spdawh,用来显示详细信息。放了一个Table1(ADOTable1控件)用来连接主表sqda,ADOTable3控件连接从表GHSDA,连接keyfield是mainghs。最后用TDBGrid来显示详细信息。再放一个按钮,用来触发显示editsp窗体,代码如下:
procedure Tspdawh.BitBtn1Click(Sender: TObject);
begin
  try
    Application.CreateForm(Teditsp, editsp);
    editsp.ShowModal;
  finally
    editsp.close;
  end;
end;
2、在Teditsp窗体中放了一个导航控件wwDBNavigator,有修改和插入等功能,代码如下:
procedure Teditsp.NewCode(Sender: integer);//自动获取编号
var code: string;
begin
  Query1.Close;
  Query1.sql.text := 'select count(*) from spda';
  Query1.open;
  code := floattostr(100000 + Query1.Fields[0].asfloat + Sender);
  Query1.Close;
  Query1.sql.text := 'select count(*) from spda where code=:code';
  Query1.Parameters[0].Value := code;
  Query1.open;
  if Query1.Fields[0].Value > 0 then
  begin
    Sender := sender + 1;
    Newcode(sender);
  end
  else
  begin    spdawh.Table1.FieldByName('code').value := code;
  end;
end;procedure Teditsp.wwDBNavigator1InsertClick(Sender: TObject);//插入数据
begin  spdawh.Table1.Insert;
    NewCode(0);
  spdawh.Table1.FieldByName('czsp').value := '0';
  spdawh.Table1.FieldByName('zhsp').value := '0';
  spdawh.Table1.FieldByName('sybz').value := '1';
  
end;当插入数据时,出现错误提示:EOLeException with message'发生未知错误'。跟踪后发现这几个地方有问题:
spdawh.Table1.FieldByName('code').value := code;
spdawh.Table1.FieldByName('czsp').value := '0';
  spdawh.Table1.FieldByName('zhsp').value := '0';
  spdawh.Table1.FieldByName('sybz').value := '1';后来我把窗体spdawh的从表去掉?再进行同样的操作,正常!!要怎么修改才能把数据插入主表sqda中?谢谢!!

解决方案 »

  1.   

    补充说明:我是想把主表的信息和子表ghsname(供货商名称)一起显示到dhgrid中。于是把ghsname字段名一起添加到控件Table1中两个表关联属性如下:
    FieldKind:fkLookup
    Keyname:ghsname
    keyfields:mainghs

    不知我说清楚没有?请高手指点,谢谢!!
      

  2.   

    对不起,完整设置如下:
    FieldKind:fkLookup
    Keyname:ghsname
    keyfields:mainghs
    LookupDataSet:ADOTable3
    LookupkeyFields:code
    LookupResultField:name
      

  3.   

     spdawh.Table1.FieldByName('@czsp').value := '0';
      spdawh.Table1.FieldByName('@zhsp').value := '0';
      spdawh.Table1.FieldByName('@sybz').value := '1'
    参数前加@存储过程里是这样的,不知道你这个是不是要加