• ベストアンサー

トランザクション実行のステータス

DBを更新させるプログラムを作っているのですが トランザクション(BeginTrans)をかけた時、実行しているか否か そのステータスをみる方法などはあるでしょうか? 宜しくお願い致します

質問者が選んだベストアンサー

  • ベストアンサー
noname#140971
noname#140971
回答No.1

一介の服飾デザイナですが、横から一言。 少し、質問が曖昧なように思います。 一昔前は、DDE通信で DB と通信していたですよね。 それが、DAO とか ADO とかに変わってきたと思います。 そういう意味では、通信方法を明示される必要がありませんか? 例えば、トランザクションに関連する操作は、ADODB では、 ・エラートラップを設定する。 ・Errors コレクションをクリアする。 ・トランザクションの開始を宣言。 ・実行。 ・トランザクションのコミットを宣言。 という手順が一般的かと思います。 エラートラップに引っかかった場合は、 ADODB.Error.Description ADODB.Error.Number ADODB.Error.SQLState 等で、その内容を知ることができます。 この手続きは、少なくとも、Access、SQL Serever では同じです。 質問文では、DB も不明です。 また、DB に直接アクセスして SQLState の類の情報を取得する術を聞いているのかな? とも、とれる質問です。 少し、使用言語も含めて補足されたが良いと思います。

yachiru
質問者

お礼

お礼が大変遅くなってしまい、申し訳ありませんでした 足りない言葉からのご助言、大変ためになりました。有難うございます

関連するQ&A

  • トランザクションの開始

    VBでSQLSERVER6.5にODBC接続し、 トランザクションを開始しようとしたところ、 以下のエラーメッセージが表示されました。 どういうことか教えてください。 db.BeginTrans 実行時エラー '2147168227(8004d01d('; 1つ以上のODBC接続が使用中のため、トランザクションを開始できません。

  • Accessdでの「トランザクションが多すぎる」エラーとは何?

    Access98のVBAでプログラムを組み、RecordsetをUpdateしたり、Deleteしたりしていると、『実行時エラー'3003':ネストしているトランザクションが多すぎるため、トランザクションを開始できませんでした』とエラーが発生します。 「トランザクション」の意味が分かりませんが、プログラムの中では、「トランザクション」なるモノを定義や設定したりしておりません。 ヘルプを閲覧すると「BeginTrans」「CommitTrans」「Rollback」と云う難しそうな言葉が出てきました。 エラーが発生しないようにするためには、プログラムの中にどの様なエラー回避の語を書き込んで置けば良いのでしょうか?

  • SQLServer 分散トランザクションについて

    現在サーババージョンアップに伴うストアドの動作検証を行っています。 内容としては2000で動作していたものを2008R2に移行するだけです。 そこでひとつ問題が発生して作業がとまってしまいましたので、 お力を借りたく、質問させていただきます。 環境としては、クライアントはACCESSプログラム、DBはSQLServerとなっています。 ストアドの実行で下記のように記載していたプログラムが動作しなくなりました。 Set adoCN = New ADODB.Connection adoCN.Open CurrentProject.Connection adoCN.BeginTrans adoCN.Execute "exec dbo.実行ストアド" 'エラー判定 adoCN.CommitTrans 上記エラー判定で「リンク サーバー "(null)" の OLE DB プロバイダー "SQLNCLI10" から、 メッセージ "アクティブなトランザクションがありません。" が返されました。」 となってしまいます。 また、このストアド内では「SET XACT_ABORT ON ~ SET XACT_ABORT OFF」 としてあります。 ちなみに、上記「adoCN.BeginTrans」、「adoCN.CommitTrans」をコメントすると、 正常に動作しました。 「SET XACT_ABORT ON」としているので「adoCN.BeginTrans」はなくてもいいと思うのですが、 明確に『不要である』としている文献等、見つからなかったため、迷っています。 サーバはバージョンアップに伴い、分散トランザクションを使用するようになっていますが、 この変更が影響しているのかどうか、まったく別の原因なのか、わからない状態です。 うまく伝わっているか心配ですが、どうぞ宜しくお願い致します。

  • asp+dllでのcommitの有効範囲

    aspでトランザクション(BeginTrans、CommitTrans)を定義し、 そのトランザクション内でDB更新機能を持ったdllを使用したとします。 この時、dllでDB更新エラー時DBに対しロールバッグはかけることは可能 でしょうか  asp  BeginTrans  dllを呼ぶ  dllが不正終了時、aspを終了する  CommitTrans  dll   DBを更新(DLL内ではbegintran、committranはしない) もちろんDLLはサーバー内で動かします。 DBはsql server、DLLはvb6.0で作成します。 どうかお力添えを、、、

  • トランザクションのネストについて

    トランザクションのネストについて お世話になります。 今、ストアドの中でストアドを実行するようなSQLを作成しているのですが、 このときのトランザクション処理について教えていただきたいです。 簡単な流れとしましては Aトランザクション開始(大枠のストアド) ↓ 処理a  ↓  Bトランザクション開始  ↓  (Aストアドの中のストアド実行)  ↓  Bコミット  ↓ 処理b ↓ Aコミット といった感じなのですが、BストアドでコミットするとBストアドをCALLする前の処理aが コミットされてしまいます。 ここはBはBだけでコミットされてほしいのです。 独自で調べた限りでは、「トランザクションのネストはMySQLではできない」ということらしいのですが、 こういった場合、どのようにしたらよいのでしょうか。 もし方法があれば、ご教示のほどお願い致します。 -環境- [DB MySQL 5.0] [OS Windows XP]

    • ベストアンサー
    • MySQL
  • トランザクションの肥大化

    Windows2003+SQL-Server2005でシステムを構築しておりますが、トランザクションログの肥大化に悩んでおります。 ファイルサイズが80Gb(空き容量88%)のDataBseを完全Backupすると300Gbを超えるサイズとなってしまいます。 トランザクションファイルのサイズが300Gbを超えておりますので、これが原因だと考えておりますが、定期的にトランザクションのBackupを実施しても全く(トランザクションFの)空き容量が減りません。 復旧モードを単純に変更してみたのですが、状況は変わらずトランザクションファイルがじりじり肥大化しています。 他のDBとのレプリケーションを実施しており、パブリッシャ側でDBの再構築を実施すると一気にトランザクションのサイズが増加するので、レプリケーションの設定を見直しておりますが、問題点を発見する事ができない状態です。 レプリケーションを含めDB動作には全く問題がないのですが、このままの状態では遠からずDisk容量不足が発生してしまいます。 何かお心当たりがございましたら是非ご教授頂きたく、よろしくお願い致します。

  • ASPでトランザクションをかけるとエラーする「ファイアーホースモード」

    ASPでSQLserverに接続し、レコードの更新をかける際に、 BeginTrans---CommitTrans と記述すると、 「ファイアーホースモードの場合はトランザクションがかけられない」という 主旨のエラーが出ます。 このファイル内でトランザクションをかけている場面はここのみです。 (複数書いていてCursorTypeを設定しないとエラーするのは既に 解決済みです。) そもそも、「ファイアーホースモード」とはどんなモードなのでしょうか?

  • トランザクション管理について

    皆さんはトランザクション管理を何処で行ってますか? 大体のプロジェクトでは以下の2パターンに集約されると思います。 1.ビジネスロジックでトランザクション管理して、DAOへ引数としてトランザクションを渡す。  当然、コミット・ロールバックはビジネスロジック側で管理。 2.ビジネスロジック側では管理せず、DAO側で管理。  ビジネスロジックへは結果のみ返却。 実は今回のプロジェクト、Java初心者(プログラムって何?レベルとC++なら受講したことあるよ!レベル)が9割を占めるチームです。 初心者の方々はビジネスロジックを設計・実装します。 それ以外の部分(DB・SpringFramework等)を私が設計・実装します。 ビジネスロジックの部分の設計も、概要設計レベルしか記述されておらず、トランザクション無視の設計しかありません。 バグにまみれてデスマーチなんてごめんなので、2のパターンでトランザクションからDB周りを設計したいと思っているのですが、リーダー(スキルは不明。経験はあるらしい)が「DAO側でやると上手くいかない場合が多い」と言われ、却下されそうです。 何処がどう上手くいかないのか聞いても、明確に返答は貰えません。 でもなんとか2のパターンでいきたいのですが、上手い説得方法が見つかりません。 なんて言えば納得してくれそうか、皆様のお知恵を拝借したく投稿しました。 足らない部分は補足させていただきます。 よろしくお願いします。

    • ベストアンサー
    • Java
  • postgresqlでのトランザクションについて

    postgresqlで、「WARNING  進行中のトランザクションがありません」のエラーが出てしまいました。 これはそのままの意味だと思うのですが 直す方法がわかりません。 ワーニングなので、、、といいたいところですが、そうもいかず。 apのログで、トランザクション関係の辺りを見ましたところ、 トランザクションを開始し、 TABLEをDROPしようとしましたが、存在しなかった(ようだ)。 (PQexecがエラーでリターン) 存在しないけれど、commit してトランザクションを終わらせている。 のが原因かなと思いました。 なので、PQexec()がエラーの場合はcommitしなければいいのかと はずしましたが結果は同じでした。 トランザクションが無いのだからrollbackもいらないですよね。 そこで質問ですが drop文、1ステップのSQL実行も明示的にトランザクションの処理をしたほうがいいのでしょうか? このワーニングは通常のトランザクションの処理の中で、どういう時にでるのでしょうか? oracleとpostgresqlの明示的・暗黙的な制御に戸惑っています。 (oracleからpostgresqlに移行することになりました) 叱咤でも何でもかまいませんので、アドバイスよろしくお願いいたします。

  • トランザクション名の付け方

    こんにちは。VB.NETの勉強をしている社会人です。 クリック時にトランザクション名が付されるようにコーディングしているのですが、誤りがあるようでうまく動作しません。「 sTrans = scn.BeginTransaction("トランザクション1")」の記述に問題があるようですが、記述はテキストのままです。 ※「sTrans = scn.BeginTransaction()」と、名前を付けなければトランザクションは実行されます。 どのようにすればトランザクションに名前が付けられるのか、教えていただけないでしょうか。 よろしくお願いいたします。 Public Class Form1 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim sTrans As OleDb.OleDbTransaction Dim scn As OleDb.OleDbConnection = New OleDb.OleDbConnection( _ "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" _ & "C:\VB_DB\SampleDB2.mdb;Persist Security Info=False") scn.Open() 'トランザクションを開始する Try sTrans = scn.BeginTransaction("トランザクション1") MessageBox.Show("トランザクションを開始しました。", "処理経過") 'トランザクションを終了する sTrans.Commit() Catch ex As Exception MessageBox.Show("トランザクションを開始できませんでした。", "処理結果") End Try scn.Close() End Sub End Class

専門家に質問してみよう