Delphi - DataSet在MySQL

时间:2017-02-03 18:48:15

标签: mysql delphi connection dataset tdataset

我在应用程序中使用TFDDataSet组件时遇到问题。

如果客户有新订单,我有一个可以多次获取的功能。如果它返回空,则函数结束。

...
 fdm_XMLREsumo.Close;
       fdm_XMLREsumo.Active := false;
       _DataSetJSON := SM.GetXMLResumoChave( pEnt_ID, pChave); //See Edit 1
       _DataSet.Close;
       _DataSet := TFDJSONDataSetsReader.GetListValueByName( _DataSetJSON, sXMLResumo );
       _DataSet.Open; <-- here's the problem 
       if not _DataSet.IsEmpty then begin
        exit;
       end;
       fdm_XMLREsumo.AppendData( _DataSet );
      ...

问题是,每次执行_DataSet.Open;时,它都会在我的数据库中创建一个新连接。
因此我有too many connections例外。
<我已经检查了我的服务器属性,它是这样的:

Many threads in Sleep state

我尝试了Connection.Close_DataSet.Close_DataSet.Free_DataSet.Destroy,但没有任何效果。
我读过this,它解释说甚至如果您_DataSet.Close,则连接仍然存在,因为DataSets在内存中工作。
还有this人有类似问题,但使用Query。<有谁知道我怎么设法解决这个问题?
我正在使用 MySQL

编辑1
@CraigYoung帮助我说我的例子需要MCVE

SM.GetXMLResumoChave方法:

这里它使用与函数末尾关闭的数据库的连接。已经调试过,这里它没有在MySQL处理列表中留下开放连接

function TDAOXMLResumo.GetXMLResumoChave(xEnt_id: Integer; xChave: String): TFDJSONDataSets;
begin
  if not oSM.FDConn.Connected then
    oSM.FDConn.Connected := true;
  QueryPesquisa.SQL.Clear;
  QueryPesquisa.SQL.Text :=
     ' select * from table' +
     ' where ent_id = :ent_id ' +
     '       and xre_chNFe = :xre_chNFe ';
  QueryPesquisa.ParamByName('ent_id').Asinteger   := xEnt_id;
  QueryPesquisa.ParamByName('xre_chNFe').Asstring := xChave;
  Result := TFDJSONDataSets.Create;
  //TFDJSONDataSetsWriter.ListAdd Opens the Query that is passed as parameter and store the data as JSON in the TFDJSONDataSets (Result) object
  TFDJSONDataSetsWriter.ListAdd(Result, sXMLResumo, QueryPesquisa);  
  //Closing the Query
  QueryPesquisa.Close;
  //Closing the Connection
  oSM.FDConn.Close;
end;`

基本上,_DataSet仅在此处接收JSON列表:_DataSet := TFDJSONDataSetsReader.GetListValueByName( _DataSetJSON, sXMLResumo );,然后打开它以访问其中的数据。

0 个答案:

没有答案