ソースプログラム

MySQLからワークシートに個人情報や会社情報を読み込みましたのでワークシート からMySQLのレコードを更新したり、ワークシートに追加したデータをMySQLに追加登録できれば便利だと誰でも考えます。

レコードを追加するには前回の例のようにダイアログから入力することもできますが、更新となると対象となるレコードを読出し、レコードのどのフィールドを対象とするかを特定しなければなりません。

更新するためのupdate文は
UPDATE テーブル名 SET 更新内容 WHERE 条件;

つまり、どのフィールドのデータを更新するかを指定しなければなりません。
あまり複雑な処理は講義の範疇ではありませんので、簡単な処理で実現することにしましょう。

ワークシートにレコードが表示されていますので、ワークシート上でデータを書き換えたり追加したりします。

次にワークシートのレコードを一つずつ取り出してMySQLのテーブルに保存します。
この時にMySQLのinsert文で処理すると同じレコードが幾つも追加されてしまいますから、SQLを実行する前に対象とするテーブルのレコードを一度削除してしまいます。
そして、改めてinsert文で全レコードをテーブルに書き込みます。

このようにすれば一つの処理で更新や変更、追加などをすることができます。
ただし、レコードが膨大になると探すのに苦労しますが、Excelのワークシートにはソートや検索機能も備わっておりますから、わざわざプログラムを作成するまでもないでしょう。

個人情報シートの更新・登録ボタン

各シートの「会社コード」のセルの書式を文字列にしておきます。

個人情報シートにコントロールボタンとラベルを一つずつ貼り付け、 ボタンのオブジェクト名を「btn個人更新」、Captionを「テーブル更新・登録」とします。




個人情報に貼り付けたボタンをダブルクリックしてコードウィンドウを開き、次のプログラムコードを記述します。

01:Private Sub btn個人更新_Click()
02:  Dim name, zip, address, tel, K_code As String
03:  Dim statements As Integer
04:  Dim sql_string As String
05:
06:  statements = Database_open
07:  If (statements <> 0) Then
08:      Exit Sub
09:  End If
10:  sql_string = "DELETE FROM addresstb2;"
11:  connect.Execute (sql_string)
12:
13:  Range("B3").Select
14:  name = ActiveCell.Value
15:
16:  Do While name <> "" 'nameフィールドが空白でなければ
17:
18:      ActiveCell.Offset(0, 1).Activate
19:      zip = ActiveCell.Value
20:      ActiveCell.Offset(0, 1).Activate
21:      address = ActiveCell.Value
22:      ActiveCell.Offset(0, 1).Activate
23:      tel = ActiveCell.Value
24:      ActiveCell.Offset(0, 1).Activate
25:      K_code = ActiveCell.Value
26:      sql_string = "INSERT INTO addresstb2 VALUES ( "
27:      With Sheet2
28:         sql_string = sql_string & "'" & name
29:         sql_string = sql_string & "','" & zip
30:         sql_string = sql_string & "','" & address
31:         sql_string = sql_string & "','" & tel
32:         sql_string = sql_string & "','" & K_code
33:         sql_string = sql_string & "')"
34:      End With
35:
36:      connect.Execute (sql_string)
37:      ActiveCell.Offset(1, -4).Activate
38:      name = ActiveCell.Value
39:  Loop
40:
41:  statements = Database_close
42:
43:  If (statements = 0) Then
44:     Label1.ForeColor = &HFF&
45:     Label1.Caption = "テーブルを更新しました。"
46:  Else
47:     Label1.ForeColor = &HFF&
48:     Label1.Caption = "テーブルを更新出来ません。"
49:  End If
50:
51:End Sub

会社情報シートの更新・登録ボタン

同様に会社情報シートにコントロールボタンとラベルを一つずつ貼り付け、 ボタンのオブジェクト名を「btn会社更新」、Captionを「テーブル更新・登録」とします。




会社情報に貼り付けたボタンをダブルクリックしてコードウィンドウを開き、次のプログラムコードを記述します。

01:Private Sub btn会社更新_Click()
02:  Dim K_code, name, zip, address, tel As String
03:  Dim statements As Integer
04:  Dim sql_string As String
05:
06:  statements = Database_open
07:  If (statements <> 0) Then
08:      Exit Sub
09:  End If
10:  sql_string = "DELETE FROM k_addresstb;"
11:  connect.Execute (sql_string)
12:
13:  Range("B3").Select
14:  K_code = ActiveCell.Value
15:
16:  Do While K_code <> "" 'nameフィールドが空白でなければ
17:
18:     ActiveCell.Offset(0, 1).Activate
19:     name = ActiveCell.Value
20:     ActiveCell.Offset(0, 1).Activate
21:     zip = ActiveCell.Value
22:     ActiveCell.Offset(0, 1).Activate
23:     address = ActiveCell.Value
24:     ActiveCell.Offset(0, 1).Activate
25:     tel = ActiveCell.Value
26:
27:     sql_string = "INSERT INTO k_addresstb VALUES ( "
28:     With Sheet3
29:        sql_string = sql_string & "'" & K_code
30:        sql_string = sql_string & "','" & name
31:        sql_string = sql_string & "','" & zip
32:        sql_string = sql_string & "','" & address
33:        sql_string = sql_string & "','" & tel
34:        sql_string = sql_string & "')"
35:     End With
36:
37:     connect.Execute (sql_string)
38:     ActiveCell.Offset(1, -4).Activate
39:     K_code = ActiveCell.Value
40:
41:  Loop
42:
43:  statements = Database_close
44:  If (statements = 0) Then
45:     Label1.ForeColor = &HFF&
46:     Label1.Caption = "テーブルを更新しました。"
47:  Else
48:     Label1.ForeColor = &HFF&
49:     Label1.Caption = "テーブルを更新出来ません。"
50:  End If
51:End Sub



© AstroHeart. All Rights Reserved.