首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >由TDataSetProvider poUseQuoteChar和小写表名引起的异常不显示。

由TDataSetProvider poUseQuoteChar和小写表名引起的异常不显示。
EN

Stack Overflow用户
提问于 2018-04-06 14:55:09
回答 1查看 272关注 0票数 0

默认的TDataSetProvider.Options.poUseQuoteChar为真。

当我的SQL语句使用小写表名时,当我的TClientDataSet.ApplyUpdates(0)没有在不引发异常的情况下执行任何更新时,我(再次)就被它咬了。

DataSnap.Provider中,function TCustomResolver.InternalUpdateRecord(Tree: TUpdateTree): Boolean;中的代码捕获异常:

代码语言:javascript
复制
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

FireDACFBDynamic SQL错误‘#$D#$A’SQL错误代码=-204‘#$D#’表未知‘#$D#$A’‘tt_日历’#$D#$A‘$A’在第1行,第8栏

我没有ReconcileErrorHandler,在上面的代码中,HandleUpdateError返回false,但由于某种原因,异常没有出现。

我的设计是:

在DevExpress TcxSchedulerStorage中创建的新事件,连接到TDataSource -> TClientDataSet -> TDataSetProvider -> TFDQuery -> TFDConnection,在本例中是火鸟数据库。所有默认设置,简单的select * from tablename中的TFDQuery.SQL.Text

使用Delphi东京10.2.3。

是否有一个我可以更改的设置,它将强制异常可见的并一劳永逸地解决这个问题(对于任何数据库类型)?

我甚至愿意修补一个Delphi文件。

我现在已经用运行时代码“解决”了这个问题:

代码语言:javascript
复制
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;

但我不想每次都这么想。

EN

回答 1

Stack Overflow用户

发布于 2018-04-16 11:15:06

正如Sertac Akyuz所建议的,修改TDataSetProvider构造函数是一种选择。缺点是您正在修补Delphi代码,但我对此没有意见。

Datasnap.Provider中,添加指定的行:

代码语言:javascript
复制
constructor TDataSetProvider.Create(AOwner: TComponent);
begin
  inherited Create(AOwner);
  FResolveToDataSet := False;
  UpdateMode := upWhereAll;
  FDSWriter := nil;
  FConstraints := True;
  FRecordsSent := 0;
  Options := Options - [poUseQuoteChar];  // Line added
end;
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49695563

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档