デフォルトTDataSetProvider.Options.poUseQuoteChar
は真です。
SQL ステートメントが小文字のテーブル名を使用し、例外を発生させずにTClientDataSet.ApplyUpdates(0)
更新を行わなかったとき、私は (再び) これに悩まされました。
DataSnap.Provider
のコードで、function TCustomResolver.InternalUpdateRecord(Tree: TUpdateTree): Boolean;
例外をトラップします。
except
if ExceptObject is Exception then
begin
E := Exception(AcquireExceptionObject);
PrevErr.Free;
PrevErr := Err;
Err := (Tree.Source as IProviderSupportNG).PSGetUpdateException(E, PrevErr);
if HandleUpdateError(Tree, Err, FMaxErrors, FErrorCount) then
begin
Tree.Delta.UseCurValues := True;
Continue;
end else
break;
end else
raise;
end;
そして、私はそれE.Message
が
[FireDAC][Phys][FB]動的 SQL エラー'#$D#$A'SQL エラー コード = -204'#$D#$A'テーブル不明'#$D#$A'tt_calendar'#$D#$A'At 1 行目、8 列目
はありません。ReconcileErrorHandler
上記のコードでHandleUpdateError
は false が返されますが、何らかの理由で例外が発生しません。
私のセットアップは次のとおりです。
TcxSchedulerStorage
に接続された DevExpress で作成された新しいイベントTDataSource -> TClientDataSet -> TDataSetProvider -> TFDQuery -> TFDConnection
(この場合は Firebird データベース)。
Delphi Tokyo 10.2.3 を使用しselect * from tablename
たTFDQuery.SQL.Text
すべてのデフォルト設定。
例外を強制的に表示し、これを完全に解決する変更できる単一の設定はありますか (任意のデータベース タイプに対して)。
私は Delphi ファイルにパッチを適用するつもりです。
これをランタイムコードで「解決」しました:
procedure TDMTT.DataModuleCreate(Sender: TObject);
var i: integer;
begin
for i := 0 to ComponentCount-1 do
if Components[i] is TDataSetProvider then
(Components[i] as TDataSetProvider).Options := (Components[i] as TDataSetProvider).Options - [poUseQuoteChar];
end;
しかし、毎回これを考える必要はありません。