FC2ブログ
    まとめ買いがお得なオンラインセレクトショップ ETERNITY
2009年06月24日 (水)
名簿アプリケーションで、名簿に登録していくサンプル


■■■ 環境 ■■■
<サーバ>
OS: CentOS 5 (VMWare Workstation6で稼動)

MySQL環境:
※今回使用しているサーバはVB以外のプログラム試験も兼ねているため、
以下の情報はあくまでも参考。(バージョン情報だけ見てね)

# rpm -qa | grep mysql
mysql-5.0.45-7.el5
php-mysql-5.1.6-23.2.el5_3
mysql-server-5.0.45-7.el5
mysql-devel-5.0.45-7.el5
libdbi-dbd-mysql-0.8.1a-1.2.2
mysql-connector-odbc-3.51.12-2.2

■■■ 準備するもの ■■■
(1) Microsoft Visual Basic 2008 Express Edition SP1 (無料)
http://www.microsoft.com/japan/msdn/vstudio/express/
※30日の使用期限があるので無料のライセンス登録しておく。


(2) MySQL Connector/Net 5.0
http://dev.mysql.com/downloads/connector/net/5.0.html
mysql-connector-net-5.0.9-noinstall.zip
※MySQLに接続するためにConnector/Netに含まれている「MySql.Data.dll」が必要。



■■■ サンプルDB ■■■
サーバのMySQLにログインし、VBからアクセスするための適当なDBを作成する。

mysql> CREATE DATABASE vbmysqltest character set utf8;
Query OK, 1 row affected (0.03 sec)

mysql> GRANT ALL PRIVILEGES ON vbmysqltest.* TO hogehoge@192.168.0.1 IDENTIFIED BY 'qweqwe';
Query OK, 0 rows affected (0.01 sec)

mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.01 sec)

mysql> USE vbmysqltest;
Database changed
mysql>
mysql>
mysql> create table list_table(
-> name varchar(30) not null,
-> age smallint not null,
-> gender varchar(2) not null
-> );
Query OK, 0 rows affected (0.05 sec)

mysql> show tables;
+-----------------------+
| Tables_in_vbmysqltest |
+-----------------------+
| list_table |
+-----------------------+
1 row in set (0.00 sec)

mysql> show fields from list_table;
+--------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+--------+-------------+------+-----+---------+-------+
| name | varchar(30) | NO | | | |
| age | smallint(6) | NO | | | |
| gender | varchar(2) | NO | | | |
+--------+-------------+------+-----+---------+-------+
3 rows in set (0.00 sec)

mysql>

とりあえず、こんな感じでおk。

■■■ VBプログラム ■■■
<DB接続のための参照設定>
VisualBasic.NETからMySQLに接続するための参照を設定します。

(1)Visual Basic 2008 Express Editionを起動します。
(2)適当な名前でWindows フォームアプリケーション プロジェクトを作成します。
(3)画面右側にあるソリューションエクスプローラをのプロジェクト名を右クリックして「参照の追加」を選択します。
ダイアログボックスが表示されたら、先ほどダウンロードしたMySql.Data.dllを選択してOKをクリックします。
(4)このファイルDatabase.vbをダウンロードして拡張子を.vbに変更する。
(5)Database.vbをリューションエクスプローラで、追加>既存の項目を選択して取り込む。



以上で参照の設定が完了です。


------------ 接続サンプルコード --------------------------------
Private Sub GetListData()

Dim sql As String 'SQL文
Dim dataReader As MySql.Data.MySqlClient.MySqlDataReader 'SELECT結果
Dim db As DataBase 'データベースオブジェクト
Dim row As String() 'DataGridViewに追加する1行

'DataGridViewの内容を消去する
dgv_List.Rows.Clear()

'データベースの初期設定(ホスト名、ポート番号、データベース名、ユーザID、パスワード)
db = New DataBase("192.168.0.1", "3306", "vbmysqltest", "hogehoge", "qweqwe")

'データベースに接続
db.Open()

sql = ""
sql = sql & "SELECT "
sql = sql & " name, "
sql = sql & " age, "
sql = sql & " gender "
sql = sql & "FROM "
sql = sql & " list_table;"

'SQL文実行して結果取得
dataReader = db.ExecuteQuery(sql)

'----- データがある間繰り返す -----'
While dataReader.Read()

'配列を初期化
ReDim row(2)

row(0) = dataReader("name") '読み込んだ行のname列を取得
row(1) = dataReader("age") '読み込んだ行のage列を取得
row(2) = dataReader("gender") '読み込んだ行のgender列を取得

'DataGridViewに1行追加
dgv_List.Rows.Add(row)

End While
'----------------------------------'

'データベースを閉じる
db.Close()

End Sub
------------------------------------------------------------



■■■ MySQLの文字化けについて ■■■
<問題点>
VB.NETのプログラムからMySQLに漢字などの文字を書き込むと文字化けしてしまう。

<解決策>
MySQLの初期状態ではcharacterset: latin1 になっているはず。
それに対して扱いたい文字コードを指定(設定の追加)を行う必要がある。

以下、設定例。


# vi /etc/my.cnf の編集
-------------------------------------------------------------
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
user=mysql
# Default to using old password format for compatibility with mysql 3.x
# clients (those using the mysqlclient10 compatibility package).
old_passwords=1
default-character-set = utf8 ←これ追加

[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid

[mysql]
default-character-set = utf8 ←これ追加
-------------------------------------------------------------


追加・保存したらmysqldを再起動する。



MySQLにログインしてstatusコマンドで確認する。

mysql> status
--------------
mysql Ver 14.12 Distrib 5.0.45, for redhat-linux-gnu (i686) using readline 5.0

Connection id: 2
Current database:
Current user: root@localhost
SSL: Not in use
Current pager: stdout
Using outfile: ''
Using delimiter: ;
Server version: 5.0.45 Source distribution
Protocol version: 10
Connection: Localhost via UNIX socket
Server characterset: utf8          ←ここらへん
Db characterset: utf8             ←が
Client characterset: utf8           ←utf8に
Conn. characterset: utf8           ←なっていればおk
UNIX socket: /var/lib/mysql/mysql.sock
Uptime: 7 sec

Threads: 1 Questions: 4 Slow queries: 0 Opens: 12 Flush tables: 1 Open tables: 6 Queries per second avg: 0.571
--------------


とりあえずこれでVBからレコード追加した時に日本語が文字化けしないようになる。

テーマ:プログラミング
ジャンル:コンピュータ
コメント
この記事へのコメント
コメントを投稿
URL:
Comment:
Pass:
秘密: 管理者にだけ表示を許可
 
トラックバック
この記事のトラックバックURL
この記事へのトラックバック