プロが教えるわが家の防犯対策術!

お世話になります。
VB6.0 & MDB でアプリケーションを作成しております。
ご質問内容を以下に記述させていただきます。

MDBへ合計140件のinsert文を実行している途中70件目くらいで、下記のメッセージが出力され、ロールバックしてしまいます。
エラーメッセージ:
ADO:-2147217833 指定されたデータ量がフィールド サイズを超えています。データ量を減らし、挿入または貼り付けを行ってください。

しかしながら、エラーが出力されているinsert文を、access2003のクエリに直接貼り付けて実行すると、問題なくデータが登録されます。

原因がわからなく難儀しております。

ソースを以下に記述させていただきます。
----------------------------------------------------------------
Public m_Connection As ADODB.Connection '// ADO接続

Private Function aaaaa() As Integer

FOR i = 0 to RecordCount
'// トランザクション開始
m_Connection.BeginTrans・・(1)

'// SQL文作成
・・・・insert文・・・・・・(2)

'// 実行
m_Connection.Execute strSQL, lngRsp・・(3)

'// エラー時ロールバック
If (3) = Error then
m_Connection.RollbackTrans
Exit For・・(4)
End if

Next  

End Function
----------------------------------------------------------------

70回目くらいの(3)でエラーが出力されて、(4)のロールバック処理に移行してしまいます。

恐れ入りますが、ご教示いただきたくよろしくお願い申し上げます。

以上です。

A 回答 (2件)

CommitTrans の位置を動かすわけには行かないんでしょうね。


(For Next 間の処理が一つでもエラーになったら全てRollBackしたい)

イマイチ不安だったのでGoogleってみました。

Access でクエリを実行するとエラー メッセージ "指定されたデータ量がフィールド サイズを超えています" が表示される
http://support.microsoft.com/kb/896950/ja
とか
多数のトランザクション処理中にエラー メッセージ "ファイルの共有ロック数が制限を超えています" が表示される
http://support.microsoft.com/kb/815281/ja
が関係しているのでは?
(大いに外してしまっているかもしれません ご容赦)
    • good
    • 0
この回答へのお礼

お世話になります。
早々のご回答ありがとうございます。

その後、再度データを確認しなおしてみたところ、
テキストデータ12byte長のカラムに16byteのデータを挿入しているデータがあり、
それでエラーが出力されていることが判明しました。

MDBの該当カラムを25byteにし、同様の処理を行ったところ、問題なく動作することを確認しました。

度々のご回答誠にありがとうございます。
並びに調査不足で申し訳ございませんでした。

本件これでクローズさせていただきます。

ありがとうございました。

お礼日時:2011/01/23 14:52

CommitTrans は何処に?


http://msdn.microsoft.com/ja-jp/library/cc364105 …
勘違いならご勘弁を。

この回答への補足

お世話になります。
ご回答ありがとうございます。

すいません。ソースを記述しなおさせていただきます。
申し訳ございませんでした。
comitは以下で行っております。
----------------------------------------------------------------
Public m_Connection As ADODB.Connection '// ADO接続

Private Function aaaaa() As Integer

'// トランザクション開始
m_Connection.BeginTrans・・(1)


FOR i = 0 to RecordCount

'// SQL文作成
・・・・insert文・・・・・・(2)

'// 実行
m_Connection.Execute strSQL, lngRsp・・(3)

'// エラー時ロールバック
If (3) = Error then
m_Connection.RollbackTrans
Exit For・・(4)
End if

Next  

If HasError = false then
m_Connection.CommitTrans
End If

End Function
----------------------------------------------------------------

データ件数が少ない場合で動作は確認しております。
処理としては問題ないと考えております。

データ件数が多い場合に、下記のエラーが出力されてしまいます。
ADO:-2147217833 指定されたデータ量がフィールド サイズを超えています。データ量を減らし、挿入または貼り付けを行ってください。

恐れ入りますが、ご教示いただければ幸いです。

以上です。

補足日時:2011/01/23 12:16
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング