喫茶XRAYトップページ

[スレッド全体
]

[286] Re4:TADOConnection について返信 削除
2005/6/10 (金) 16:33:07 sakiyama
▼ Syakeさん
> > 一つだけコネクションを張るコネクションプールDLLを作り、
> > 他DLLはそれを参照するのはどうでしょうか。
> うっ!、これは良く判りません。
> 一体どういうことでしょうか?


たとえば、今のように全部のDLLがデータモジュールを
持つのではなく、ADO接続をするDLLを一個作ってそこから
ConnectionObjectを取得してって感じです。
--adoconn.dpr(dll)
var
  dm: TDataModule1;
procedure GetConnection(out Connection:IUnknown);
begin
  if dm = nil then
    dm := TDataModule1.Create(nil);

  if not dm.ADOConnection1.Connected then
    dm.ADOConnection1.Open;
  dm.ADOConnection1.ConnectionObject.QueryInterface(IUnknown, Connection);
end;

--unit1.pas
procedure GetConnection(out Connection: IUnknown); external 'adoconn.dll' name 'GetConnection';

procedure TForm1.Button1Click(Sender: TObject);
var
  conn: IUnknown;
begin
  GetConnection(conn);
  if conn = nil then Exit;
  //これでDetaControlが使える
  ADOConnection1.ConnectionObject := conn as _Connection;
  ADOTable1.Active := True;
end;
 
実行時パッケージでよければもっと楽かも。

> > Delphiから使うならFirebird楽ですよ。
> よく聞きますね。
> 以前挑戦しようと思いましたが(InterBaseの頃)
> あまり、情報があまり無くて(有っても英語(^_^;))
> 諦めました。
> 今では、「Firebird日本ユーザー会」が一番情報
> 量が多いのかな。
>


Firebird情報は
http://nekomimi.s41.xrea.com/x/firebird/pukiwiki/
が詳しいですね。

[287] Re5:TADOConnection について返信 削除
2005/6/10 (金) 18:20:17 Syake
▼ sakiyamaさん
 
> たとえば、今のように全部のDLLがデータモジュールを
> 持つのではなく、ADO接続をするDLLを一個作ってそこから
> ConnectionObjectを取得してって感じです。


お〜おっ!素晴らしい。
完璧です。!(^^)!
以前、Dll化に挑戦したのですが、何せ未熟者ですので
挫折いたしました。
ありがとうございます。

////////////////////////////////////////////////////////////////////
// DLL -------------------------------------

(略)
var
  dmSqlConnect: TdmSqlConnect;
  procedure SqlConnect(out Connection:IUnknown);stdcall;

implementation

procedure SqlConnect(out Connection:IUnknown);
begin
   if dmSqlConnect = nil then
      dmSqlConnect := TdmSqlConnect.Create(nil);

   if not dmSqlConnect.SqlConnect.Connected then
      dmSqlConnect.SqlConnect.Open;
   dmSqlConnect.SqlConnect.ConnectionObject.QueryInterface(IUnknown, Connection)
end;

{$R *.dfm}

procedure TdmSqlConnect.DataModuleDestroy(Sender: TObject);
begin
   dmSqlConnect.Free;
end;
end.

//=====================================================================//
(略)
var
  frmADOTest: TfrmADOTest;
  procedure SqlConnect(out Connection: IUnknown);stdcall; external 'sqlConnection.dll';

implementation

{$R *.dfm}

procedure TfrmADOTest.Button1Click(Sender: TObject);
var
  conn: IUnknown;
begin
   SqlConnect(conn);
   if conn = nil then Exit;
   adoConect := TADOConnection.Create(Application);
   adoConect.ConnectionObject := conn as _Connection;
   ADOTable1.Connection := adoConect;
   ADOTable1.TableName := 'ABC';
   ADOTable1.Active := True;
end;

procedure TfrmADOTest.FormClose(Sender: TObject; var Action: TCloseAction);
begin
   adoConect.Free;
end;
end.
///////////////////////////////////////////////////////////////////////
な、感じで・・・すかね。

実行時パッケージは、他の絡みもあり使えません。(^_^;)
 
> Firebird情報は
> http://nekomimi.s41.xrea.com/x/firebird/pukiwiki/
> が詳しいですね。

これは、知りませんでした。


[290] Re5:TADOConnection について返信 削除
2005/6/10 (金) 22:19:14 Mr.XRAY
▼ sakiyamaさん

なるほど,勉強になります.やみくもにConnectionするのではなく...
反省.う〜む.まだまだ未熟者です.


[▼次のスレッド]
INCM/CMT
Cyclamen v3.82