0

我在delphi中的程序有这个问题。我想用这个请求 url 删除表中的数据:http://localhost:8001/delete/woodSpecie?json={"SessionID":"MVykZKX31d19dYnywxsXM1MdPy0U7VW8","wood_specie_id":"80"}

我实际上正在创建一个 Web 服务。

以下是我的德尔福代码:

dm.SessionValidate(SessionID);

dshWoodSpecie := TDSHandlerWoodSpecie.Create(nil, dm);

try
  if dshWoodSpecie.Dataset.isEmpty then
    raise Exception.Create('Wood Specie table is empty.')
  else
  begin
    if Params.Field['wood_specie_id'] = nil then
    begin
      raise Exception.Create('Wood Specie ID is empty.');
    end
    else
    begin
      dshWoodSpecie.AddFilter('wood_specie_id', sqlcmprEqual,
        Params.Field['wood_specie_id'].Value);
    end;
    dshWoodSpecie.ExecSQLWhereHaving;
    dshWoodSpecie.Delete;
    dshWoodSpecie.ApplyUpdates;
  end;
finally
  dshWoodSpecie.Free;
end;

发生的事情是它会返回此错误消息:

-
error: {
    msg: "Server Error: Wood Specie table is empty."
    class: "EDatabaseError"
}

我真的不知道出了什么问题。我无法删除,而且我的表首先不是空的。而且,我无法看到我所有的例外情况。

4

1 回答 1

0

根据您的问题,无法说出为什么您的表可能为空,但我的直觉是 webService 调用是无状态的,并且您认为您正在访问的数据集实例超出了调用上下文的范围,而您正在取而代之的是一个新的空实例。

您应该追踪到 'dshWoodSpecie := TDSHandlerWoodSpecie.Create(nil, dm);' 并在运行时检查您的实例状态。

至于调试:如果您正在运行 Web Debug 应用程序,您可以像使用任何 exe 一样进行跟踪 - 但如果您在真正的 Web 服务器(即 IIS)中运行,则在虚拟目录本身中构建您的 Web 服务 DLL,启动 Web 服务进程然后使用 run->attach 附加到它以进行处理。

如果您需要有关如何调试的更多信息,请告诉我们您正在运行的 Delphi 版本以及您如何部署 webService。

“我无法看到我所有的异常”

你是什​​么意思?如果您的数据集为空,您应该看到一个异常 - 一旦抛出该异常并且未处理(如在您的代码中),就没有更多可看的了 - 您的调用堆栈以第一个未处理的期望终止。

高温高压

于 2011-08-13T22:21:35.020 回答