MDBへレコード挿入中にエラーが出力される

このQ&Aのポイント
  • VB6.0 & MDBでアプリケーションを作成しております。MDBへ合計140件のinsert文を実行している途中70件目くらいで、指定されたデータ量がフィールドサイズを超えているエラーが出力され、ロールバックしてしまいます。エラーが出力されているinsert文を、access2003のクエリに直接貼り付けて実行すると、問題なくデータが登録されるため、原因がわかりません。
  • VB6.0 & MDBでアプリケーションを作成しており、MDBへ合計140件のinsert文を実行している途中70件目くらいで、データ量がフィールドサイズを超えているエラーが発生し、データの挿入がロールバックされてしまいます。同じinsert文をaccess2003のクエリで実行すると、エラーが発生せずにデータが登録されるため、原因が分かりません。
  • VB6.0 & MDBのアプリケーションで、MDBへ合計140件のinsert文を実行している途中70件目くらいで、データの挿入中に指定されたデータ量がフィールドサイズを超えているエラーが発生し、ロールバックされてしまいます。しかしながら、同じinsert文をaccess2003のクエリに貼り付けて実行すると、エラーが発生せずにデータが登録されるため、原因が分かりません。
回答を見る
  • ベストアンサー

MDBへレコード挿入中にエラーが出力される

お世話になります。 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)のロールバック処理に移行してしまいます。 恐れ入りますが、ご教示いただきたくよろしくお願い申し上げます。 以上です。

noname#164045
noname#164045

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

  • ベストアンサー
  • nicotinism
  • ベストアンサー率70% (1019/1452)
回答No.2

CommitTrans の位置を動かすわけには行かないんでしょうね。 (For Next 間の処理が一つでもエラーになったら全てRollBackしたい) イマイチ不安だったのでGoogleってみました。 Access でクエリを実行するとエラー メッセージ "指定されたデータ量がフィールド サイズを超えています" が表示される http://support.microsoft.com/kb/896950/ja とか 多数のトランザクション処理中にエラー メッセージ "ファイルの共有ロック数が制限を超えています" が表示される http://support.microsoft.com/kb/815281/ja が関係しているのでは? (大いに外してしまっているかもしれません ご容赦)

noname#164045
質問者

お礼

お世話になります。 早々のご回答ありがとうございます。 その後、再度データを確認しなおしてみたところ、 テキストデータ12byte長のカラムに16byteのデータを挿入しているデータがあり、 それでエラーが出力されていることが判明しました。 MDBの該当カラムを25byteにし、同様の処理を行ったところ、問題なく動作することを確認しました。 度々のご回答誠にありがとうございます。 並びに調査不足で申し訳ございませんでした。 本件これでクローズさせていただきます。 ありがとうございました。

その他の回答 (1)

  • nicotinism
  • ベストアンサー率70% (1019/1452)
回答No.1

CommitTrans は何処に? http://msdn.microsoft.com/ja-jp/library/cc364105.aspx 勘違いならご勘弁を。

noname#164045
質問者

補足

お世話になります。 ご回答ありがとうございます。 すいません。ソースを記述しなおさせていただきます。 申し訳ございませんでした。 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 指定されたデータ量がフィールド サイズを超えています。データ量を減らし、挿入または貼り付けを行ってください。 恐れ入りますが、ご教示いただければ幸いです。 以上です。

関連するQ&A

  • VB6からADOを介してACSESS2000MDBへのアクセスエラー

    VB6からADOを使用しACSESS2000MDBにデータを登録すると INSERT 文でエラーになってしまいます。 エラーコード:-2147217833です。 何が原因か分かる方教えて下さい。

  • MDBファイルをCSV出力したい

    こんばんは。 環境: OS:WINDOWS2000 VB6.0 sp5 アクセス2000 VBからアクセスのMDBデータをCSV形式で出力させようとしています。  mdbファイルが実行中にVBのexeを起動してcsvファイルを取得したいのですが、いい方法が分かりません。 閉じているMDBファイルのデータをCSVで出力することは可能です。  MDBファイルが開いているとexeを実行した時に「実行時エラー7866 データベースが開いています」というようなメッセージが出て処理ができません。 なにかいい方法はないでしょうか よろしくお願いいたします。

  • 他のMDBのテーブルに追加したい

    Access2010のADOについてご質問します。 以下のようにして、データを追加しています。 Dim SQL As String Dim cn As ADODB.Connection Set cn = CurrentProject.Connection ' SQL = "INSERT INTO テーブルA ( 勤務時間 ) " SQL = SQL & "SELECT [テーブルA ].[勤務時間] " SQL = SQL & "FROM テーブルA ; " cn.Execute SQL ご質問したいのは、 当MDB(PC)から社内サーバーにあるMDBのテーブルに追加したいのです。 違うテーブル名でしたら、リンクをすれば済む話とは思いますが 同じテーブル名の「テーブルA」なので どのようにすればいいのか困っています。 ご指導の程をよろしくお願いします。

  • 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は成功 ※ロールバックもコミットも行わない  (プログラムの不具合でロールバックができなかった場合や、  アプリで異常が発生してロールバックが行えない等) お手数をおかけしますが、何かご存知の方、ご教授願います。

  • ASPで,mdbファイルへのinsert文のエラー

    ASPで,guestbook.mdbファイルへ接続,はOK, そしてinsert文で新規レコードを追加しようとすると エラーが出てしまいます。 select文は使えるのですが。 エラーの内容は, エラー タイプ Microsoft OLE DB Provider for ODBC Drivers (0x80004005) [Microsoft][ODBC Microsoft Access Driver] 更新可能なクエリであることが必要です。 /asp_server/toda/guestbook.asp, line 24 です。 dbへの接続方法は, '***** データベース(guestbook.mdb)に接続 ***** Set ObjConn = Server.CreateObject("ADODB.Connection") ObjConn.Open "Driver={Microsoft Access Driver (*.mdb)}; DBQ=" & _ Server.Mappath("guestbook.mdb") です。 問題は, '***** 名前とメッセージが空白でないときはデータ追加SQLを実行 ***** StrSQL = "insert into T_Message (name, word, entrydate) " & _ "values ('" & name & "','" & word & "',#" & entrydate & "#)" ObjConn.Execute(StrSQL) ここの,ObjConn.Execute(StrSQL)でエラーが起こります。 なぜエラーが出るのでしょうか。原因と対処方法をおしえていただけませんでしょうか? 「更新可能なクエリであることが必要です。」というエラーなので何かの設定の問題でしょうか?

  • 実行時エラー'-2147467259(80004005)':

    エクセルからADOでアクセスに繋ごうとしたときに 実行時エラー'-2147467259(80004005)': マシン'マシン名'のユーザー'Admin'がデータベースを開けない状態、またはロックできない状態にしています。 というエラーが出てしまいます。 書いているコードは以下です。 Public cn As ADOdb.Connection Set cn = New ADOdb.Connection cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=test.mdb" test.mdb自体はテーブルもクエリもフォームも何も開いていない状態です。 一度アクセスを終了させて再起動させればうまくできるのですが、何が原因でこのメッセージが出るのでしょうか? もしわかれば教えてください。 よろしくお願いします。

  • SQLの構文エラー??

    お世話になっています。 OS:Win2000 DB:Access2000 です。 Insert文、Update文共に「構文エラー」になってしまいます。 ですが、実行したSQL文をAccessのクエリに貼り付けて実行しても エラーにならず、正常に実行されます。 エラーになったSQL文は以下のとおりです。 INSERT INTO D_Schedule (ShisetuNo,YYYYMMDD,ScheTime,Seq,Title,Memo,AddDate,UpdDate) VALUES (1,20041213,'0900',6,'BBB','BBB',#2004/12/16 14:31:49#,#2004/12/16 14:31:49#) UPDATE D_Schedule Set YYYYMMDD =20041213, ScheTime ='0900', Title ='AAA', Memo ='BBB', UpdDate =#2004/12/16 14:30:06# WHERE ShisetuNo=1 AND YYYYMMDD=20041213 AND ScheTime='0900' AND Seq=2 Insert文の場合、Valueの左側を指定しないで Insert Into D_Schedule Values()だとエラーにならないです。 何かお心当たりのある方、ご指摘お願いいたします。 DB更新はADOで行っています。 ADOの接続方法は Set gobjCon = Server.CreateObject("ADODB.Connection") gobjCon.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _ "Data Source=" & GCOM_DBNAME & ";" です。 SQL文の実行方法は gobjCon.Execute(strSQL) です。よろしくお願いいたします。

  • ADOのExecuteメソッドで交互にエラーが出る

    こんにちは。 ExcelでADO+ODBCを用いてローカルのMySQLにアクセスしています。 とあるサイトから参考にさせてもらって作成した以下のソースで、 シート上のボタンをクリックしたら ODBCに設定したDSNのテーブル一覧をシートに出力 するというマクロなのですが、実行してみると正常終了とエラーが交互に繰り返されます。 エラーが出るときにデバッグしてみると標準モジュールの Set adoRS = adoCON.Execute("SHOW TABLES;") を実行した時点でエラー(赤丸の×でエラー説明なし)がでて強制終了します。 この原因について心当たりがありましたら教えてください。 ****シートモジュール**** Private dsn As String Private uid As String Private pwd As String Private strsql As String Sub para_get() dsn = Range("C6") uid = Range("C7") pwd = Range("C8") strsql = Range("C9") End Sub Sub ボタン1_Click() Dim errflag As Integer errflag = 0 Call para_get errflag = DBconnect(dsn, uid, pwd) If errflag <> 0 Then MsgBox "データベースに接続できませんでした" Else MsgBox "データベースに接続できました" End If errflag = sql_exe End Sub *****標準モジュール****** Dim adoCON As New ADODB.Connection Public Function DBconnect(dsn As String, uid As String, pwd As String) Dim errflag As Integer errflag = -1 On Error GoTo errflag 'Access VBA Tips '4.5 MySQLのデータベースを開く・閉じる 'ADOでデータソースをオープン adoCON.Open "dsn=" & dsn & ";uid=" & uid & ";pwd=" & pwd & ";" errflag = 0 Exit Function errflag: 'データベースのクローズ adoCON.Close Set adoCON = Nothing End Function Function sql_exe() As Integer Dim adoRS As New ADODB.Recordset 'レコードセットの作成(SELECT文の実行) Set adoRS = adoCON.Execute("SHOW TABLES;") Range("B15").CopyFromRecordset adoRS 'データベースのクローズ adoRS.Close Set adoRS = Nothing End Function

  • MDBファイルの配布について

    以下のような条件の場合 配布先にACCESSの実行環境(ランタイム)及び、ライセンスは必要でしょうか? ・ACCESSにてMDBを作成し、そこにテーブルとデータを格納する。 ・MDB上のデータを検索/表示するEXEを、VB.NETで作成する。  (EXEからは、ADO.NETでMDBにアクセスする) ・ACCESSのMDBは、単純にデータの格納の為だけに使用する。  (フォーム、レポート、クエリーなどは一切使用しない) ・配布先には、EXEとMDBを配布する。

  • MDBをADO接続でINSERT・UPDATE・DELETE

    VB2005.NETの初級開発者です。 MDBをADO接続で開発を行いたいのですが 記述の方法がわかりませんので教えて下さい。 下記のようなサンプルはネット上でもよく見るのですが INSERT分で記述を行いたいのですが、サンプルが見つかりません よろしくお願いします。 後、CurrentProject.Connection.Execute strSQL, , adCmdTex このような記述をネット上で見るのですがstrSQLにInsert分を 記述すれば良いのですか、わからないので教えて下さい。 また、下記の記述の方がよいのですか? Dim ct As New Connection() Dim rt As New Recordset() ' 接続文字列を設定 ct.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" & _ "Data Source=C:\test.mdb" ' データベースに接続 ct.Open() ' テーブルを指定し、レコードセットをオープン With rt .CursorType = CursorTypeEnum.adOpenDynamic .LockType = LockTypeEnum.adLockOptimistic .Open("Insert_Tbl", ct, , , CommandTypeEnum.adCmdTable) End With ' データを追加 With rt .AddNew() .Fields("aaa").Value = TextBox1.Text .Fields("bbb").Value = TextBox2.Text .Update() End With