2

SQL で一時テーブルを作成し、新しいフィールドを追加しています。Firedac がこの一時テーブルのフィールド リストをキャッシュしているようです。
次のコードでは、「FDQuery5: フィールド '利用可能' が見つかりません」というメッセージが表示されます。

  FDQuery5.Connection := FDConnection1;
  FDConnection1.ExecSQL('Select StockNo into #Temp from Stock');
  FDQuery5.SQL.Text := 'Select * From #Temp';
  FDQuery5.open;
  FDConnection1.ExecSQL('Alter Table #Temp add Available Char(1)');
  FDQuery5.Close;
  FDQuery5.open;
  ShowMessage(FDQuery5.FieldByName('Available').AsString);

Firedac で XE5 を使用します。Connection.RefreshMetadataCache を試し、FetchOptions.Cache から fiMeta を削除しました。

SQL.Text を変更すると、Firedac に新しいフィールドを認識させることができます。私のアプリケーションはかなりの数の場所で変更が必要になるため、これは望ましくありません。

4

1 に答える 1

3

FDQuery5.Close を呼び出した後も、クエリは準備されたままです。つまり、結果セット構造もキャッシュします。クエリを準備するには、FDQuery5.Close を FDQuery5.Disconnect に置き換えます。

于 2014-03-11T09:10:26.470 に答える