大家看一下这段代码:
procedure TMyData.T_BuyNewRecord(DataSet: TDataSet);
var counter:integer;
id:string;
begin
with t_countergoods do
begin
   filter:='编号=''B''';
   filtered:=true;
   open;
   counter:=fieldbyname('值').AsInteger;
   inc(counter);
   edit;
   fieldbyname('值').AsInteger:=counter;
   post;
   close;
end;
id:='000'+inttostr(counter);
id:=copy(id,length(id)-3,4);
id:=formatdatetime('yyyymm',now)+id;
with dataset do
begin
   Edit;
   fieldbyname('合同编号').AsString:=id;
   fieldbyname('执行状态').AsString:='U';
   fieldbyname('签署日期').AsDateTime:=now;
   fieldbyname('买卖').AsString:='B';
   fieldbyname('厂家代码').AsString:='AAAAAA';
   post;
end;
end;
我按了“添加”后,却出现什么“未知错误”,什么东西嘛,太光火了。而且是什么EOleException,气晕了。

解决方案 »

  1.   

    filtered:=false;
       filter:='编号=B';//错了
       filtered:=true;
    //   open;//错了, 之前就必须打开
       counter:=fieldbyname('值').AsInteger;
       inc(counter);
       edit;
       fieldbyname('值').AsInteger:=counter;
       post;
      

  2.   

    试试 :procedure TMyData.T_BuyNewRecord(DataSet: TDataSet);
    var counter:integer;
    id:string;
    begin
    with t_countergoods do
    begin
       filter:='编号=''B''';
       filtered:=true;
       open;
       counter:=fieldbyname('值').AsInteger;
       inc(counter);
       edit;
       fieldbyname('值').AsInteger:=counter;
       post;
    end;
    id:='000'+inttostr(counter);
    id:=copy(id,length(id)-3,4);
    id:=formatdatetime('yyyymm',now)+id;with dataset do
    begin
       Close ;
       Open ;
       //Go to the Record 
       Edit;
       fieldbyname('合同编号').AsString:=id;
       fieldbyname('执行状态').AsString:='U';
       fieldbyname('签署日期').AsDateTime:=now;
       fieldbyname('买卖').AsString:='B';
       fieldbyname('厂家代码').AsString:='AAAAAA';
       post;
    end;
    end;
      

  3.   

    死循环 ?------------------
    告诉我你的要求,需要做什么达到什么样的目的 ?Filter 我不怎么用,上面的代码也没有测试,今天也很不开心,如果错了请包涵
      

  4.   

    t_countergoods其实是个计数器,用这个计数器来自动产生合同编号,结果问题好象是出在fieldbyname('执行状态').AsString:='U';
    fieldbyname('签署日期').AsDateTime:=now;
    fieldbyname('买卖').AsString:='B';
    fieldbyname('厂家代码').AsString:='AAAAAA';上,但“未知错误”让我怎么知道具体是什么错误?见鬼!
      

  5.   

    try
    except
      on e : Exception  do
        ShowMessage(e.Message) ; 
    end ;看看具体是什么错误,还不行就用一个测试数据单步跟一下 // 其实单号你可以写一个函数来获得然后将数据一次插入表中
      

  6.   

    filter:='编号=''B''';该为:
    filter:='编号='+#39+'B'+#39;
      

  7.   

    with t_countergoods do
    begin
       filtered := False; //****
       filter:='编号=''B''';
       filtered:=true;
       open;
       counter:=fieldbyname('值').AsInteger;
       inc(counter);
       edit;
       fieldbyname('值').AsInteger:=counter;
       post;
       close;
    end;
      

  8.   

    EOleException?
    你的程序是dll吗?是不是用ADO连的数据库?不是就当我没说。是的话,必须加上CoInitialize() !!!
      

  9.   

    哦、忘了
    最后还要加上 CoUnInitialize 释放
      

  10.   

    晕死!又忘了还要Uese ActiveX
      

  11.   

    to myling:我用的是ADO,你能讲得再详细点吗?
      

  12.   

    DELPHI里做DLL时,只要调用COM,就得先调用CoInitiaLize(nil)构造函数初始化,然后再调用coUnInitiaLize析构函数.而ADO是MS的东东,对于DELPHI来说,就是调用了COM,就要就初化,就和在DLL里调OLE一样.所以要在你创建ADO之前调用CoInitiaLize(nil)使用完以后再调用coUnInitiaLize.
    但是如果你不是在DLL中調用,就不用進行初始化了,哈
      

  13.   

    这“未知错误”会不会和其他的原因有关,我在ADO的NewRecord里都出现了这样的问题。