フリーデータベース Ⅱ VB オートメーション 10 プログラムの概要 事務処理に於いて 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) -1-
MySQL の Visual Basic からの利用 データベースの作成 MySQL のサーバ ( デーモン )mysqld とモニタ mysql を起動し 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) SHOW DATABASES で データベースが正しく新規作成されたか確認するが book と謂うデータベースがリストに含まれて居る事が確認されれば良い 表示されるデータベースの個数等は 状況に依り異なる ユーザ作成と権限付与 上記で新規作成したデータベース book に対して 全権限を持つ新規ユーザを squid と名前で作成する 猶 アクセスする為のパスワードは calamar とする 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) 此処では 上記で新規作成したデータベース book に対して MySQL をインストールしたローカルマシン (squid@localhost) と 別のリモートマシン (squid@ % ) からアクセス可能なユーザを作成して居る 猶 権限 ALL は ユーザ管理 (GRANT) 以外の総ての権限を持つ 以上で ローカルマシンからもリモートマシンからも ユーザ名 squid パスワード calamar で 総ての権限を持ってアクセスする事の出来る空のデータベース book が作成された -2-
ODBC(Open Database Connectivity) 登録 任意のデータベースを ODBC に登録するには 先ず 下記の手順に従い ODBC データソースアドミニストレータを起動する 猶 以下の手順は MySQL サーバ ( デーモン ) を起動してから行う Windows 95/98/Me : スタートメニュー 設定 コントロールパネル ODBC データソース Windows NT/2000/XP : スタートメニュー 設定 コントロールパネル 管理ツール データソース (ODBC) Windows 98 系 Windows NT 系 下図の様なダイアログボックスが表示されるので システム DSN タブを選択し 追加 ボタンをクリックする 猶 ローカルマシンからしかアクセスしない場合は ユーザー DSN タブを選択しても良い 次に表示される下図の画面では ドライバ一覧が表示されるので ドライバに MySQL ODBC 3.51 Driver を選択して 完了 ボタンをクリックする -3-
次に表示される下図の画面では 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 ボタンをクリックして 接続テストを行う 下記のダイアログが表示されれば 正しく項目が設定されて居る -4-
下図の画面に戻るので 登録したデータベースの識別名が表示されて居る事を確認して 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 変換する にチェックを付ける -5-
プログラムリスト - テーブル作成 Option Explicit '================================================== ' 事前に MySQL サーバ ( デーモン ) を起動して置く '================================================== ' コマンドボタン ( テーブル作成 ) がクリックされた時の処理 Private Sub cmdcreatetable_click( ) Dim Cn As ADODB.Connection Dim SQL As String MySQL サーバが起動して居ないと 此のプログラムは動作しないので 事前に起動して置く 此処で宣言した変数の有効期間は宣言された時点から プロシージャの終了迄で有る ' コネクションの設定 Set Cn = New ADODB.Connection Cn.CursorLocation = aduseclient Cn.ConnectionString = "DSN=book" Cn.Open ODBC 接続の場合 各種パラメー タは ODBC に登録されて居る為 接続文字列は 簡潔で有る テーブル名やフィールド名に日本 ' 本テーブルの作成語を使用する事は可能だが 誤動 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 CREATE TABLE は テーブルを作成するクエリで有る 必ず1 個以上のフィールドを指定する DEFAULT で フィールドの初期値を指定する事が出来る 文字列型フィールドには 通常 VARCHAR か TEXT のデータ型を指定する 255 バイト以下の場合 VARCHAR を 其れ以上の場合 TEXT のデータ型を指定する MsgBox "3 個のテーブルを作成しました ", vbinformation, " 通知 " ' コネクションの後始末 Cn.Close Set Cn = Nothing 使用済のコネクションは 必ず閉 じて メモリから解放して遣る必 要が有る -6-
オブジェクト プロパティ一覧 1 テキストボックス 1 コマンドボタン 1 テキストボックス 2 テキストボックス 3 コンボボックス 1 テキストボックス 4 コンボボックス 2 ラベル コントロール配列 (0~5) データグリッド 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 追加 訂正 削除 -7-
オブジェクト プロパティ一覧 2 テキストボックス 5 コマンドボタン 2 テキストボックス 6 テキストボックス 7 ラベル コントロール配列 (6~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 追加 訂正 削除 -8-
オブジェクト プロパティ一覧 3 テキストボックス 8 コマンドボタン 3 テキストボックス 9 テキストボックス 10 ラベル コントロール配列 (9~11) データグリッド 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 追加 訂正 削除 -9-
プログラムリスト - テーブル操作 此のプログラムを実行する前に mysql でデータベースを作成し ODBC 登録して置く データベース作成データベース名 :book( テーブルは 前出のテーブル作成プログラムで作成する ) ODBC 登録データソース名 :book サーバー名 :localhost ユーザー名 :squid パスワード :calamar Option Explicit '================================================================================= ' 此のプログラムを実行する際に mysql サーバ ( デーモン ) を起動して置く必要が有る '================================================================================= Private Cn Private RsB Private RsC Private RsW As ADODB.Connection As ADODB.Recordset As ADODB.Recordset 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 ) 此処で宣言した変数の有効期間は 宣言された時点から プロシージ ャの終了迄で有る キャラクタセットを指定しないと フィールド値に日本語を設定する と エラーが発生する 因みに stmt は 接続後に実行す るステートメントを指定するパラ メータで有る 各レコードセットに対応するテー ブルの総てのレコードを抽出して データグリッドに関連付ける 引数に依りコンボボックスに追加 する項目 (0: カテゴリ 1: 著 者 2: 両方 ) を指定する ' カテゴリのトータル設定 Call CateUpdate Call は サブルーチンに制御を移 すステートメントで有る -10-
' タブダイアログの初期化 tabdisp.tab = 0 ' フォームが閉じられ様と仕た時の処理 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 ' コマンドボタン ( 本 : 追加 変更 削除 ) をクリックした時の処理 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 タブダイアログの BOOKS タブが 最初に選択された状態に設定して 置く プロシージャ間で値の遣り取りを 必要と仕無い変数は プロシージ 日付型の値は MS Access とは異 なり シャープ ( # ) でクオート するとエラーが発生する INSERT UPDATE DELETE 等の アクションクエリは コネクショ ンの Execute メソッドで実行する RsB.Requery Set dgdbooks.datasource = RsB Call CateUpdate 変更をデータグリッドに反映させ る為 クエリを再実行し 再度関 連付けを行う ' コマンドボタン ( カテゴリ : 追加 変更 削除 ) をクリックした時の処理 Private Sub cmdcategories_click( Index As Integer ) Dim SQL As String -11-
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 は 引数の値をイミ Debug.Print SQL ディエイトウィンドウに出力する Cn.Execute SQL メソッドで有る RsC.Requery Set dgdcategories.datasource = RsC Call CboAddItem( 0 ) カテゴリ項目が変更されたので BOOKS タブのカテゴリ用コンボ ボックスの内容を更新する ' コマンドボタン ( 著者 : 追加 変更 削除 ) をクリックした時の処理 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 は 編集時而巳有効 Debug.Print SQL Cn.Execute SQL で EXE ファイルにはコンパイル されない RsW.Requery Set dgdwriters.datasource = RsW Call CboAddItem( 1 ) 著者項目が変更されたので BOOKS タブの著者用コンボボッ クスの内容を更新する ' データグリッド ( 本 ) がクリックされた時の処理 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 & "" -12-
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 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 コンボボックスの ItemData には 各項目の ID 値が格納されて居る Next I ので 一致する物を捜して居る ' データグリッド ( カテゴリ ) がクリックされた時の処理 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 & "" ' データグリッド ( 著者 ) がクリックされた時の処理 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 & "" ' コンボボックスにアイテムを追加するジェネラルプロシージャ Private Sub CboAddItem( N As Integer ) Dim Rs As ADODB.Recordset Dim SQL As String Dim I As Integer ' レコードセットのインスタンス生成 Set Rs = New ADODB.Recordset フィールドに値が設定されて居な い時の値は Null で有り 此れをテ キストボックスの Text プロパテ ィに代入すると エラーに成る Null 値にヌルストリングを結合 する事に依り 文字列型にキャス トして居る 因みに Null 値か何うかを判定す るには IsNull 関数を使用する事 も出来る 此処で宣言した変数は 宣言した プロシージャ内でしか 値の設定 と取得が出来ない オブジェクト型の変数は 宣言し た丈では インスタンスが生成さ れず 使用する事は出来ない ' カテゴリ項目の設定 If N = 0 Or N = 2 Then AddItem は コンボボックスにリ 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 ItemData は 対応するリストア Rs.Close イテムに数値データを保持させる 為のプロパティで有る -13-
' 著者項目の設定 List コレクションは画面への表示 If N = 1 Or N = 2 Then 用 ItemData コレクションは内 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 1レコードを処理した後は 必ず Rs.Close MoveNext しないと 無限ループ に陥るので 注意を要する ' レコードセットのインスタンス開放 Set Rs = Nothing ' カテゴリ別データ数を更新するジェネラルプロシージャ 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 プロシージャ内で生成したインスタンスは 必ずプロシージャ内で破棄する必要が有る プロシージャ内で宣言した変数はプロシージャを抜けると 自動消滅するが インスタンスは 自動消滅しない レコードセットは 此の様に 必要に応じて幾つでも生成する事が出来る ' カテゴリ別データ数の更新 Val 関数は 文字列を数値化する SQL = "SELECT ID FROM CATEGORIES;" 関数で有るが 引数がヌルストリ Rs1.Open SQL, Cn ングの場合 0 を返す 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 Rs2.Close Rs1.MoveNext Loop Rs1.Close ' レコードセットのインスタンス開放 Set Rs1 = Nothing Set Rs2 = Nothing オブジェクトのインスタンスは Nothing をセットする事に依りメ モリから解放する事が出来る -14-
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) -15-