1

既存の SQLite ファイルをデータベース ソースとして使用するために、FireDAC サンプル プロジェクトの 1 つを変更しようとしています。サンプルは変更しなくても問題なく動作し、データベースに接続します。ただし、接続先のデータベースを変更するために指定されている場所がわかりません。

ドキュメントによると、コンポーネントにはDatabaseプロパティが必要です。TFDPhysSQLiteDriverLinkありません:存在しません。フォームをテキストに変換し、すべてのコンポーネントのカスタマイズされたプロパティを調べましたが、どこにもパスが定義されていません。コードにもありません。サンプルは非常に小さく、パスはまったく定義されていません。

ドキュメントのもう1つのオプションは、ユニットを含めることですがFireDAC.Phys.SQLite、ユニットにはコンポーネントが含まれているだけなので、データベースの設定方法は説明されていません。そして、データベースのプロパティを検索すると (添付の画像を参照)、そのユニットのどのクラスのプロパティも、私が求めているものではないようです。最も近いのは、バックアップ コンポーネント用の文字列です。それが必要なのかは疑問です。SQLiteDatabaseクラスにはプロパティがありますが、TFDPhysSQLiteConnectionそれは読み取り専用です。

FireDAC.Phys.SQLite ユニットで定義されているすべてのデータベース プロパティのリスト

FireDAC.Phys.SQLite ユニットで定義されているすべてのデータベース プロパティのリスト

また、コンポーネントをダブルクリックして、実行時に一時的な接続定義を作成しようとしました。TFDConnectionそれは例外を与えるだけです:

TFDConnection コンポーネントをダブルクリックすると例外が発生する

TFDConnection コンポーネントをダブルクリックすると例外が発生する

私が見つけた唯一の解決策は、環境変数を設定する$(PUBLICDOCUMENTSDIR)ように指示されている XE5 ドキュメントにあります。デモを実行するには、すでにそれを行う必要がありました (以前は、行で同じ例外がスローされましたFDConnection1.Connected := True;。現在はそうではありません。デモは実行時に完全に実行されます)。その変更は明らかにデザイナーに影響を与えていません。結局、ドキュメンテーションはDatabaseプロパティの設定について話しているので、私が正しい場所を探しているかどうかさえわかりません。

だから私は困惑しています。データベースはどこに設定されますか? DFM やストリーミング プロパティにはありません。ドキュメントで定義されたプロパティにありTFDPhysSQLiteDriverLink.Databaseません(存在しないか、そのように見えるものは何もありません)。デザインタイム エディターにはありませんTFDConnection(例外がスローされますが、ここでプロパティとして指定されたファイルは、ストリーミングされた DFM に表示されると思います)。コードにはありません。...他にどこにあるのでしょうか?

(私は以前に FireDAC を使用したことがないので、完全な初心者です。ところで、私はドキュメントとサンプルを介して自己学習しています。)

4

2 に答える 2

2

ミニマリストの FireDAC プロジェクトでは TFDPhysSQLiteDriverLink は実際には必要ありません。データベースへの接続を初めて試みる場合、TFDPhysSQLiteDriverLink を使用すると問題が混乱します。

これを試して:

  • Sqlite db のパスを含む名前をメモします。

  • 新しい VCL プロジェクトを開始し、TFDconnection、TFDQuery、TDataSource、および TDBGrid をそのフォームにドロップして接続します。TDFQuery の Sql を設定して、db に存在することがわかっているテーブルから * を選択します。

  • TFDConnection を右クリックしConnection editor、ポップアップから選択します。

  • に設定しDriverIDSQLiteデータベース名をボックスに挿入しDatabase Valueます。

  • FDQuery を開きます。

プロジェクトをコンパイルして実行すると、TFDGUIxWaitCursor のクラス ファクトリが欠落していることを示す例外が発生します (これは、私が FireDAC で気に入っていることの一種です) が、これをフォームにドロップすることで簡単に修正できます。Object Inspectorを使用して他の FD コンポーネントに接続する必要がないことに注意してください。

その後、 を追加して、 と同じにTFDPhysSQLiteDriverLink設定できます。DriverIDTFDConnection

于 2015-09-20T18:33:42.770 に答える
1

私は通常、自分のクラスをロールしてOnBeforeConnectイベントを処理します

このようなもの

procedure TSQLiteConnection.SQLiteConnectionBeforeConnect(Sender: TObject);
begin
  if not(TFile.Exists(DatabaseFilePath)) then
    Params.Values['OpenMode'] := 'CreateUTF16'
  else
    Params.Values['OpenMode'] := 'ReadWrite';

  Params.Values['Database'] := DatabaseFilePath;
  DriverName := 'SQLite';
end;

はクラスのDatabaseFilePath単なる文字列フィールドなので、基本的にはそこに任意のファイルパスを配置できます

もちろん、TSQLiteConnection は TFDConnection の子孫です。

于 2015-09-20T19:32:02.300 に答える