0

デルファイでの私のプログラムに関してこの問題があります。このリクエスト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 デバッグ アプリを実行している場合は、exe と同じようにトレースできますが、実際の Web サーバー (IIS など) で実行している場合は、仮想ディレクトリ自体に Web サービス DLL を構築し、Web サービス プロセスを起動します。そして、run->attach to process を使用してそれにアタッチします。

デバッグ方法についてさらに詳しい情報が必要な場合は、実行している Delphi のバージョンと、Web サービスをどのように展開しているかをお知らせください。

「すべての例外を表示できませんでした」

どう言う意味ですか?データセットが空の場合に表示されるはずだった例外が 1 つあります。その例外がスローされ、(コードのように) 処理されない場合は、それ以上何も表示されません。コール スタックは、最初の未処理の期待値で終了します。

HTH

于 2011-08-13T22:21:35.020 に答える