• 検索結果がありません。

VB実用Ⅲ⑩ フリーデータベースⅡ

N/A
N/A
Protected

Academic year: 2021

シェア "VB実用Ⅲ⑩ フリーデータベースⅡ"

Copied!
15
0
0

読み込み中.... (全文を見る)

全文

(1)

プログラムの概要

事務処理に於いて、Microsoft Office は、業界標準 (De Facto Standard)で有ると謂う事が出来る。

此 の Office には、データベースソフトと仕て Access が用意されて居り、現在では、データベー スの代名詞とも謂う可き存在で有る。 古くは、MS-DOS 時代に『桐』と謂うデータベー スが存在したが、Windows 時代に成り、Access が 登場した事が、データベースの普及を促進したと 謂う事が出来る。併し、現在では、同じマイクロ ソ フ ト 社 か ら ネ ッ ト ワ ー ク 機 能 を 強 化 し た SQLServer が登場し、亦、無料のデータベースと 仕てMySQL や postgreSQL がインターネット上 で広く普及して居る。此等は、総てSQL に対応し、 僅かなコードの書換で、他のデータベースに移行 する事が容易で有る為、目的に応じてデータベー スを選択する時代に突入したと謂う事が出来る。

其処で、此処では、其の中から、MySQL を Visual Basic から使用する手法に付いて学ぶ。前回は MySQL を単独で使用する方法を解説したが、今回は、Visual Basic から MySQL を操作する方法に付いて解説 する。

フリーデータベースⅡ

□ MySQL データベースの作成(MySQL エディタ、CREATE DATABASE) □ MySQL データベースのユーザ作成(MySQL エディタ、GANT)

□ MySQL データベースの ODBC 登録(ODBC データソースアドミニストレータ) □ MySQL データベースの接続(ConnectionString、DSN、STMT)

□ テーブルの操作(CREATE TABLE、DROP TABLE、ALTER TABLE) □ レコードの操作(INSERT、UPDATE、DELETE、SELECT)

□ クエリの実行(コネクションの Execute、レコードセットの Open) 今回の課題項目

□ MySQL データベースの ODBC 登録(ODBC データソースアドミニストレータ) □ MySQL データベースの接続(ConnectionString、DSN、STMT)

□ テーブルの操作(CREATE TABLE、DROP TABLE、ALTER TABLE) □ レコードの操作(INSERT、UPDATE、DELETE、SELECT)

□ クエリの実行(コネクションの Execute、レコードセットの Open) 今回の重点項目

(2)

■ MySQL の Visual Basic からの利用 ■

■ データベースの作成

MySQL のサーバ(デーモン)mysqld とモニタ mysql を起動し、book と謂う名前のデータベースを新 規作成する。

※ SHOW DATABASES で、データベースが正しく新規作成されたか確認するが、book と謂うデータ ベースがリストに含まれて居る事が確認されれば良い。表示されるデータベースの個数等は、状況 に依り異なる。 ■ ユーザ作成と権限付与 上記で新規作成したデータベースbook に対して、全権限を持つ新規ユーザを squid と名前で作成する。 猶、アクセスする為のパスワードはcalamar とする。 ※ 此処では、上記で新規作成したデータベース book に対して、MySQL をインストールしたローカル マシン(squid@localhost)と、別のリモートマシン(squid@’%’)からアクセス可能なユーザを作成 して居る。猶、権限ALL は、ユーザ管理(GRANT)以外の総ての権限を持つ。 以上で、ローカルマシンからもリモートマシンからも、ユーザ名squid、パスワード calamar で、総て の権限を持ってアクセスする事の出来る空のデータベースbook が作成された。

mysql> CREATE DATABASE book;

Query OK, 1 row affected (0.05 sec) mysql> SHOW DATABASES;

+---+ | Database | +---+ | book | | invision | | mysql | +---+ 3 rows in set (0.00 sec)

mysql> GRANT ALL ON book.* TO squid@localhost IDENTIFIED BY 'calamar'; Query OK, 0 rows affected (0.11 sec)

mysql> GRANT ALL ON book.* TO squid@'%' IDENTIFIED BY 'calamar'; Query OK, 0 rows affected (0.00 sec)

(3)

■ ODBC(Open Database Connectivity)登録

任意のデータベースをODBC に登録するには、先ず、下記の手順に従い、ODBC データソースアドミ

ニストレータを起動する。猶、以下の手順は、MySQL サーバ(デーモン)を起動してから行う。

Windows 95/98/Me :スタートメニュー→設定→コントロールパネル→ODBC データソース

Windows NT/2000/XP :スタートメニュー→設定→コントロールパネル→管理ツール→データソース(ODBC) 下図の様なダイアログボックスが表示されるので、『システム DSN』タブを選択し、『追加』ボタンを クリックする。猶、ローカルマシンからしかアクセスしない場合は『ユーザーDSN』タブを選択しても 良い。 次に表示される下図の画面では、ドライバ一覧が表示されるので、ドライバに『MySQL ODBC 3.51 Driver』を選択して、『完了』ボタンをクリックする。 Windows 98 系 Windows NT 系

(4)

次に表示される下図の画面では、『Login』タブで、下記の項目を入力して、『OK』ボタンをクリックす る。

項目名 入力値

DSN 情報 Data Source Name book ※1

Description 任意の説明文

MySQL 接続パラメータ Server localhost ※2

User squid ※3 Password calamar ※4 Database book ※5 ※1 データベースを識別する為の任意の名前(此処では book)を入力する。 ※2 リモートアクセスする場合は、MySQL データベースの在るマシンの IP アドレスを入力する。 ※3 接続する MySQL データベースに設定されて居るユーザー名を(此処では squid)入力する。 ※4 接続する MySQL データベースに設定されて居るパスワードを(此処では calamar)入力する。 ※5 接続する MySQL データベースの名前(此処では book)を選択する。 猶、接続するポート番号を変更して居る場合(設定を変更して居ない場合は 3306)は、『Connection Options』タブの『Port』欄で、接続するポート番号を設定する必要が有る。亦、データベースを操作 する上で、各種の設定を行うには、『Advanced』タグを選択して行うが、此処では、此等の設定は行わ ないで、既定の儘でデータベースを操作する事とする。 猶、正しく接続されるか確認するには、『OK』ボタンをクリックする前に、『Test』ボタンをクリック して、接続テストを行う。下記のダイアログが表示されれば、正しく項目が設定されて居る。

(5)

下図の画面に戻るので、登録したデータベースの識別名が表示されて居る事を確認して、『OK』ボタン をクリックする。以上で、データベースのODBC 登録は終了で有る。 猶、設定を変更するには、変更するデータソースを選択し、『構成』ボタンをクリックすると、設定を 変更する事が出来る。亦、不要なデータソース(例えば、テストで使用したデータソース)は、上図で 選択し、『削除』ボタンをクリックすると、ODBC 登録から削除される。 ■ 参考 ■ ■ 主キーの定義 テーブルを更新する事が出来る様にするには、テーブルに主キーを定義する必要が有る。孰れかの フィールドに必ず主キーを設定して置く。

亦、Visual Basic から ADO を通じて使用した場合、大きなサイズの整数(8 バイト整数:BIGINT) を処理する事は出来ない。此れは、SHOW PROCESSLIST の様なクエリは正しく動作しない事を 意味する。此れを解決するには、ODBC 接続文字列にオプション『OPTION=16384』を設定する か、又は、MyODBC 接続画面の『Advanced』タグで『Change BIGINT columns to INT』を選択 する。場合に依り、『Return matching rows』も選択する必要が有る。

■ 文字コード

各種文 字コードに対 応して居 ない古いバー ジョン の MySQL を使用して居る場合で、ODBC に MyODBC3.x を使用し、myodbc-3.51.06-conv_ujis.zip で日本語パッ チを当てゝ居る場合は、MySQL データソースの ODBC 登録の画面は、右図の様に成る。 基本的な登録事項は、同じで有るが、此の場合は、文字 化けを防止する為に『Options』をクリックして『EUC 変換する』にチェックを付ける。

(6)

■ プログラムリスト-テーブル作成 ■ Option Explicit '================================================== ' 事前に MySQL サーバ(デーモン)を起動して置く。 '================================================== ' コマンドボタン(テーブル作成)がクリックされた時の処理 Private Sub cmdCreateTable_Click( )

Dim Cn As ADODB.Connection Dim SQL As String

' コネクションの設定

Set Cn = New ADODB.Connection Cn.CursorLocation = adUseClient Cn.ConnectionString = "DSN=book" Cn.Open

' 本テーブルの作成

SQL = "CREATE TABLE BOOKS ("

SQL = SQL & "ID INT AUTO_INCREMENT," SQL = SQL & "TITLE VARCHAR(50) NOT NULL,"

SQL = SQL & "PRICE SMALLINT UNSIGNED NOT NULL," SQL = SQL & "PURCHASED DATE,"

SQL = SQL & "CATEGORY_ID TINYINT UNSIGNED," SQL = SQL & "WRITER_ID TINYINT UNSIGNED," SQL = SQL & "INDEX(ID)"

SQL = SQL & ");" Cn.Execute SQL

' カテゴリテーブルの作成

SQL = "CREATE TABLE CATEGORIES ("

SQL = SQL & "ID INT AUTO_INCREMENT,"

SQL = SQL & "NAME VARCHAR(50) NOT NULL," SQL = SQL & "TOTAL INT UNSIGNED DEFAULT'0'," SQL = SQL & "INDEX(ID)"

SQL = SQL & ");" Cn.Execute SQL

' 著者テーブルの作成

SQL = "CREATE TABLE WRITERS ("

SQL = SQL & "ID INT AUTO_INCREMENT,"

SQL = SQL & "NAME VARCHAR(50) NOT NULL," SQL = SQL & "PHONETIC VARCHAR(50) NOT NULL," SQL = SQL & "INDEX(ID)" SQL = SQL & ");" Cn.Execute SQL MsgBox "3個のテーブルを作成しました。", vbInformation, "通知" ' コネクションの後始末 Cn.Close Set Cn = Nothing End Sub 此処で宣言した変数の有効期間は 宣言された時点から、プロシージ ャの終了迄で有る。 MySQL サーバが起動して居ない と、此のプログラムは動作しない ので、事前に起動して置く。 ODBC 接続の場合、各種パラメー タは、ODBC に登録されて居る為 接続文字列は、簡潔で有る。 オートインクリメント項目は、必 ずインデックスを指定する必要が 有る。 テーブル名やフィールド名に日本 語を使用する事は可能だが、誤動 作の原因と成る為、使用しない。 CREATE TABLE は、テーブルを 作成するクエリで有る。必ず1個 以上のフィールドを指定する。 DEFAULT で、フィールドの初期 値を指定する事が出来る。 文字列型フィールドには、通常 VARCHAR か TEXT のデータ型 を指定する。 使用済のコネクションは、必ず閉 じて、メモリから解放して遣る必 要が有る。 255 バイト以下の場合 VARCHAR を、其れ以上の場合TEXT のデー タ型を指定する。

(7)

■ オブジェクト・プロパティ一覧 1 ■

コントロールの種類 プロパティ プロパティの設定値

フォーム オブジェクト名 Form1

Caption MySQL – ODBC 接続

ラベル オブジェクト名 lblItem Index 0~5(コントロール配列、上から) Caption ID、TITLE、PRICE、PURCHASED CATEGORY、WRITER テキストボックス1 オブジェクト名 txtB_ID テキストボックス2 オブジェクト名 txtB_Title テキストボックス3 オブジェクト名 txtB_Price テキストボックス4 オブジェクト名 txtB_Purchased コンボボックス1 オブジェクト名 cboB_Categories コンボボックス2 オブジェクト名 cboB_Writers データグリッド1 オブジェクト名 dgdBooks コマンドボタン1 オブジェクト名 cmdBooks Index 0~2(コントロール配列、上から) Caption 追加、訂正、削除 コマンドボタン1 データグリッド1 ラベル コントロール配列 (0~5) テキストボックス1 コンボボックス1 テキストボックス2 テキストボックス3 コンボボックス2 テキストボックス4

(8)

■ オブジェクト・プロパティ一覧 2 ■ コントロールの種類 プロパティ プロパティの設定値 ラベル オブジェクト名 lblItem Index 6~8(コントロール配列、上から) Caption ID、NAME、TOTAL テキストボックス5 オブジェクト名 txtC_ID テキストボックス6 オブジェクト名 txtC_Name テキストボックス7 オブジェクト名 txtC_Total データグリッド2 オブジェクト名 dgdCategories コマンドボタン2 オブジェクト名 cmdCategories Index 0~2(コントロール配列、上から) Caption 追加、訂正、削除 データグリッド2 ラベル コントロール配列 (6~8) テキストボックス5 テキストボックス6 テキストボックス7 コマンドボタン2

(9)

■ オブジェクト・プロパティ一覧 3 ■ コントロールの種類 プロパティ プロパティの設定値 ラベル オブジェクト名 lblItem Index 9~11(コントロール配列、上から) Caption ID、NAME、PHONETIC テキストボックス8 オブジェクト名 txtW_ID テキストボックス9 オブジェクト名 txtW_Name テキストボックス10 オブジェクト名 txtW_Phonetic データグリッド3 オブジェクト名 dgdWriters コマンドボタン3 オブジェクト名 cmdWriters Index 0~2(コントロール配列、上から) Caption 追加、訂正、削除 データグリッド3 ラベル コントロール配列 (9~11) テキストボックス8 テキストボックス9 テキストボックス10 コマンドボタン3

(10)

■ プログラムリスト-テーブル操作 ■ Option Explicit '================================================================================= ' 此のプログラムを実行する際に mySQL サーバ(デーモン)を起動して置く必要が有る。 '================================================================================= Private Cn As ADODB.Connection Private RsB As ADODB.Recordset Private RsC As ADODB.Recordset Private RsW As ADODB.Recordset ' フォームが読み込まれた時の処理 Private Sub Form_Load( ) Dim SQL As String

' コネクションの設定

Set Cn = New ADODB.Connection Cn.CursorLocation = adUseClient

Cn.ConnectionString = "dsn=book;uid=squid;pwd=calamar;stmt=set names sjis" Cn.Open

' レコードセットの設定

Set RsB = New ADODB.Recordset SQL = "SELECT * FROM BOOKS;" RsB.Open SQL, Cn

Set dgdBooks.DataSource = RsB Set RsC = New ADODB.Recordset SQL = "SELECT * FROM CATEGORIES;" RsC.Open SQL, Cn

Set dgdCategories.DataSource = RsC Set RsW = New ADODB.Recordset SQL = "SELECT * FROM WRITERS;" RsW.Open SQL, Cn Set dgdWriters.DataSource = RsW ' カテゴリ・著者項目をコンボボックスに追加 Call CboAddItem( 2 ) ' カテゴリのトータル設定 Call CateUpdate 此処で宣言した変数の有効期間は 宣言された時点から、プログラム の終了迄で有る。 此のプログラムを実行する前に、mySQL でデータベースを作成し ODBC 登録して置く。 ■ データベース作成 データベース名:book(テーブルは、前出のテーブル作成プログラムで作成する。) ■ ODBC 登録 データソース名:book サーバー名 :localhost ユーザー名 :squid パスワード :calamar ' データベース名:book 此処で宣言した変数の有効期間は 宣言された時点から、プロシージ ャの終了迄で有る。 キャラクタセットを指定しないと フィールド値に日本語を設定する と、エラーが発生する。 因みに、stmt は、接続後に実行す るステートメントを指定するパラ メータで有る。 各レコードセットに対応するテー ブルの総てのレコードを抽出して データグリッドに関連付ける。 引数に依りコンボボックスに追加 する項目(0:カテゴリ、1:著 者、2:両方)を指定する。 Call は、サブルーチンに制御を移 すステートメントで有る。

(11)

' タブダイアログの初期化 tabDisp.Tab = 0

End Sub

' フォームが閉じられ様と仕た時の処理

Private Sub Form_QueryUnload( Cancel As Integer, UnloadMode As Integer ) ' コネクションとレコードセットの後始末 RsB.Close RsC.Close RsW.Close Cn.Close Set RsB = Nothing Set RsC = Nothing Set RsW = Nothing Set Cn = Nothing End Sub ' コマンドボタン(本:追加・変更・削除)をクリックした時の処理 Private Sub cmdBooks_Click( Index As Integer )

Dim SQL As String

Select Case Index Case 0

SQL = "INSERT INTO BOOKS(TITLE,PRICE,PURCHASED,CATEGORY_ID,WRITER_ID) VALUES("

SQL = SQL & "'" & txtB_Title.Text & "'," SQL = SQL & txtB_Price.Text & ","

SQL = SQL & "'" & Date & "'," ' ACCESS と異なり、#でクオートするとエラーに成る。 SQL = SQL & cboB_Categories.ItemData( cboB_Categories.ListIndex ) & ","

SQL = SQL & cboB_Writers.ItemData( cboB_Writers.ListIndex ) & ");" Case 1

If txtB_ID.Text = "" Then Exit Sub SQL = "UPDATE BOOKS SET "

SQL = SQL & "TITLE='" & txtB_Title.Text & "'," SQL = SQL & "PRICE=" & txtB_Price.Text & ","

SQL = SQL & "PURCHASED='" & txtB_Purchased.Text & "',"

SQL = SQL & "CATEGORY_ID=" & cboB_Categories.ItemData(cboB_Categories.ListIndex) & ","

SQL = SQL & "WRITER_ID=" & cboB_Writers.ItemData(cboB_Writers.ListIndex) SQL = SQL & " WHERE ID=" & txtB_ID.Text & ";"

Case 2

If txtB_ID.Text = "" Then Exit Sub

SQL = "DELETE FROM BOOKS WHERE ID=" & txtB_ID.Text & ";" End Select Debug.Print SQL Cn.Execute SQL RsB.Requery Set dgdBooks.DataSource = RsB Call CateUpdate End Sub ' コマンドボタン(カテゴリ:追加・変更・削除)をクリックした時の処理 Private Sub cmdCategories_Click( Index As Integer )

Dim SQL As String タブダイアログのBOOKS タブが 最初に選択された状態に設定して 置く。 使用したコネクションやレコード セットは、使用後、必ずクローズ し、メモリから解放する。 データグリッドとの関連の為、孰 れも持続性を必要とするので、終 了時に実施して居る。 プロシージャ間で値の遣り取りを 必要と仕無い変数は、プロシージ ャ内で宣言する。 日付型の値は、MS Access とは異 なり、シャープ( # )でクオート するとエラーが発生する。 INSERT、UPDATE、DELETE等の アクションクエリは、コネクショ ンのExecuteメソッドで実行する。 変更をデータグリッドに反映させ る為、クエリを再実行し、再度関 連付けを行う。

(12)

Select Case Index Case 0

SQL = "INSERT INTO CATEGORIES(NAME) VALUES('" & txtC_Name.Text & "');" Case 1

If txtC_ID.Text = "" Then Exit Sub

SQL = "UPDATE CATEGORIES SET NAME='" & txtC_Name.Text SQL = SQL & "' WHERE ID=" & txtC_ID.Text & ";"

Case 2

If txtC_ID.Text = "" Then Exit Sub

SQL = "DELETE FROM CATEGORIES WHERE ID=" & txtC_ID.Text & ";" End Select Debug.Print SQL Cn.Execute SQL RsC.Requery Set dgdCategories.DataSource = RsC Call CboAddItem( 0 ) End Sub ' コマンドボタン(著者:追加・変更・削除)をクリックした時の処理 Private Sub cmdWriters_Click( Index As Integer )

Dim SQL As String

Select Case Index Case 0

SQL = "INSERT INTO WRITERS(NAME,PHONETIC) VALUES('"

SQL = SQL & txtW_Name.Text & "','" & txtW_Phonetic.Text & "');" Case 1

If txtW_ID.Text = "" Then Exit Sub

SQL = "UPDATE WRITERS SET NAME='" & txtW_Name.Text SQL = SQL & "',PHONETIC='" & txtW_Phonetic.Text

SQL = SQL & "' WHERE ID=" & txtW_ID.Text & ";" Case 2

If txtW_ID.Text = "" Then Exit Sub

SQL = "DELETE FROM WRITERS WHERE ID=" & txtW_ID.Text & ";" End Select Debug.Print SQL Cn.Execute SQL RsW.Requery Set dgdWriters.DataSource = RsW Call CboAddItem( 1 ) End Sub ' データグリッド(本)がクリックされた時の処理 Private Sub dgdBooks_Click( )

Dim I As Integer

If RsB.RecordCount > 0 Then

txtB_ID.Text = RsB.Fields("ID").Value & "" txtB_Title.Text = RsB.Fields("TITLE").Value & "" txtB_Price.Text = RsB.Fields("PRICE").Value & ""

txtB_Purchased.Text = RsB.Fields("PURCHASED").Value & ""

Debug.Print は、引数の値をイミ ディエイトウィンドウに出力する メソッドで有る。 カテゴリ項目が変更されたので BOOKS タブのカテゴリ用コンボ ボックスの内容を更新する。 Debug.Print は、編集時而巳有効 で、EXE ファイルにはコンパイル されない。 著 者 項 目 が 変 更 さ れ た の で BOOKS タブの著者用コンボボッ クスの内容を更新する。 データグリッドの左列をクリック すると、関連付けられたレコード セットの該当行がカレントレコー ドとなる。

(13)

For I = 0 To ( cboB_Categories.ListCount – 1 )

If Val(RsB.Fields("CATEGORY_ID").Value & "") = cboB_Categories.ItemData(I) Then cboB_Categories.ListIndex = I

Exit For End If Next I

For I = 0 To ( cboB_Writers.ListCount – 1 )

If Val(RsB.Fields("WRITER_ID").Value & "") = cboB_Writers.ItemData(I) Then cboB_Writers.ListIndex = I Exit For End If Next I End If End Sub ' データグリッド(カテゴリ)がクリックされた時の処理 Private Sub dgdCategories_Click( )

If RsC.RecordCount > 0 Then

txtC_ID.Text = RsC.Fields("ID").Value & ""

txtC_Name.Text = RsC.Fields("NAME").Value & "" txtC_Total.Text = RsC.Fields("TOTAL").Value & "" End If

End Sub

' データグリッド(著者)がクリックされた時の処理 Private Sub dgdWriters_Click( )

If RsW.RecordCount > 0 Then

txtW_ID.Text = RsW.Fields("ID").Value & ""

txtW_Name.Text = RsW.Fields("NAME").Value & ""

txtW_Phonetic.Text = RsW.Fields("PHONETIC").Value & "" End If

End Sub

' コンボボックスにアイテムを追加するジェネラルプロシージャ Private Sub CboAddItem( N As Integer )

Dim Rs As ADODB.Recordset Dim SQL As String

Dim I As Integer

' レコードセットのインスタンス生成 Set Rs = New ADODB.Recordset

' カテゴリ項目の設定

If N = 0 Or N = 2 Then

SQL = "SELECT * FROM CATEGORIES;" Rs.Open SQL, Cn

I = 0: cboB_Categories.Clear Do Until Rs.EOF

cboB_Categories.AddItem Rs.Fields("NAME").Value & "" cboB_Categories.ItemData(I) = Val( Rs.Fields("ID").Value & "" ) Rs.MoveNext: I = I + 1 Loop Rs.Close End If コンボボックスのItemData には 各項目の ID 値が格納されて居る ので、一致する物を捜して居る。 フィールドに値が設定されて居な い時の値はNull で有り、此れをテ キストボックスの Text プロパテ ィに代入すると、エラーに成る。 Null 値にヌルストリングを結合 する事に依り、文字列型にキャス トして居る。 因みに、Null 値か何うかを判定す るには、IsNull 関数を使用する事 も出来る。 此処で宣言した変数は、宣言した プロシージャ内でしか、値の設定 と取得が出来ない。 オブジェクト型の変数は、宣言し た丈では、インスタンスが生成さ れず、使用する事は出来ない。 AddItem は、コンボボックスにリ ストアイテムを追加するメソッド で有る。 ItemData は、対応するリストア イテムに数値データを保持させる 為のプロパティで有る。

(14)

' 著者項目の設定

If N = 1 Or N = 2 Then

SQL = "SELECT * FROM WRITERS;" Rs.Open SQL, Cn

I = 0: cboB_Writers.Clear Do Until Rs.EOF

cboB_Writers.AddItem Rs.Fields("NAME").Value & "" cboB_Writers.ItemData(I) = Val( Rs.Fields("ID").Value & "" ) Rs.MoveNext: I = I + 1 Loop Rs.Close End If ' レコードセットのインスタンス開放 Set Rs = Nothing End Sub ' カテゴリ別データ数を更新するジェネラルプロシージャ Private Sub CateUpdate( )

Dim Rs1 As ADODB.Recordset Dim Rs2 As ADODB.Recordset Dim SQL As String Dim I As Integer Dim N As Integer Dim M As Integer ' レコードセットのインスタンス生成 Set Rs1 = New ADODB.Recordset Set Rs2 = New ADODB.Recordset

' カテゴリ別データ数の更新

SQL = "SELECT ID FROM CATEGORIES;" Rs1.Open SQL, Cn

Do Until Rs1.EOF

N = Val( Rs1.Fields("ID").Value & "" )

SQL = "SELECT COUNT(ID) AS TTL FROM BOOKS"

SQL = SQL & " WHERE CATEGORY_ID=" & CStr( N ) & ";" Rs2.Open SQL, Cn

If Rs2.RecordCount > 0 Then

M = Val( Rs2.Fields("TTL").Value & "" )

SQL = "UPDATE CATEGORIES SET TOTAL=" & CStr( M ) SQL = SQL & " WHERE ID=" & CStr( N ) & ";"

Cn.Execute SQL End If Rs2.Close Rs1.MoveNext Loop Rs1.Close ' レコードセットのインスタンス開放 Set Rs1 = Nothing Set Rs2 = Nothing End Sub List コレクションは画面への表示 用、ItemData コレクションは内 部での処理用と謂える。 1レコードを処理した後は、必ず MoveNext しないと、無限ループ に陥るので、注意を要する。 プロシージャ内で生成したインス タンスは、必ずプロシージャ内で 破棄する必要が有る。 プロシージャ内で宣言した変数は プロシージャを抜けると、自動消 滅するが、インスタンスは、自動 消滅しない。 レコードセットは、此の様に、必 要に応じて幾つでも生成する事が 出来る。 Val 関数は、文字列を数値化する 関数で有るが、引数がヌルストリ ングの場合0 を返す。 オブジェクトのインスタンスは Nothing をセットする事に依りメ モリから解放する事が出来る。

(15)

MySQL データベースへの接続方法 (参考)

MyODBC ドライバを使用してローカルのデータベースに接続

Cn.Open "Driver={mySQL};" & _ "Server=localhost;" & _ "Option=16834;" & _

"Database=データベース名"

MyODBC ドライバを使用してリモートのデータベースに接続

Cn.Open "Driver={mySQL};" & _ "Server=サーバのドメイン;" & _ "Port=3306;" & _ "Option=131072;" & _ "Stmt=;" & _ "Database=データベース名;" & _ "Uid=ユーザ名;" & _ "Pwd=パスワード" MySQL ODBC 3.51 ドライバを使用してローカルのデータベースに接続

Cn.Open "DRIVER={MySQL ODBC 3.51 Driver};" & _ "Server=localhost;" & _ "Port=3306;" & _ "Option=16384;" & _ "Stmt=;" & _ "Database=データベース名;" & _ "Uid=ユーザ名;" & _ "Pwd=パスワード" 又は

Cn.Open "DRIVER={MySQL ODBC 3.51 Driver};" & _ "SERVER=localhost;" & _

"DATABASE=データベース名;" & _ "USER=ユーザ名;" & _

"PASSWORD=パスワード;"

※ 最初に MySQL をインストールした時に、sys データベースの user テーブルに root ユーザアカウン トが、パスワード無しで、作成される。

※ 設定ファイル my.ini の default-character-set で、文字セットを設定しても、此れは、MySQL が提 供するアプリケーション而巳に対して有効で有り、Visual Basic 等で作成した独自のアプリケーシ

ョンには効果が無い。其の為、接続後に実行するステートメントを指定するSTMT パラメータを使

用して、初期化時にキャラクタセットを指定する必要が有る。Shift-JIS に設定する例を示す。 STMT=set names sjis(又は、STMT=set character set sjis)

参照

関連したドキュメント

3:80%以上 2:50%以上 1:50%未満 0:実施無し 3:毎月実施 2:四半期に1回以上 1:年1回以上

3:80%以上 2:50%以上 1:50%未満 0:実施無し 3:毎月実施 2:四半期に1回以上 1:年1回以上

3:80%以上 2:50%以上 1:50%未満 0:実施無し 3:毎月実施. 2:四半期に1回以上 1:年1回以上

電事法に係る  河川法に係る  火力  原子力  A  0件        0件  0件  0件  B  1件        1件  0件  0件  C  0件        0件  0件  0件 

生活介護  2:1  *1   常勤2名、非常勤5名  就労継続支援B型  7.5:1+1  *2  

1に、直接応募の比率がほぼ一貫して上昇してい る。6 0年代から7 0年代後半にかけて比率が上昇

取組状況 実施 実施無し 対象設備 無し.. 評価点 1 0

運転上の制限 当初の設定理由 状況の変化(現状). 常用原子炉注水系 原子炉の冷却に必要