BDEの代替は何に?
長文になります。申し訳ございません。
今まで、データベースへの接続はBDE + SQLLink で行っていました。
BDEの開発サポートが終了したということで、BDEの代替なるものを検討中です。
BDEの代替として、ADO と ODBC しか思いつきませんでしたので
取りあえずテストプログラムを作成しようとしましたが、、
書き方が分からなかった為、いろいろ調べて次のようになりました。
そこで、、
根本的な質問で申し訳ありませんが、
BDEで接続するというのは、BDE Administrator で作成したエリアス名を
TDatabaseのAliasNameに設定するという認識で良いでしょうか?
ODBCで接続するというのは
ODBCデータソースアドミニストレータで作成したデータソースを
TDatabaseのAliasNameに設定するという認識で良いでしょうか?
BDEとODBCは、DataBase.AliasNameの設定を変更するだけで
そのまま同じ関数が利用できる?
①BDE・ODBCでのデータベース接続
function TDM.OpenDatabase(Alias, UserName, Password: string): Boolean;
begin
Result := True;
try
DataBase.Connected := False;
DataBase.LoginPrompt := False;
DataBase.AliasName := Alias; //BDE Administrator で作成したエリアス名 もしくは
//ODBCデータソースアドミニストレータで作成したデータソース名
DataBase.DatabaseName := 'DB1';
DataBase.Params.Clear;
DataBase.Params.Add('USER NAME=' + UserName);
DataBase.Params.Add('PASSWORD=' + Password);
Query.DatabaseName := DataBase.DatabaseName;
StoredProc.DatabaseName := DataBase.DatabaseName;
DataBase.Connected := True;
except
Result := False;
end;
end;
また、ADOで接続するというのは UDLファイルを作成しておいて
そのUDLファイル名をConnectionStringに設定するという認識で良いでしょうか?
②ADOでのデータベース接続
function TDM.OpenDatabase: Boolean;
const
DATA_LINK_FILE = ado.udl
var
ConnectionStr: string;
begin
Result := True;
ConnectionStr := 'FILE NAME=' + ExtractFilePath(Application.ExeName) + DATA_LINK_FILE;
ADOConnection.Connected := False;
ADOConnection.LoginPrompt := False;
ADOConnection.ConnectionString := ConnectionStr;
ADOQuery.Connection := ADOConnection;
ADODataSet.Connection := ADOConnection;
try
ADOConnection.Connected := True;
except
Result := False;
end;
end;
以上のことがあっているという前提で、テストプログラムを作成し
次の構成でパフォーマンスを比較しました。
①[ADO] + [OLE DB Provider for SQL Server] の構成
②[ODBC] + [SQL Server] の構成
同じ内容のストアドプロシージャ(読込用)をループさせてテストしましたが、
①のADOの構成の方の読込がとても遅くて使い物になりません。
②のODBCの読込だと、BDE + SQLLink には及びませんが問題無いパフォーマンスでした。
以前は、ADO > ODBC の認識でしたが、
現在は、ODBCの方が主流なのでしょうか?
また、BDEの代替は一般的に何にしたら良いでしょうか?
ご教授願います。
質問だらけで申し訳ございません。
宜しくお願いします。
<環境>
Delphi2007
Server: [Windows 2003 Server] + [SQL Server 2005]
Client: [Windows XP Professional] + [SQL Server 2005]
> BDEの代替は一般的に何にしたら良いでしょうか?
SQL Server 2005に接続するのでしたら、他には、
・[ADO] + [SQL Native Client] の構成
http://hiderin.air-nifty.com/delphi/2007/08/index.html#entry-20196212
・dbExpress(Ent版以上ですが・・)
など、あるようです。
# SQL Server 2005 は Express Editionしか使ったことがないので、
# 詳しくはないのですが・・・
igyさん、ご回答有難うございます。
>SQL Server 2005に接続するのでしたら、他には、
>
>・[ADO] + [SQL Native Client] の構成
UDLファイルのプロバイダータブに、[SQL Native Client]があったので
こちらも試してみたのですが期待できるパフォーマンスではありませんでした。
[OLE DB Provider for SQL Server]とほぼ同じです。
>・dbExpress(Ent版以上ですが・・)
こちらはよく解りません^^;;
テストプログラムでは、断然 ODBCの方がパフォーマンスも良いし、
既存プログラムの書換も殆どしなくてよさそうなので、
現段階では、ADOではなくODBCで実装しようと思っていますが、
念のため伺いたいです。今現在の主流はどちらなのでしょうか?
因みに、BDE・ODBC・ADO で接続するの質問についてもう一度書きますが、
下記の認識で合っていますか?
この辺がきちんと理解していないと、分かっていない・間違った認識で
進めてしまうことになるので。。
宜しくお願いします。
BDEで接続するというのは、BDE Administrator で作成したエリアス名を
TDatabaseのAliasNameに設定するという認識で良いでしょうか?
ODBCで接続するというのはODBCデータソースアドミニストレータで作成したデータソースを
TDatabaseのAliasNameに設定するという認識で良いでしょうか?
ADOで接続するというのは UDLファイルを作成しておいて
そのUDLファイル名をTADOConnectionのConnectionStringに設定するという認識で良いでしょうか?
BDEの中に、ネイティブ接続とODBC接続が有ります。しかしBDEは開発が止まっていて、対応DBは古いものになっています。
ADOはODBCでの接続です。
HOtaさん、ご回答有難うございます。
でもかなり混乱しています(^^;;
>BDEの中に、ネイティブ接続とODBC接続が有ります。
>しかしBDEは開発が止まっていて、対応DBは古いものになっています。
確かに、BDE Administratorの[環境設定]-[Drivers]に[Native]と[ODBC]がありました。
BDEは、ODBCも対応してるということですね。
確認ですが、Native接続可の対応DBの開発が止まっているということですよね?
(SQL Serverだと 最新のBDE Ver.5.2 でも SQL Server 7.0までしか対応していない)
ただODBCはその範疇ではない。ODBCは対応するODBCドライバをインストールすればよい?
>ADOはODBCでの接続です。
改めて ODBC、ADO、OLE-DB(ADOを調べたら出てきた) の意味を調べました。
ODBC … Microsoft社が提供するデータベースにアクセスするための標準API。
OLE-DB … COM技術をベースとしたODBCの拡張API。
ADO … OLE-DBをActiveXで使えるようにしたコンポーネント。
以上の関係から、結局ADOはODBCの発展形ということで
ADOはODBCでの接続です。とお答え頂いたのでしょうか?
回答頂いて申し訳ございませんが、この文だけではいまいち理解できないです。
できればもう少し詳しく教えていただけないでしょうか?
ADO接続であってもTADOConnectionやTADOQuery等を使わずに
TDatabaseやTQuery等を使って接続できるということですか?
見当違いの質問をしていると思いますが。。
勘違いしていました。ADOはOLEでした。
DataBaseの対象がSQL ServerであればdbGo(ADO)が適当でしょう。
それ以外でしたら、DBX4(dbExpress)になります。
ODBCは効率が悪くなってきています。
ただ、APIですので、汎用性はあると思います。
ADOを使う場合は、コンポーネントを見ていただくと判るように、BDEは使いません。
ADO->TDataSorce->DataControls
の様な使い方になります。
HOtaさん、ご回答有難うございます。
>DataBaseの対象がSQL ServerであればdbGo(ADO)が適当でしょう。
>それ以外でしたら、DBX4(dbExpress)になります。
>ODBCは効率が悪くなってきています。
>ただ、APIですので、汎用性はあると思います。
やはりADOが主流なのですか。
でも遅すぎて使い物になりませんけど(^^;
設定等に問題があるのか。
クエリの見直しやINDEXの割当で改善されるレベルではないと思われます。
私の環境ではODBC(BDE経由のODBC接続?)とADOでは雲泥の差です。
dbExpressも調べてちょっとテストしてみましたが、読込時に
「不明なデータ型です: TDBXTypes.UNKNOWN パラメータの @attr_flg.」
というエラーが発生したので止めました。
データベースはSQL Server 2005 で@attr_flg の型は tinyintで属性を表すフラグです。
フラグなので1バイトのtinyintで定義しているですが、dbExpress には tinyint に相当する型が無い?
よく解りません。
>ADOを使う場合は、コンポーネントを見ていただくと判るように、BDEは使いません。
>ADO->TDataSorce->DataControls
>の様な使い方になります。
TDatabaseやTQuery等のコンポーネントはツールパレットの[BDE]に
あるということは、TDatabaseやTQueryを使用すること自体が、
結局はBDEを使用している事になる。という認識でよいですか?
できたら下記の先に書いた質問もYes,Noだけでも
構いませんので回答頂けないでしょうか?
頭の中がモヤモヤしてまして(^^;
質問ばかりの文章(語尾が?)が多くて面倒だと思いますが
宜しくお願いします。
>BDEの中に、ネイティブ接続とODBC接続が有ります。
>しかしBDEは開発が止まっていて、対応DBは古いものになっています。
確かに、BDE Administratorの[環境設定]-[Drivers]に[Native]と[ODBC]がありました。
BDEは、ODBCも対応してるということですね。
ODBCに対応しているけどこの場合はBDE経由となる。
確認ですが、Native接続可の対応DBの開発が止まっているということですよね?
(SQL Serverだと 最新のBDE Ver.5.2 でも SQL Server 7.0までしか対応していない)
ただODBCはその範疇ではない。
ODBCは対応するODBCドライバをインストールすればよい?
BDEを使わないでODBC接続にするにはADO(OLE-DB)を使う。
>同じ内容のストアドプロシージャ(読込用)をループさせてテストしましたが、
①のADOの構成の方の読込がとても遅くて使い物になりません。
読み込み用って結果セットを返すって意味かな。
その場合なら、
ADODataSetのCacheSizeプロパティを大きな値にしても遅い?
もしくは、
CursorLocationをclUseSeverにしてサーバーカーソルにしても遅い?
BDE
TDataBase->TQuery->TDataSorce->DBコンポーネント
この中に[Native(SQLLink)]と[ODBC]があります。
Interbase
TIBDataBase->TIBQuery->TDataSorce->DBコンポーネント
Interbase専用です。かなり早い。
ADO(dbGo)
TADOConnection->TADOCommand->TDataSorce->DBコンポーネント
dbExpress(DBX4)
TSQLConnection->TSQLDataSet->TDatasetProvider->TClientDataSet->TDataSorce->DBコンポーネント
複雑ですが、これが汎用では一番早いでしょう。
現在のCordGearが開発しているコンポーネントです。
DBコンポーネントを使用しないのなら、TDatasetProvider以下は要りません。
ツイート | ![]() |