更新時エラー番号5とは?

このQ&Aのポイント
  • 質問者はVB5.0とAccessを使用して既存プログラムを修正しています。
  • データの更新時にエラーが発生し、SQLを実行する部分でエラーメッセージが表示されます。
  • 質問者はSQLをAccessのクエリに入力して実行すると成功するため、コーディング上のエラーの可能性を考えています。
回答を見る
  • ベストアンサー

更新時エラー番号5

言語:VB5.0 DB:Access で既存プログラムを修正しています。 データの更新時、SQLを記述後に If RunSQL(SQL) <> R_OK Then '実行 Call ErrMsg(1) 'エラーメッセージ Exit Sub 'サブルーチン終了 End If としています。 RunSQLのなかでは、 Function RunSQL(SQL) As Integer On Error Resume Next Dim ErrorCnter As Integer 'エラーカウンター RunSQL = R_OK 'リターンコード(OK) For ErrorCnter = 1 To 5 'エラーカウンター5までループ DB.Execute SQL, dbFailOnError 'エグゼキュート実効 If Err <> 0 Then '失敗時 If ErrorCnter = 5 Then 'エラーカウンター5のとき RunSQL = Err 'リターンコード(エラー) End If Else '成功時 Exit For 'ループぬける End If Next End Function このようになっています。 ある更新をかけたとき、 このエラーにかかってしまいます。 SQLがおかしいのかな?とおもい、 AccessのクエリーにSQLをうつして 実行すると、実行できます。 。。。プロシージャが不正に使われている、 というエラーのようなんですが、 これはどういうことなんでしょうか? データでは,実行できるのに、コーディング上で 実行エラーになる、ということなのですが。。

noname#2205
noname#2205

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

  • ベストアンサー
  • a-kita
  • ベストアンサー率50% (6/12)
回答No.2

補足ありがとうございます。 状況からSQL文字列の問題で、しかも特定の場合だけなので代入値を疑うのが最優先と思います。 私はVB6.0 DAO3.6 Access2000の環境で、仮にテーブルを作成して掲載されているソース、SQLをそのまま実行しましたが再現しませんでした。 ネットで調べてみましたが、3075は代入値自体にシングルクォーテーションが含まれている場合がかなり多いようです。その他半角カナの扱いで出る場合もあるようですが、具体例は分かりませんでした。 頂いたSQLは守秘義務などの理由から代入値は変更されて掲載されたと判断しましたが(無論公開しないで結構ですが。)実際の値を検査するのが次のステップだと思います。 すべての列に実際の値を一つずつ代入して(他のカラムにはスペースやゼロなど無害な値を入れる。)検査して行けばエラーの出る列と値を特定できると思います。 まずはお試しを。

noname#2205
質問者

お礼

結局よくわからなかったのですが、 一旦,データをDSNファイルにしてから、それを 読み取って、SQLで更新かける,と言った処理を していたんです。 DSNにするとき、の処理がわるいのかもしれませんね。 もう一度みなおしてみます。 ありがとうございました!!!!

その他の回答 (1)

  • a-kita
  • ベストアンサー率50% (6/12)
回答No.1

エラー箇所の特定、およびもう少し内容を詰める必要があると思います。 1.念のため。エラーが発生する行は間違いなく「Execute」実施行ですか?デバッグモードで実行して発生行を特定してください。 2.「Execute」実施行で発生しているとして、他のSQLは通りますか?単純なSQLなどで試してみてください。 3.そのSQLだけがこけるのであればたまたまAccessは通してくれたと考えます。Jetは標準SQLの他にMicrosoft特有の拡張関数も使えますのでSQL中にそういった関数がないか、できればSQLそのものを教えてください。 4.DAOとAccessのバージョンも教えてください。 と言ったところです。 通常、DB系エラーは3000番台です。5番は色々な場面で出ますが、関数の引数に無茶な変数を代入しても出ます。まずはエラー発生行を特定し、その行を詳しく補足してください。

noname#2205
質問者

補足

デバッグしてみると、RUNSQL内のループで 1.DB.Execute SQL, dbFailOnError で Errconterが5になるため、エラーメッセージを 出す処理に流れます。 2.はい。エラーになったとき、RUNSQLは、 10回ループするのですが、1回目はとおりました。 2回目で、エラーになったのです。 SQL文の文字数にもよるのでしょうか? ちなみに、lenb(strconv(sql,vbFromUnicode )) とイミディエイトウィンドウで出した場合、 とおったものは、433でエラーは、460になりました。 3.エラーになったSQLを記述したのでいいでしょうか? UPDATE データ SET コード1 = ' ',コード2 = ' ',コード3 = ' Shem',コード4 = 'riap ',会社名1 = ' ',会社名2 = ' ',会社名3 = ' kkk ',会社名4 = 'k ',課 = ' ',コース有 = -1,コース受講済 = 0,コース受講届 = -1,振込み先 = -1,銀行名 = 1.356316E-19,支店 = 1.356316E-19,受講料 = 32,入力位値指示会社受付有無 = 0,ポイント番号1 = 2.938781E-39,ポイント番号2 = 2.938781E-39 WHERE コード = 196 AND 行 = 2 これです。 4.Access97   DAO 2.5/3.5 です。 そして、失礼しました。 Err.Descriptionでみてみると、 3075 ”実行時エラー’3075’:クエリー式’XXX'の文字列の 構文エラーです” とでました。 その、XXXのところですが、おかしくないと思うんですけど。 また、こういうのも見つけたんですが、 関係ないと思います。 ↓ http://support.microsoft.com/default.aspx?scid=http%3a%2f%2fwww.microsoft.com%2fJAPAN%2fsupport%2fkb%2farticles%2fjp168%2f1%2f94.asp なにかヒントになりそうなこと、ありますでしょうか? 宜しくお願いします。

関連するQ&A

  • 関数内でのSQL文実行→エラー検知されない・・・。

    いつもお世話になってます。 sasakidと申します。 現在、ASPで開発を進めています。 エラーが発生したらエラーページに飛ぶように適所に 以下の文を入れています。 '------エラー処理-------- If Err.Number <> 0 Then  Call goto_ErrPage() ←…エラーページに飛ぶ関数 End If ほとんどの個所でエラーページに飛ぶことを確認しました。 今、困っていることはSQL文を実行する関数内で SQL文にエラーがあったとしてもどうやらエラーが検知されていないようなのです。 '=====SQL文実行関数=========== Function exeSql1(sql) exeSql1 = -1 'エラーセット sql = sql & "ORDER BY test" '←…エラーが出るように追加    Set rs = db.Execute(sql) If Err.Number <> 0 Then Set rs = Nothing Exit Function End If (中略) exeSql1 = 0 End Function '======本文================== (中略)   tmp = exeSql1(sql) If tmp <> 0 Then '戻り値がエラー(0以外)だったらエラー画面へ Call goto_ErrPage() ←…エラーページに飛ぶ関数 End If (後略) ------------------------- どんなに関数:exeSql1で実行されるSQL文にエラーを含めてもエラーページに飛びません。 本文中で実行しているSQL文にエラーが含んでいるとエラーページに飛ぶのですが・・・。 こんな現象の原因などわかる方がいらっしゃいましたら教えてください!!! よろしくお願いします。     

  • 実行時エラー92 forループが初期化されていませ

    エクセルVBAでFor Eachを使ってるのですが、 Nextの部分で 実行時エラー92 forループが初期化されていません。 というエラーになります。 On Error GoTo ERR1 For Each myObj In objIE.Document.all.tags("ul") If myObj.className = "" Then '○○の場合 Exit Sub ERR1: If Err.Number = 424 Then On Error GoTo 0 'エラーを解除 '▲▲の場合 If strカテゴリ Like "" Then Exit Sub End If End If End If Next というコードなのですが、どこかおかしいですか?

  • セルの内容更新時に実行される処理ができない

    以下のように関数を設定し、実行してみたのですがCall CommonModule.testの部分で 実行時エラー '424': オブジェクトが必要です。 と表示され関数が実行されません。 初心者なので知識が浅く、初歩的なミスかもしれませんがご教示いただければ幸いです。 Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal target As Range) If target.Count = 1 Then Dim column As Integer Dim row As Integer column = target.column row = target.row If row >= 3 Then If ((column - 3) Mod 5) = 2 And column > 3 Then Call CommonModule.test 'エラー '424' オブジェクトが必要です。 End If End If End If End Sub Function test() MsgBox "test" End Function

  • 実行時エラー49 DLLが正しく呼び出せません。

    アクセス2010です。 今まで問題なく動いてたファイルなのですが Call マクロ1(str1, str2) Sub マクロ1(str1, str2) If ○○ Then If Form_F_Form.ck_OK.Value = 0 Then Exit Sub End If と言うところのExit Subで 実行時エラー49 DLLが正しく呼び出せません。 となります。 これはファイルが壊れているのでしょうか?

  • VBA実行時のエラー

    下記のプログラムは私が作った物では無いのですが、作った方と連絡をとる事が出来なくなってしまった為、質問させて頂きます。 このプログラムをシートから実行した所 エラー:400『既にフォームは表示されています。モーダルにできません。』 なるものが表示されてしまいます。 またコードを記述する所から実行しますと 実行時エラー:1004『アプリケーション定義またはオブジェクト定義のエラー』 となってしまいます。 私の努力が足りないのは重々承知ですが、解決する事が出来ません。 皆様のお力を借りることが出来たらと思い投稿しました。 宜しくお願い致します。 Sub syoutotumen() Dim i As Long Dim j As Long Dim k As Long Dim kyori As Long Dim n As Integer n = 1 i = 1 j = 1 k = 1 Const cnsYEN = "\" Dim xlAPP As Application Dim objWBK As Workbook Dim strPATHNAME As String Dim strFILENAME As String strPATHNAME = "C:\Documents and Settings\tata41\デスクトップ\画像処理\" If strPATHNAME = "" Then Exit Sub strFILENAME = Dir(strPATHNAME & "dem******", vbNormal) If strFILENAME = "" Then MsgBox "このフォルダにはExcelワークブックは存在しません" Exit Sub End If Set xlAPP = Application With xlAPP .ScreenUpdating = False .EnableEvents = Fales .EnableCancelKey = xlErrorHandler .Cursor = xlWait End With Set WS1 = Worksheets("sheet1") Range("A1") = "0" Range("A2") = "1" Range("A1:A2").Select Selection.AutoFill Destinaton:=Range("A1:A512") Do While strFILENAME <> "" DoEvents If swESC = True Then If MsgBox("ESCが押されました。ここで終了しますか?", vbInformation + vbYesNo) = vbYes Then GoTo Button1_Click_Exit Else swESC = False End If End If xlAPP.StatusBar = trFILENAME & "処理中..." Set objWBK = Workbooks.Open(Filename:=strPATHNAME & cnsYEN & strFILENAME, UpdateLinks:=False, ReadOnly:=True) Do If Cells(i, 2) = 255 Then Exit Do i = i + 1 Loop Do If Cells(j, 3) = 255 Then Exit Do j = j + 1 Loop Do If Cells(k, 4) = 255 Then Exit Do k = k + 1 Loop kyori = (i + j + k - 21) / 3 WS1.Cells(n, 2) = kyori n = n + 1 i = 1 j = 1 k = 1 objWBK.Close savechanges:=False strFILENAME = Dir Loop GoTo Button1_Click_Exit Button1_Click_ESC: If Err.Number = 18 Then swESC = True Resume ElseIf Err.Number = 1004 Then Resume Next Else MsgBox Err.Description End If Button1_Click_Exit: With xlAPP .StatusBar = False .ScreenUpdating = True .EnableEvents = True .EnableCancelKey = xlInterrupt .Cursur = xlDefault Set objWBK = Nothing Set xlAPP = Nothing End With End Sub

  • Accessフォームの作成

    Accessで作成されているシステムの ファイル取り込みフォームにある実行ボタンを押下すると、 下記のメッセージが表示されます。 「select case に対応する case がみつからない。」 どこかで指定しないといけないのでしょうか? Private Sub Cmd実行_Click() On Error GoTo Err Dim StrSql As String Dim IntNDCnt As Integer Dim IntNTCnt As Integer '確認メッセージの出力 If MsgBox("処理を開始します。よろしいですか?", vbInformation + vbYesNo, "データ取込処理") = vbNo Then Exit Sub End If '対象データ別の処理実行 Select Case Me.Cmb対象.ListIndex Case -1 'エラー MsgBox "読込むデータを指定してください", vbCritical, "データ取込処理" Exit Sub Case 0 '全データ If F_手数料明細読込() = False Then Exit Sub End If If F_奨励金読込() = False Then Exit Sub End If If F_減額読込() = False Then Exit Sub End If If F_預り金読込() = False Then Exit Sub End If Case 1 '手数料データ If F_手数料明細読込() = False Then Exit Sub End If Case 2 '奨励金データ If F_奨励金読込() = False Then Exit Sub End If Case 3 '減額データ If F_減額読込() = False Then Exit Sub Case 4 '預り金データ If F_預り金読込() = False Then Exit Sub End If End Select 今は、Case 4が黄色に反転します。

  • コンボボックスで

    コンボボックスでACCEESSのテーブルのデータを検索できるようにしたいのですが・・・。 一度プログラムを書いてみたのですが うまく動かず画面の表示に失敗しましたとエラー表示が出ます。どこがどう悪いのか教えてください。お願いします。 Dim intloop As Integer On Error GoTo ERR_ROUTIN IERR_HANDLER.Push "fncSetDisplay" For intloop = 0 To UBound(PUSRCUST) If PwrkCUSTCD = PUSRCUST(intloop).intCustCD Then Exit For End If Next If intloop >= UBound(PUSRCUST) Or UBound(PUSRCUST) = 0 Then cmbCUSTCD = "" Else cmbCUSTCD.ListIndex = intloop ' End If fncSetDisplay = True END_ROUTIN: IERR_HANDLER.Pop Exit Function ERR_ROUTIN: MsgBox "画面の表示に失敗しました", vbCritical, Me.Caption fncSetDisplay = False IERR_HANDLER.HandleError GoTo END_ROUTIN End Function

  • VBScriptでのDBのエラー取得

    VBScriptでADO(ADODB)接続により、SQLServer(2012)に接続して クエリを発行し、結果をファイルに出力するVBScriptを作成して います。 SQL実行時のエラーに対応する為、VBScriptにてエラーオブジェクトのプロパティ (Err.Number、Err.Description)を使用し、エラー番号と内容を取得しているの ですが、SQL Serverから発行しているエラー番号、エラー内容を取得したいので すが、取得できません。 どのようにすれば、データベース固有のエラーを取得ができますか。 是非ご教示いただきたく、 お手数をおかけ致しますが、宜しくお願い致します。 ------------------------------------------------- Option Explicit Dim objADO Dim objRS Dim Sql if WScript.Arguments.Count <> 1 then WScript.echo("usage: script.vbs arg1") WScript.Quit(-1) end if arg1 = WScript.Arguments(0) Set objADO = CreateObject("ADODB.Connection") objADO.Open "Provider=SQLOLEDB;" & _ "Data Source=hoge;" & _ "Initial Catalog=hoge;" & _ "Integrated Security=SSPI;" sql = "" sql = "select ~ where column ='"&arg1&"'" set objRS = objADO.Execute(sql) If Err.Number <> 0 Then objADO.Close Set objADO = Nothing WScript.Quit(-1) End If sql = "" sql = "update ~ ~ where column ='"&arg1&"'" objADO.Execute(sql) If Err.Number <> 0 Then 更新の破棄とエラー内容の表示 Else 更新を反映 End If objADO.Close Set objADO = Nothing

  • エラー処理について

    Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer) If KeyCode = 38 Then PICOCX1.Outp PortB, 7, High PICOCX1.Outp PortB, 4, High End If If KeyCode = 40 Then PICOCX1.Outp PortB, 6, High PICOCX1.Outp PortB, 5, High End If If KeyCode = 37 Then PICOCX1.Outp PortB, 7, High PICOCX1.Outp PortB, 5, High End If If KeyCode = 39 Then PICOCX1.Outp PortB, 6, High PICOCX1.Outp PortB, 4, High End If End Sub Private Sub Form_KeyUp(KeyCode As Integer, Shift As Integer) If KeyCode = 38 Then PICOCX1.Outp PortB, 7, Low PICOCX1.Outp PortB, 4, Low End If If KeyCode = 40 Then PICOCX1.Outp PortB, 6, Low PICOCX1.Outp PortB, 5, Low End If If KeyCode = 37 Then PICOCX1.Outp PortB, 7, Low PICOCX1.Outp PortB, 5, Low End If If KeyCode = 39 Then PICOCX1.Outp PortB, 6, Low PICOCX1.Outp PortB, 4, Low End If End Sub というプログラムですがこれがもしPICOCX1.Outp PortB, 4, Lowなどが実行できないとエラーとして返ってきてしまいます。このときエラー箇所をもう一度実行する方法はあるのでしょうか? お願いします。こちらの環境はVB6.0です。

  • Insert時に一意制約エラーがでる。

    よろしくお願いします。 VB6.0 DB:ORACLE8.1.6 クライアントWIN2000 サーバーWIN2000SERVER VBでデータをINSERTするプログラムを作ったのですが、どうしても一意制約エラーが出てしまいます。 これはデータの都合上仕方が無いのか? (データの主キーに「.」が入っているのでエラーになるのでしょうか?) プログラムが悪いのか? よろしくお願いします。 エラーは2回目の実行部分です。 データ(すべて文字型) 000   001   002 ベルリン12345 ベルリン 12345 ベルリン123.45 ベルリン 123.45 ベルリン123 45 ベルリン 123 45 プログラム strSql = "Insert Into KUNIBETU(k000,k001,k002) Values ('ベルリン12345','ベルリン,'12345')" '処理のチェック If Execute_sql(strSql) = False Then Err.Raise -1, , "失敗しました!" cn.RollbackTrans rs.Close Set rs = Nothing cn.Close Set cn = Nothing Exit Sub End If strSql = "Insert Into KUNIBETU(k000,k001,k002) Values ('ベルリン1234.5','ベルリン','123.45')" '処理のチェック If Execute_sql(strSql) = False Then Public Function Execute_sql(strSql As String) As Boolean Dim cmd As New ADODB.Command Execute_sql = False ' Commandオブジェクトを作成 Set cmd = New ADODB.Command cmd.ActiveConnection = cn cmd.CommandText = strSql ' アクション クエリーを実行 cmd.Execute      ←←←←←←エラー部分 Set cmd = Nothing Execute_sql = True Exit Function