データベース(オラクル)からデータを取得、追加、更新、一連の処理について
すでに完成してはいるもののどうしてもシングルコーテーションの部分で詰まります。
検索フォーム、データ追加フォーム、データ更新フォーム 3つあります。
Excel上にコマンドボタンがあり、押すことでそれぞれのフォームが起動します。
データ更新フォームの流れとして、まずシートにオラクルから取得したデータが表示されています。(これはBookを立ち上げたとき表示されるようになっています)
データが表示されているセルを選択してコマンドボタン(データ更新)を押すと
フォームが起動し、フォーム上にあるテキストボックスに選択したセルのデータが入ります。(この処理がUserForm_Initialize、列1つに対し、1つのテキストボックス)
更新なのでどこかを訂正し、フォーム上の更新ボタンを押すと、オラクルに接続し、update文を行い、データを更新するといった内容です。
その際のシングルコーテーションについて
データ追加の時、このようなデータを追加したいとします。
A,B'cde,C,D,E(,はそれぞれのテキストボックスにという意味です)
シングルコーテーションを文字として扱う場合、SQL文のため、テキストボックスからデータを入力する際は
A,B''cde,C,D,Eとなります。2つつける必要があるからです。
これで、データベースには
A,B'cde,C,D,E として追加され、シートに表示されるときもこのように表示されます。
これを更新する際
セルを選択して更新フォームを起動すると
各テキストボックスに
A,B'cde,C,D,Eと表示されます。しかし、データを更新する際、わざわざもう一度B''cdeとシングルコーテーションを入力する必要があります。
この無駄を省く方法が知りたいです。
updateはText6の内容以外を更新するようになっています
VBA
1Option Explicit 2Private Sub UserForm_Initialize() 3 TextBox1.Value = Cells(ActiveCell.Row, 1).Value 4 Text6.Value = Cells(ActiveCell.Row, 2).Value 5 Text7.Value = Cells(ActiveCell.Row, 3).Value 6 Text8.Value = Cells(ActiveCell.Row, 4).Value 7 Text9.Value = Cells(ActiveCell.Row, 5).Value 8 Text10.Value = Cells(ActiveCell.Row, 6).Value 9End Sub 10 11Private Sub CommandButton1_Click() 'データ更新 12 On Error GoTo ERROR 13 Dim con As New ADODB.Connection 14 Dim cmd As New ADODB.Command 15 Dim rs As New ADODB.Recordset 16 Dim param As ADODB.Parameter 17 Set cmd = New ADODB.Command 18 Dim ds As String 'データソース定義 19 Dim user As String 'ユーザ名 20 Dim pass As String 'パスワード 21 22 ds = "Provider=OraOLEDB.oracle;" 23 ds = ds & "Data Source=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.0.5)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=XEPDB1)));" 24 ds = ds & "User ID=hoge;Password=hogehoge" 25 26 con.ConnectionString = ds 27 con.Open 28 29 'ここから追記したもの 30 cmd.ActiveConnection = con 31 cmd.CommandTimeout = 0 32 cmd.CommandType = adCmdText 33 cmd.CommandText = "SELECT * FROM EDM WHERE DJNAME = ? AND SONGNAME = ? AND GENRE = ? AND LABEL = ? AND YEAR = ?" 34 35 Set param = cmd.CreateParameter("DJNAME", adVarChar, adParamInputOutput, 45) 36 cmd.Parameters.Append param 37 Set param = cmd.CreateParameter("SONGNAME", adVarChar, adParamInputOutput, 30) 38 cmd.Parameters.Append param 39 Set param = cmd.CreateParameter("GENRE", adVarChar, adParamInputOutput, 25) 40 cmd.Parameters.Append param 41 Set param = cmd.CreateParameter("LABEL", adVarChar, adParamInputOutput, 20) 42 cmd.Parameters.Append param 43 Set param = cmd.CreateParameter("YEAR", adVarNumeric, adParamInputOutput, 4) 44 cmd.Parameters.Append param 45 46 'テキストボックスに取得されたもの 47 cmd.Parameters("DJNAME").Value = Text6.Text 48 cmd.Parameters("SONGNAME").Value = Text7.Text 49 cmd.Parameters("GENRE").Value = Text8.Text 50 cmd.Parameters("LABEL").Value = Text9.Text 51 cmd.Parameters("YEAR").Value = Text10.Text 52 53 If TextBox1.Text = "" Or Text6.Text = "" Or Text7.Text = "" Or Text8.Text = "" Or Text9.Text = "" Or Text10.Text = "" Then 54 MsgBox "データをすべて入力してください" 55 Else 56 rs.CursorLocation = adUseClient 57 rs.CursorType = adOpenStatic 58 rs.Open cmd 59 rs.Open "Update EDM set DJNAME = '" & Text6.Text & "',SONGNAME = '" & Text7.Text & "',GENRE = '" & Text8.Text & "',LABEL = '" & Text9.Text & "', YEAR = '" & Text10.Text & "' where NO = '" & TextBox1.Text & "'", con 60 MsgBox "データを更新しました" 61 End If 62 63 GoTo FINAL 64 65ERROR: 66 MsgBox Erl() & "行目" & ERROR(Err()) 67 68FINAL: 69 'ファイナル処理 70 On Error Resume Next 71 Set rs = Nothing 72 Set con = Nothing 73End Sub
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/08/04 05:19 編集
2020/08/04 06:34 編集
2020/08/04 07:18 編集
2020/08/04 09:08 編集
2020/08/04 08:12
2020/08/04 08:21
2020/08/04 08:29
2020/08/04 08:35 編集
2020/08/04 08:58
2020/08/05 01:31 編集
2020/08/05 02:03 編集
2020/08/05 02:12
2020/08/05 02:36 編集
2020/08/05 02:24
2020/08/05 08:11
2020/08/05 11:44