该过程是得出NewContractNo,不知道哪里有错?procedure TContractForm.FormShow(Sender: TObject);
var
  i:integer;
begin
  ...  i:=0;
  DataContrls.CTable.Open;
  while not  DataContrls.CTable.Eof do
  begin
    i:=i+1;
    Next;
  end;  if i<>0 then
  begin
    DataContrls.CTable.Last;  //将记录移到最后一条记录
    //计算新合同号
    NewContractNo:=DataContrls.CTable.FieldValues['合同号']+1;
    DataContrls.CTable.First;
  end
  else
  begin
    NewContractNo:=1001;
  end;
  ...
end;

解决方案 »

  1.   

    我发现在数据表是空的时候能够运行的,当有数据时,就不行了,说是while not 循环有错
      

  2.   

    DataContrls.CTable.Open;
      DataContrls.CTable.First;//加上这个
      while not  DataContrls.CTable.Eof do
      begin
        i:=i+1;
        Next;
      end;
      

  3.   

    对嘛,
    从数据表中循环取数据的时候一定要记得加上这句
    DataContrls.CTable.First;//指向第一条记录
    否则取数的时候将不会从第一条读起,会出现运行异常
      

  4.   

    新问题:就是呼叫不出该FORM(一直忙,只能强行)
      

  5.   

    数据表打开,应该自动定位到第一条记录,所以用不着DataContrls.CTable.First;
    估计是next问题,写上全名试试:DataContrls.CTable.Next
    或者这样:
      i:=0;
      DataContrls.CTable.Open;
      if not DataContrls.CTable.eof then
      begin
        while not DataContrls.CTable.eof do
        begin
          inc(i);
          DataContrls.CTable.Next;
        end;
      end;...
      

  6.   

    我测试了一下,是NEXT有问题,改成DataContrls.CTable.Next就行了,呵呵
    谢谢大家