使用delphi webservice删除表中的数据

时间:2011-07-13 07:11:53

标签: web-services delphi delphi-5

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

我正在创建一个Web服务。

以下是我的delphi代码:

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"
}

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

1 个答案:

答案 0 :(得分:0)

从您的问题来看,无法说明为什么您的表可能为空,但我的预感是WebService调用是无状态的,并且您认为您正在访问在您的调用环境中超出范围的数据集实例你正在获得一个新的空实例。

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

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

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

“我无法看到所有例外”

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

HTH