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を使う場合の注意点とかってあるのでしょうか?
タイトルは、DB更新になっていますが、SQL文はSelectだけですよ。
Selectだけでエラー処理に飛ばないのは、データーベース側のエラーではないでしょうか?コンフリクトを起こしているとか。
データーベース側で同じSelect文を何度も処理してみたらどうなりますか?
コミットしてなくて、待ち状態とか。。。
Select文に対して、Commitは必要ありません。
関係ないですが例外処理は
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;
が、良いような・・・気が・・・します。
返信ありがとうございます
色々と試してみた結果ですが、Socketの方に問題があったらしく、Socketの処理を一部変更(メッセージ送信時のメッセージのメモリが影響していたのでその修正)したところ、データベースが更新されるようになりました。
ご指導していただいた皆さんありがとうございました。
>HOtaさん
tryの中でQueryをEditにしてフィールドの値を変更してPostでDB更新をしています
色々とご指摘ありがとうございました。
>コミットさん
一応コミットなどは正常に行われているようでした
ありがとうございます。
>例外処理さん
確かにそちらの方が良さそうなので、早速変更してみたいと思います。
ありがとうございました。
ツイート | ![]() |