WindowsサービスでADO接続でDB更新するには?

解決


ゆう  2011-09-14 01:32:40  No: 40941

Win7+SQLServer2008
DelphiXEでADO接続を使ってます

Windowsサービスにexeを常駐させ、別プログラムからSocketで起動命令を出した時に、特定フォルダ内のtextを分割してDBに保存するプログラムを作ってるのですが、

  with TADOQuery.Create(Self) do
  try  
    Connection := Self.cn;
    SQL.Text := 'SELECT * FROM [テーブル名] WHERE [条件]';
    Open;
    try
      〜
      Close;
    finally
      free;
    end;
  except
    エラー処理
  end;

と言う処理で、二回目のOpen;で止まってしまい、その後何も反応が返ってこなくなります。

WindowsサービスでADO接続を使ってSQLServerのDBを使う場合の注意点とかってあるのでしょうか?


HOta  2011-09-15 01:43:29  No: 40942

タイトルは、DB更新になっていますが、SQL文はSelectだけですよ。

Selectだけでエラー処理に飛ばないのは、データーベース側のエラーではないでしょうか?コンフリクトを起こしているとか。

データーベース側で同じSelect文を何度も処理してみたらどうなりますか?


コミット  2011-09-15 02:06:25  No: 40943

コミットしてなくて、待ち状態とか。。。


HOta  2011-09-15 17:47:27  No: 40944

Select文に対して、Commitは必要ありません。


例外処理  2011-09-15 20:15:51  No: 40945

関係ないですが例外処理は
with TADOQuery.Create(Self) do
begin
  try  
    Connection := Self.cn;
    SQL.Text := 'SELECT * FROM [テーブル名] WHERE [条件]';
    Open;
    try
      〜
      Close;
    except
      if Active then Close;
      //例外処理
    end;
  finally
    free
  end;
end;
が、良いような・・・気が・・・します。


ゆう  2011-09-15 23:51:36  No: 40946

返信ありがとうございます

色々と試してみた結果ですが、Socketの方に問題があったらしく、Socketの処理を一部変更(メッセージ送信時のメッセージのメモリが影響していたのでその修正)したところ、データベースが更新されるようになりました。

ご指導していただいた皆さんありがとうございました。

>HOtaさん
tryの中でQueryをEditにしてフィールドの値を変更してPostでDB更新をしています
色々とご指摘ありがとうございました。

>コミットさん
一応コミットなどは正常に行われているようでした
ありがとうございます。

>例外処理さん
確かにそちらの方が良さそうなので、早速変更してみたいと思います。
ありがとうございました。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加