Delphi 5 バージョンを使用しており、Oracle データベースに接続したいと考えています。私は TDatabase コンポーネントを持っています。Delphi 経由でデータベースに接続する方法がわかりません。データベースに接続する手順を教えてください。ありがとう。
3 に答える
TDatabase
コンポーネントは の一部であり、BDE (Borland Database Engine)
非推奨のテクノロジです。代わりに、ADO や などの Oracle をサポートする別の代替手段を使用してみてくださいZeos
。ADO の概要については、Embarcadero のドキュメントを確認してください。Working with ADO Components
Zeos を選択した場合は、公式ドキュメントを確認してください。
面白いことに、私はオープン ソース ネイティブ Oracle アクセスの Delphi 5 への移植を (数分前に)終えたところです。
このユニットの主な機能は次のとおりです。
- Oracle Call Interface (OCI) クライアントへの直接アクセス。BDE、Midas、DBExpress、OleDB、ODBC プロバイダーは必要ありません。
- リビジョン 8 以降のすべてのバージョンの Oracle OCI インターフェイスで動作するように設計されています。
- Oracle 11g の最新機能に合わせて最適化されています (たとえば、ネイティブの Int64 を使用して NUMBER フィールドを小数点なしで取得します)。
- セットアップなしのアプリケーションで Oracle Instant Client を使用できます。
- すべてのバージョンの Delphi でネイティブ Unicode(内部 UTF-8 エンコーディングを使用)で、各データベースの文字セットを特別に処理します。
- Oracle クライアントのすべてのバージョンで利用可能な最高のパフォーマンスを達成しようとしました。
- 32 ビットまたは 64 ビット アーキテクチャの Windows のどのバージョンでも動作するように設計されています。
- 新しい専用バリアント型 (Ole Automation ランタイム プロパティと同様) を使用した、列名へのレイト バインディング アクセス。
- 接続は、メモリと CPU リソースのオーバーヘッドが少なく、マルチスレッドに対応しています。
- 「//host[:port]/[service_name]」のような接続文字列を使用でき、TNSNAME.ORA ファイルの使用を回避できます。
- 最高のパフォーマンスを得るには、Rows Array と BLOB フェッチを使用します (たとえば、ZEOS/ZDBC はこれを処理しませんでした)。
- BDE の代わりに、既存のコードで直接再利用するための TQuery エミュレーション クラス。
- プリペアド ステートメントの処理 - ただし、デフォルトでは、利用可能な場合は OCI 側のステートメント キャッシュに依存します。
- mORMot フレームワークのメイン エントリ ポイントとなる JSON メソッドへのネイティブ エクスポート。
- XE までの Delphi 5 と互換性があります。
- DB ユニットや DBExpress などの他のテクノロジを使用しないため、Delphi の任意のエディション (Delphi XE Stater または Delphi 7 Personal でさえも) で動作します。
- MPL/GPL/LGPL ライセンスの下でリリースされたオープン ソース。
詳細とフィードバックについては、この Web サイトを参照してください。
TQuery
BDE と同じようにコードを書くための like ラッパーがあります。
または、次のようにコードを記述できます。
procedure Test(Props: TOleDBConnectionProperties; const aName: RawUTF8);
var I: ISQLDBRows;
begin
I := Props.Execute('select * from Domain.Customers where Name=?',[aName]);
while I.Step do
writeln(I['Name'],' ',I.['FirstName'],' ',I['Address']);
end;
var Props: TOleDBConnectionProperties;
begin
Props := TSQLDBOracleConnectionProperties.Create(
'TnsName','UserName','Password',CODEPAGE_US);
try
Test(Props,'Smith');
finally
Props.Free;
end;
end;
残念ながら、Delphi 5 ではバリアントによる遅延バインディングが許可されていません。これは Delphi 6 以降で許可されています。
procedure Test(Props: TOleDBConnectionProperties; const aName: RawUTF8);
var I: ISQLDBRows;
Customer: Variant;
begin
I := Props.Execute('select * from Domain.Customers where Name=?',[aName],@Customer);
while I.Step do
writeln(Customer.Name,' ',Customer.FirstName,' ',Customer.Address);
end;
本当に RAD アプローチで DB コンポーネントを使用したい場合は、Torry のページ の対応するページをご覧ください。
- Oracle Magic への ATOM アクセス。
- Direct Oracle Access用のDOCIコンポーネント。
- NC OCI8;
- オレンジ色のコンポーネント セット。
- Vlad Karpov Oracle へのネイティブ リンク。
ほとんどが Oracle 8 で作成された (SynDBOracle は Oracle 11g 用に最適化されていますが、以前のバージョンの Oracle で動作します) 古い無料のコンポーネントがいくつかありますが、BDE を使用しない Oracle 接続のニーズにより適している場合があります。
もちろん、Delphi 5 で動作する非常に優れた商用コンポーネントもいくつかあります。しかし、高い代償を払わなければなりません...ちなみに、より新しい Delphi バージョンにアップグレードする必要があります。;)
Enterprise バージョンの Delphi 5 を使用している場合は、BDE と Oracle SQL リンクを使用して Oracle に接続できます。これが、D5 から Oracle を使用する最速の方法です。Professional バージョンをお持ちの場合は、ODBC 経由で BDE を使用して Oracle を使用できます。エンタープライズ バージョンにもすでに ADO コンポーネントが含まれているはずですが、私のテストでは、SQL リンクよりも劣ったソリューションでした。いいえ。
接続手順はヘルプやマニュアルに詳しく記載されています。