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

解決


ゆう  2011-09-13 16:32:40  No: 40941  IP: 192.*.*.*

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-14 16:43:29  No: 40942  IP: 192.*.*.*

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

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

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

編集 削除
コミット  2011-09-14 17:06:25  No: 40943  IP: 192.*.*.*

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

編集 削除
HOta  2011-09-15 08:47:27  No: 40944  IP: 192.*.*.*

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

編集 削除
例外処理  2011-09-15 11:15:51  No: 40945  IP: 192.*.*.*

関係ないですが例外処理は
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 14:51:36  No: 40946  IP: 192.*.*.*

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

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

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


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

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

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

編集 削除