前提・実現したいこと
ExcelとOracle DataBaseを繋げて、Excel VBAでDB操作(Delete処理)を行いたいです。
【Delete処理内容】
ユーザーフォーム(DeleteForm)に生徒番号を入力
→入力値と一致する生徒を探す
→レコードがある…削除
→レコードが無い…メッセージボックス表示
発生している問題・エラーメッセージ
レコードがある/ない の分岐がうまくいきません。
存在しない生徒番号を入力しても「レコードがある」方に行ってしまいます。
「レコードが無い場合、EOFがTrueになる」とネットに書いてあったはずですが毎回Falseになります。
実行時エラー '3709' この操作を実行するために接続を使用できません。 このコンテキストで閉じているかあるいは無効です。
該当のソースコード
Excel
1Public Sub DeleteFormButton_Click() 'フォーム入力→削除ボタンの処理 2'tnsnames.ora ファイルのネットサービス名' 3 Const STRDATASOURCE = "__SERVICE__" 4 5 Const USERNAME = "__USERNAME__" '接続するデータベースのユーザー名 6 Const PASSWORD = "__PASSWORD__" 'パスワード 7 8 Dim oraCon As New ADODB.Connection '接続オブジェクト 9 Dim oraRs As New ADODB.Recordset 'レコードセット 10 Dim oraCmd As New ADODB.Command '操作 11 Dim constr As String 12 Dim strSQL1 As String 13 Dim strSQL2 As String 14 15 constr = "Provider=MSDAORA" 16 constr = constr & ";Data Source=" & STRDATASOURCE 17 constr = constr & ";User ID=" & USERNAME 18 constr = constr & ";Password=" & PASSWORD 19 20 oraCon.ConnectionString = constr 21 oraCon.Open 22' DBと接続までは完了しています 23 24 strSQL1 = "SELECT MAX(ID) FROM student WHERE ID = '" & Me.DeleteForm.Text & "'" 25 oraRs.Open strSQL1, oraCon 26 27 If oraRs.EOF Then 28 nullMsg 29 Else 30 With oraCmd 31 strSQL2 = "DELETE FROM student WHERE ID = '" & Me.DeleteForm.Text & "' ; " 32 .CommandText = strSQL2 33'ここからエラー 34 oraCmd.Execute (strSQL2), oraCon 35 Set oraRs = .Execute 36 End With 37 End If 38 39 oraCon.Close 40 41 Unload Me 42End Sub 43--- 44Sub nullMsg() 45 MsgBox "入力された番号と一致する" & vbCrLf & "生徒はいません。", "エラー" 46End Sub 47
試したこと
If文の条件を変更
VBA
1If oraRs.RecordCount = 0 Then
→oraRs.RecordCountの中身はレコードのあるない関わらず常に-1
補足情報(FW/ツールのバージョンなど)
Excel 2010
Oracle DataBase 12c
Oracle Client 12c
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/09/04 06:15