多个ADOQueries上的临时表

时间:2014-10-23 20:45:56

标签: sql-server delphi temp-tables tadoquery

有没有办法让多个TADOQuery可以访问相同的会话或交易信息?

TADOQuery都有相同的TADOCOnnection,但这并不起作用。

示例 - 我有一个生成临时表的查询,我想在另一个查询中使用该临时表,但是当我尝试时,它并不知道临时表。

procedure Foo(dbCon : TADOConnection);
var
  q1  : TADOQuery;  //TODO :  set your ADOQuery to use a forward only read only cursor.
  q2  : TADOQuery;

begin
  q1 := TADOQuery.Create(nil);
  q1.Connection := dbCon;
  q1.SQL.Text := 'SELECT id INTO #TempT FROM dFTNodes;';
  q1.Active := true;

  q2 := TADOQuery.Create(nil);
  q2.Connection := dbCon;
  q2.SQL.Text := 'SELECT id FROM #TempT;';
  q2.Active := true; //Fails here does not know table #TempT
end;

1 个答案:

答案 0 :(得分:3)

如果您的TADOConnection未定义为KeepConnection=True,这是默认值, 执行q1后连接断开,会话丢失,#TempT消失 通常,如果没有使用该连接的活TCustomAdodatasets,将关闭使用KeepConnection=False的连接。 q2将获得一个新会话,但无法访问#TempT。