项目介绍:Socket通讯服务端,客户端向服务端请求数据。
症状:服务端收到客户端的请求,根据查询条件查询不到数据,就会抛出一个无数据的异常,这种情况声明的TextFile类变量得不到使用,如果连续客户端多次请求不到数据,
服务端就会挂掉,连Socket连接也建立不了。我怀疑是多个TextFile类变量声明了,但是没有使用,可能也没有释放,不知道是不是这样???procedure procedureName;
var
  dataFile                    : TextFile;
begin
.....
end;  

解决方案 »

  1.   

    不會的,至少PASCAL是不會的。 C好像是會的。
      

  2.   

    procedure TGjjDataDM.GetYhqqGjjgrxxData(const aUserID, aFileName, aYhbm, aGjdbm, aLmkh: string);
    var
      dataFile                    : TextFile;
      sline,
      s                          : string;
      cs,
      e025                        : integer;
      a107,
      dqrq                        : TDate;
      dbg,
      a002,
      a008,
      a070                        : string;
    begin  if Trim(aLmkh) = '' then //如果卡号为空串、空格串,则查询结果为无数据
        raise EDBException.Create(cntNoData, stNoData);
      cs := 0;
      SetLength(dbg, cntMaxLineLen);  OpenDBConnection;
      aqGetYhqqGjjgrxxData.Close;
      aqGetYhqqGjjgrxxData.SQL.Clear;
      s := 'Select a002,a008,a011,a063,a033,a036,a038+a039 bngjje,a040,a044,a070,a034,a035,a063,a064,a107 from gzjbk where a079='''+ aLmkh +'''';
      aqGetYhqqGjjgrxxData.SQL.Add(s);
      AddDebugLog('sql: ' + s, m_Serial);
      aqGetYhqqGjjgrxxData.Open;
      if aqGetYhqqGjjgrxxData.IsEmpty then
        raise EDBException.Create(cntNoData, stNoData);
      try
      if FileExists(aFileName) then
      begin
        AssignFile(dataFile, aFileName);
        Append(dataFile);
      end
      else
      begin
        AssignFile(dataFile, aFileName);
        Rewrite(dataFile);
      end;    try
          aqGetYhqqGjjgrxxData.First;
          repeat
            sline := '';
            a002 := Trim(string(CheckIsNull(aqGetYhqqGjjgrxxData.FieldByName('a002').Value,  //姓名
              ' ')));              sline := XStrToLenString(a002, 20);
            Writeln(dataFile, sline);  //将数据行写入文本文件
            aqGetYhqqGjjgrxxData.Next;
            Inc(cs);
            SetSafeResultStrDB(cs, m_Serial, stOperateDBNO + IntToStr(cs));
          until aqGetYhqqGjjgrxxData.Eof;
          aqGetYhqqGjjgrxxData.Close;
          AddDebugLog(stOperateDBNO + IntToStr(cs), m_Serial);
        except
            raise EDBException.Create('第'+ inttostr(cs)+'条记录'+ stDBOperateErr);
        end;
      finally
        CloseFile(dataFile);
      end;
    end;
      

  3.   

    不会有事的,如果只是声明,没有使用,正常情况下编译器,会把这个变量乎略掉的,不会编译进EXE
      

  4.   

    不会,DELPHI编译优化就把它忽略掉了。
      

  5.   

    好,确定不是TextFile类变量的问题,我再找其他原因。结贴散分!