
ドラえもん 2012-10-29(月) 10:30
ホームページで公開されていたVBAを流用して、EXCELからデータベースの更新、削除をしようとしています。
データベースの更新に関してはうまく動作するのですが、データ削除を実施すると、
440)データをフェッチ中にエラーが発生しました。ORA-01722数値が無効です。
というエラーが発生してしまいます。
01722のエラー内容をホームページ並びに、本サイトで検索したのですが、
データの型が違うという内容で、類似の内容が無い状況でした。
型が違うという内容に対して、何をどうしたらよいかが分かりません。
コーディングのミスを指摘いただきたく
よろしくお願いいたします。
VBAまったくの初心者です。
下記は、マクロの構成です。
(1)B3からR***の領域にデータベースからダウンロードしたデータが表示される。
***は列数でデータベースの項目数で変化する
(2)B2からR2には項目名称が表示されている。
(3)編集用の領域はT2からAJ2に(2)と同じ項目名を表示する。
(4)編集用のデータ領域はT3からAJ20まで。
※ID並びにパスワードは実際のものから変更しています。
ORACLE9.0 EXCEL2003
-------------------------------------------------------------
'「データの削除」ボタン押下後の処理
' oo4o使用時
Private Sub btnDeleteDataoo4o_Click()
On Error GoTo ERR_HANDLER
'oo4o用のオブジェクト変数の宣言
Dim OraSession As Object 'セッション
Dim OraDatabase As Object 'データベース
Dim rs As Object 'データセット(レコードセット)
Dim rownum As Long
Dim colnum As Integer
Dim sSQL As String
'削除対象のみを抽出するSQL文の作成
sSQL = "select * from M_TOOL_MEISAI where LINECD=" & ActiveSheet.Cells(3, 20)
For rownum = 4 To 20
If ActiveSheet.Cells(rownum, 20) = "" Then
Exit For
End If
sSQL = sSQL & " OR LINECD=" & ActiveSheet.Cells(rownum, 20)
Next
'oo4oセッションオブジェクトの生成
Set OraSession = CreateObject("OracleInProcServer.XOraSession")
'oo4oデータベースオブジェクトの生成(DBへUserID:○、パスワード:×で接続)
Set OraDatabase = OraSession.OpenDatabase(ActiveSheet.Cells(26, 1), "○/×", 0&)
'oo4oデータセット(レコードセット)の生成(削除対象データのみを返すレコードセットの生成)
Set rs = OraDatabase.CreateDynaset(sSQL, 0&)
'レコードセット内の全レコードの削除
Do Until rs.EOF
rs.Delete
rs.MoveNext
Loop
'オブジェクトのクローズ
rs.Close
'データ表示の更新
btnGetDataoo4o_Click
QUIT_OPER:
'オブジェクト変数用に確保したメモリの開放
Set rs = Nothing
Set OraDatabase = Nothing
Set OraSession = Nothing
Exit Sub
ERR_HANDLER: 'エラー処理
'エラー番号とエラー内容の表示
MsgBox Err.Number & ")" & Err.Description
Err.Clear
GoTo QUIT_OPER
End Sub
-------------------------------------------------------------------------------
以上がエラーが発生するVBA
下記は、更新処理で正しく動作するVBA
-------------------------------------------------------------------------------
'「データの更新」ボタン押下後の処理
' oo4o使用時
Private Sub btnUpdateDataoo4o_Click()
On Error GoTo ERR_HANDLER
'oo4o用のオブジェクト変数の宣言
Dim OraSession As Object 'セッション
Dim OraDatabase As Object 'データベース
Dim rs As Object 'データセット(レコードセット)
Dim rownum As Long
Dim colnum As Integer
'oo4oセッションオブジェクトの生成
Set OraSession = CreateObject("OracleInProcServer.XOraSession")
'oo4oデータベースオブジェクトの生成(DBへUserID:○、パスワード:×で接続)
Set OraDatabase = OraSession.OpenDatabase(ActiveSheet.Cells(26, 1), "○/×", 0&)
'oo4oデータセット(レコードセット)の生成(全データを返すレコードセットの生成)
Set rs = OraDatabase.CreateDynaset("select * from M_TOOL_MEISAI", 0&)
'データの更新
For rownum = 3 To 20
If ActiveSheet.Cells(rownum, 20) = "" Then
Exit For
End If
'更新対象データの検索
rs.Findfirst ("LINECD=" & ActiveSheet.Cells(rownum, 20))
'編集モードに設定
rs.Edit
For colnum = 1 To rs.Fields.Count - 1
Select Case rs(colnum).Type
Case 10
rs(colnum).Value = ActiveSheet.Cells(rownum, colnum + 20)
Case 8
rs(colnum).Value = CDate(ActiveSheet.Cells(rownum, colnum + 20))
Case Else
rs(colnum).Value = ActiveSheet.Cells(rownum, colnum + 20)
End Select
Next
rs.Update
Next
'オブジェクトのクローズ
rs.Close
'データ表示の更新
btnGetDataADO_Click
QUIT_OPER:
'オブジェクト変数用に確保したメモリの開放
Set rs = Nothing
Set OraDatabase = Nothing
Set OraSession = Nothing
Exit Sub
ERR_HANDLER: 'エラー処理
'エラー番号とエラー内容の表示
MsgBox Err.Number & ")" & Err.Description
Err.Clear
GoTo QUIT_OPER
End Sub
A 回答 (1件)
- 最新から表示
- 回答順に表示
No.1
- 回答日時:
LINECDの型は数値型なんですよね?
エラー発生時の、sSQLの中身はどうなっていますか?
実行直前にブレークポイントを張って、値を確認するなり、
Debug.Printでイミディエイトウィンドウに出力するなりして確認してみて下さい。
"LINECD = OR"みたいに、=の右辺に値が無かったり、
"LINECD = '001 OR"みたいに、=の右辺に数値以外の文字があったりしませんか?
たぶん、Cells(3, 20)~Cells(20, 20)に空のセルがあったり、数値以外が入ったりしているんじゃないかと思います。
この回答への補足
LINECDの型は数値です。
sSQLの中身に関して、値の確認方法を勉強します。
Cells(3,20)~Cells(20.20)に数値以外は存在します。
しかしながら、更新処理はエラーが出ないのです。
まずは、sSQLの値を見てみます。
いろいろ調べたのですが、よく分かりませんでした。
いつまでも受付状態にしておくのは失礼なので、いったん受付終了にします。
もう少し勉強したいと思います。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) このVBAでExcelアプリケーションを作成は必要ですか? 3 2023/07/19 21:13
- Visual Basic(VBA) access count数を変数に格納 2 2022/03/30 19:21
- Visual Basic(VBA) Excelで下記のようにマクロを作ったところ、一回目は実行できたのですが、二回目以降「実行時エラー1 1 2022/03/25 08:08
- Visual Basic(VBA) VBA Userformで一部別シートに転記がしたいのですが 2 2023/05/24 13:08
- Visual Basic(VBA) データベースから絞り込んでデータを読み込み 1 2023/02/21 19:51
- Visual Basic(VBA) オブジェクトが見つかりません 1 2023/06/24 19:43
- Excel(エクセル) VBAについて 3 2022/06/19 18:19
- Visual Basic(VBA) VBAが止まります。 2 2022/09/02 14:02
- Visual Basic(VBA) VBA処理追加 こちらでご教示頂いたのですが回答完了させてしまいましたのでこちらからまた質問させてく 2 2022/10/27 09:57
- Excel(エクセル) VBAの指示の内容 昨日こちらでご教示頂いたのですが初心者な為、一つ一つの指示が何をやっているのかわ 2 2022/10/25 18:08
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ORA-01013のエラーについて経験...
-
ストアドファンクションの実行
-
CASE文のエラーについて
-
FULL OUTER JOIN (Javaから発行)
-
PHPからODBCによるOracle10gへ...
-
PL/SQLでPLS-00201のエラー
-
PL/SQL PLS-00103エラーについて
-
Oracle9 union使用時の結合制限...
-
PL/SQL ストアドプロシージャ...
-
「ORA-00907: 右カッコがありま...
-
ORA-01843: 指定した月が無効で...
-
ExcelVBAからOracleストアド実行
-
トリガーのエラー
-
sqlのエラーハンドリングについ...
-
DBエラー 右カッコがありません
-
エラー「単一グループのグルー...
-
INSERT文の副問合わせで*は使え...
-
はじめまして!
-
xy平面上の点P(x,y)に対し,点Q(...
-
DOSプロンプトとコマンドプロン...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ORA-01013のエラーについて経験...
-
CASE文のエラーについて
-
はじめまして!
-
ORA-01843: 指定した月が無効で...
-
PL/SQL PLS-00103エラーについて
-
シェルスクリプトでオラクルの...
-
PL/SQLのコンパイルエラーにつ...
-
PCC-S-02201エラーの対処を教え...
-
「ORA-00907: 右カッコがありま...
-
ORA-14459: GLOBALキーワードが...
-
ORA-06502のエラー
-
PL/SQLでPLS-00201のエラー
-
DATABSE LINKについて
-
sqlのエラーハンドリングについ...
-
SQLLOADER
-
無効なSQL文の具体例を教えてく...
-
PL/SQLによるCREATE TABLE後のI...
-
ビューが作成できない
-
ストアドファンクションの実行
-
pro*c で pl/sql に変数を渡す...
おすすめ情報