- 締切済み
VB & SQLサーバ
ADOにて接続してます。 ロールバックがうまくできずに困っています。 試してみたのですが、エラーが発生し、処理できませんでした。 それに テーブルの列名を取得する方法も探しています。 ご存知の方いらっしゃいましたらご教授ください。
- hell
- お礼率16% (41/243)
- Visual Basic
- 回答数1
- ありがとう数2
- みんなの回答 (1)
- 専門家の回答
みんなの回答
- TAGOSAKU7
- ベストアンサー率65% (276/422)
サンプルです。 ※funcUpdate関数 BeginTransはしていましたか? もし同じ処理を行っているのであれば、そちらの不具合の出ているソースを見せてください。 ※getTableColumn関数 参照設定で Microsoft ADO Ext. x.x for DDL and Srcurity を指定しなければいけません。 Sub funcUpdate() Dim adoCnn As ADODB.Connection Dim strSQL As String ' 接続を確立する Set adoCnn = New ADODB.Connection adoCnn.Open "Provider=SQLOLEDB;Data Source=(local);Initial Catalog=pubs;", "sa", "" '新規トランザクションを開始 adoCnn.BeginTrans 'レコードに何らかの変更を加えるSQL文を実行する strSQL = "insert into table1 (test1,test2) values ('あ','い')" adoCnn.Execute strSQL If MsgBox("変更を行いますか?", vbOKCancel) = vbOK Then '変更をすべて保存 adoCnn.CommitTrans Else 'カレント トランザクションで行った変更内容をすべてキャンセルしてトランザクションを終了 adoCnn.RollbackTrans End If '開放 adoCnn.Close Set adoCnn = Nothing End Sub Sub getTableColumn() Dim adoCnn As ADODB.Connection Dim adoRec As ADODB.Recordset Dim adoxCat As ADOX.Catalog Dim adoxTbl As ADOX.Table Dim adoxClm As ADOX.Column ' 接続を確立する Set adoCnn = New ADODB.Connection adoCnn.Open "Provider=SQLOLEDB;Data Source=(local);Initial Catalog=pubs;", "sa", "" 'カタログにセット Set adoxCat = New ADOX.Catalog adoxCat.ActiveConnection = adoCnn 'テーブルループ For Each adoxTbl In adoxCat.Tables Debug.Print "******************************" Debug.Print "テーブル[" & adoxTbl.Name & "]" 'カラムループ For Each adoxClm In adoxTbl.Columns Debug.Print " " & adoxClm.Name Next adoxClm Debug.Print "******************************" Debug.Print Next adoxTbl '開放 adoCnn.Close Set adoxCat = Nothing Set adoCnn = Nothing End Sub
関連するQ&A
- VBでSQL
SQLでテーブル1に該当レコードがなければインサート あればアップデートをする処理をしたいのです IF ??? THEN UPDATE テーブル1 SET SELECT * FROM テーブル2 WHERE 条件 ELSE INSERT INTO テーブル1(SELECT * FROM テーブル2) END IF ???はプライマリキーで判定をしようと考えています こんな感じでやろうとしたところ うまくいきませんでした VB上で実行しよううとしているからなのでしょうか? ADOでSQLサーバに接続しています 条件分岐もどういう条件(VBでの書き方)がわからないです。 よろしくお願いします。
- 締切済み
- Visual Basic
- TRANSACT-SQLでのシステムエラーの検知
TRANSACT-SQLで下記のような処理を記述したとき、 (1)~(3)で起きたシステムエラーの検知はCATCHで共通的に行えますか? TRY SELECT処理 ↓ エラー発生(1) ↓ INSERT処理 ↓ エラー発生(2) ↓ UPDATE処理 ↓ エラー発生(3) CATCH GOTO 異常終了処理 END COMMIT :異常終了定義 ログ出力(エラーメッセージ) ロールバック ※エラー処理は、テーブルがDROPされていた、ディスクが破損したなどの通常は発生しないエラーが起きた場合を想定しています。 ※エラーメッセージはステートメントが最終の処理の結果を持ってくれていて、その取得方法があると思っています。 もし実現できなかったり、実現出来たとしても問題があるようであればご指摘頂きたく存じます。
- ベストアンサー
- SQL Server
- 環境:SQL-Server2005
環境:SQL-Server2005 アプリケーション:Access2003 接続:DAO3.6 AccessよりSQL-Serverのテーブル、ローカルテーブルへ接続した場合、ODBC接続が 接続不可となる場合があります。 エラーとなりますが、エラー状態のまま処理を再開出来たりする場合がありあます。 常時発生する事象ではありませんが、発生率は低いですが、何か考えられる原因がございますでしょうか。
- 締切済み
- SQL Server
- SQLのロールバック
SQLで明示的にbegin trans - commit transを設定していない場合、テーブルに対して複数のレコードをupdateしようとして一部のレコードのみでエラーが発生するとロールバックの処理はどこまでしてくれるのでしょうか? 設定によっても違ってくるのでしょうか?
- ベストアンサー
- SQL Server
- 異なるDBのSQL
SQLを始めたばかりの初心者です。 oo4oやADOを使用して、オラクルサーバーのデータをSELECT文で オラクル内の複数のテーブルを結合してListViewで表示する プログラムを作成中です。 オラクルサーバーにメインデーターがあり 各クライアントにMDB形式でマスタデータがあります。 MDBのマスタデータにはたとえばですが、テーブル名 [商品テーブル] フィールド名[コードナンバー]、[商品名]... となっており、サーバーには、テーブル名[商品コード] フィールド名[コードナンバー]、[受注日]....があるとします。 クライアントからoo4oやADOを使用して、サーバーのデータを SELECT文でオラクル内の複数のテーブルを結合して ListViewで表示するのはできます。しかし [コードナンバー]は取得できるのですが、サーバーのテーブルには、 [商品名]がないためとうぜん表示できません。 この場合、オラクルから取得したデータをマスタデータのあるMDBに新しくテーブルを 作りそこに一度格納して再度ADOで結合処理して 商品名を表示する方法しか考えつかないのですが、 ほかに良い方法はありますでしょうか? ADOで接続MDBに保存再度ADOで接続して表示では レスポンスが悪いかなと思いまして... *VB6 winXP-pro オラクル9i
- ベストアンサー
- その他(データベース)
- ADO接続のトランザクション処理
SQL2005のDBに対して ADOのconnectionオブジェクトで接続しているのですが、 下記のようにトランザクションを開始し、SQLを実行し、 エラーが発生してロールバックを行っていない場合、 2個目のSQLがいつまでたってもロック状態でタイムアウトになりません。 このような場合、ADOconnectionのコマンドタイムアウトのデフォルト値30秒で タイムアウトとなり、ロールバックされないのでしょうか? 以下adoコネクションオブジェクトをConnobjと表記します Connobj.BeginTrans Connobj.Execute "Insert into AAA・・・・" ← このInsert文で失敗 Connobj.Execute "Update BBB SET ・・・・" ← このUpdateは成功 ※ロールバックもコミットも行わない (プログラムの不具合でロールバックができなかった場合や、 アプリで異常が発生してロールバックが行えない等) お手数をおかけしますが、何かご存知の方、ご教授願います。
- 締切済み
- SQL Server
- SQL Server + VB の開発において
こんにちは。 SQL Server + VB で開発をしているのですが、下記のソースの ★の部分でエラーが発生するのですが、回避策がわからなくて 困っています。(T T) 'udlパス名 strPath = パス 'コネクション 設定 objCnn.ConnectionString = strPath objCnn.Open 'トランザクション開始 objCnn.BeginTrans 'SQL作成(列名分 データを設定) strSql = "Insert Into User.TableName Values ('2004','02','18')" 'SQL実行★ objCnn.Execute strSql 'エラー判定 If objCnn.Errors.Count > 0 Then objCnn.RollbackTrans Else objCnn.CommitTrans End If エラーNo.:-2147467259 エラーメッセージ:手動または分散トランザクション モードのため、新規接続を作成できません。 別のアプリでSQLは実行できたので、SQLの文法エラーというのは考えにくいので、VBでの操作の仕方が 問題だとは思うのですが、分かる方お願いいたします。m(_ _)m
- ベストアンサー
- Visual Basic
- 【2005】トリガエラー時の呼び出し元のコミット
はじめまして。 現在、SQLServer2005を利用したアプリケーションのメンテナンスを行っています。 今回、あるテーブルに変更があった際に、その内容を他テーブルに登録するという内容のプログラムを作成しています。 本来であれば、アプリケーション側にてそのテーブルに対する変更時に、併せてもう一つのテーブルに内容を書き込めばいいのですが、現状のアプリケーションが全体の仕様書がなく、該当テーブルに変更を行う部分を全て洗い出すことが難しい状況となっています。 そのためにトリガにて処理を行おうと考えています。 ここで、質問です。 トリガ内でエラーが発生した時、通常であれば呼び出し元のクエリまでロールバックされてしまいますが、トリガでの処理のみロールバックを行い、呼び出し元の処理はコミットしたいと考えています。 トリガ内にて例外をcatchして、その部分でraiserrorを発行しなければ 可能かと思い、そういう実装を行ったのですが、やはり呼び出し元のクエリまでロールバックされてしまいます。 トリガでの処理のみロールバックし、呼び出し元のクエリはコミットするような方法をご存知でしたらご教示ください。 よろしくお願いします。
- ベストアンサー
- SQL Server
- EXCELにADOで接続した際のSQLでエラーが出てしまいます(>o<)
ExcelのワークシートをDBテーブルとして利用しています。 VBAで、ADOを使用してExcelに接続し、SQLでデータを操作したいのですが、3つのテーブルを結合した検索SQLで、 「クエリ式 XXXX の 構文エラー : 演算子がありません。」 というエラーが出てしまいます。 XXXXには、SQL文のJOINしている部分が表示されます。 3つのテーブルのうち、2つのテーブルの結合までは、エラーはなく、結果を取得できます。 テーブルの結合の数やそれ以外に、何か制限があるのでしょうか? ご存知の方がいましたら、ご回答、よろしくお願いします。m(_ _)m
- ベストアンサー
- その他(データベース)
- SQL Serverの移行について
SQL Server2000からSQL Server2008へ 移行したいです。 Accessからリンクテーブルをして使用しています。 移行後、Accessのプログラムを実行しようとすると、 エラーが発生します。ODBC接続を使用しています。 リンクテーブルマネージャで再リンクしてみたのですが、 うまくいきませんでした。 何かうまくいくためのヒント等わかるかたいらっしゃいますでしょうか?
- 締切済み
- SQL Server