2

Delphi 5 バージョンを使用しており、Oracle データベースに接続したいと考えています。私は TDatabase コンポーネントを持っています。Delphi 経由でデータベースに接続する方法がわかりません。データベースに接続する手順を教えてください。ありがとう。

4

3 に答える 3

2

TDatabaseコンポーネントは の一部であり、BDE (Borland Database Engine)非推奨のテクノロジです。代わりに、ADO や などの Oracle をサポートする別の代替手段を使用してみてくださいZeos。ADO の概要については、Embarcadero のドキュメントを確認してください。Working with ADO ComponentsZeos を選択した場合は、公式ドキュメントを確認してください。

于 2011-07-11T14:27:11.177 に答える
2

面白いことに、私はオープン ソース ネイティブ 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 サイトを参照してください。

TQueryBDE と同じようにコードを書くための 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 バージョンにアップグレードする必要があります。;)

于 2011-07-11T15:15:08.260 に答える
0

Enterprise バージョンの Delphi 5 を使用している場合は、BDE と Oracle SQL リンクを使用して Oracle に接続できます。これが、D5 から Oracle を使用する最速の方法です。Professional バージョンをお持ちの場合は、ODBC 経由で BDE を使用して Oracle を使用できます。エンタープライズ バージョンにもすでに ADO コンポーネントが含まれているはずですが、私のテストでは、SQL リンクよりも劣ったソリューションでした。いいえ。

接続手順はヘルプやマニュアルに詳しく記載されています。

于 2011-07-11T18:18:37.677 に答える