前言:BDE已弃用。这项工作是一个减少我店铺足迹的项目。 ; - )
我需要定期将线程中的数据从BDE TQuery移动到我们的Oracle实例。这需要在TQuery中配置一个自己的TDatabase,唯一命名为TSession。
我的草稿代码(下面 - 而不是使用数据模块)创建了一个新会话;然后为该会话创建一个数据库,该数据库使用我们对具有Paradox(!)表的目录的公共BDE别名。 (因为它的草案和测试,私人目录,独特的会话命名等等细节尚未处理。)然后我创建了一个TQuery,Q
,并告诉它使用数据库及其会话(通过DB
的名称)。
这就是一切都变坏了。添加SQL后,Q.Prepare
除外Unknown alias
。由于Q
' s Database
为零,这是有道理的。注意:我在DB.Open
的实质性工作之前就已经尝试Q
- 没有改进。
我猜我忘了一些管道;我的安装步骤顺序错了;或者"默认"会话及其数据库问题 - 本草案中没有设置或使用这些内容。
我很难过。
谢谢!
更新:添加更多代码以澄清这两个程序是类的一部分。
uses
Bde.DBTables,System.Classes,System.Generics.Collections;
type TUpdateFieldmap = class(TObject)
private
DB: TDatabase;
UpdateSession: TSession;
procedure GetTableFields;
public
constructor Create;
destructor Destroy; override;
procedure OpenSis;
end;
const
DBNAME = 'fieldsets';
SESSIONNAME='testsession';
implementation
procedure TUpdateFieldmap.GetTableFields;
var
Q: TQuery;
begin
Q := TQuery.Create(NIL);
Q.DatabaseName := DBNAME;
Q.SessionName := SESSIONNAME;
// Q.Database is still undefined
// ...
end;
procedure TUpdateFieldmap.OpenSis;
begin
UpdateSession:=Sessions.OpenSession(SESSIONNAME);
UpdateSession.ConfigMode:=cmAll;
UpdateSession.NetFileDir := 'f:\public\DBShare\DBNet';
DB := TDatabase.Create(NIL);
DB.AliasName := 'si_production';
DB.DatabaseName := DBNAME;
DB.SessionName:=UpdateSession.SessionName;
DB.Open;
GetTableFields;
end;