AccessとMySQL(とUbuntu)
Accessでファイルの共有をしていると、いつかはここにたどり着く・・・かもしれませんが、必要ない人には必要ありません。実際私の場合、何年もAccessだけで仕事回ってますので・・・。
ここから先はAccessだけでは困った人だけ、こんな方法もあるみたいよ?程度で見てください。
ただ、いきなりMySQLに行くよりはAccessでテーブルとかリレーションとか触ってからの方が理解しやすいとは思います。
データを職場で共有したい場合、データはSQLサーバー、管理画面はAccessとした方がいいのは百も承知なんですが、なんでそうしなかったかというと、
「よくわからなかった」
からです。
そりゃそうですよね。だれでも初めからわかる人なんていません。
一応何年か前に触ってみようと思いまして、さわりだけやってみたのですが、なんか黒い画面(コマンドプロンプト)にごちゃごちゃ入力してみたけどイマイチよくわからない・・・。
そのころ一応日常業務に利用するAccessのソフトもできあがり、それでそんなに困ることもないという現状もありまして、
「ま、えっか」
とさわらなくなってしまいました。
それから時代は過ぎ去り、あれやこれやと機能を追加し、本来使いたくない無線LANで利用したりすると、処理に時間がかかったりする場面もでてきます。特にバーコードを使っての注射の払出監査や納品の登録なんかは、短時間で検索と入力を繰り返すため、そのような症状が顕著に表れます。さらに他の端末で誰かが同じファイルで何かしようとすると処理速度が落ちるのが分かります。
また、携帯電話の進化のおかげで「この携帯でなんか作れたら便利そうなんだけどなあ」と思いつつも、OSの枠を越えて利用しようと思うとAccessでは・・・。
端末がポケットに入るかどうかというのは大きな違いです。
そこで久しぶりにSQL・・・なんですけど、いちいちコマンド覚えてられないっていうのが正直なところ。
Accessのいいところは、クエリ使えば、あの面倒なSQL文を勝手に書いてくれてるんですよね。
同じようなものはないものなのか?と思いまして調べてみたら、なんかあるじゃないですか。
「MySQL Workbench」
とかいうのが。
但し、すべて英語。でもおかげでちょっとさわってみようかな?と思えましたので、ネットを検索しながら久しぶりにMySQLをインストールしてみました。
このページの一番下あたりにある
MySQL Community Edition (GPL)
をクリック
ダウンロードボタンを押すと
ここのGO TO Download Pageボタンを押すと
下の方でいいらしい。
No thanks, just start my download.を押すとダウンロードが始まります。
お約束の左下、同意にチェックを入れて次へ
一番下カスタムを選択して次へ
SQLとWorkbenchはx64でいいのですが、ODBCは、使ってるAccessがほとんどの人が32bit版だと思うのでx86かなと思います。
まあご自身の環境に合わせて選択してください。
こんな画面出てきたら、なんか足りないってことみたいです。
下のExecuteボタン押してインストールしときましょう。
この画面が裏に隠れて先に進めないことがありましたのでタスクバーとかよく見ておきましょう。
※たまにこのMicrosoft Visual C++・・・がない場合があり、別にMSからダウンロードする必要のある機械があるようです。ここもAccessのバージョンに合わせてX86だと思います。
さらにMicrosoft .NET Framework 4のダウンロードが必要になることがあります。
Executeボタンを押すと
次へ
そのまま次
ここもそのまま次
パスワードを決めて次へ
この画面でほかのユーザーも追加できるみたいですけど、とりあえずそのまま。
PC起動と同時にMySQLも起動するかとか、サービスを動かすユーザーをどうするかとか聞いてますが、ここもそのまま。
なんかよくわかりませんが、今回はチェックを入れないまま次。
Executeボタンを押してFinish
これでMySQLのインストールは終わったみたいです。
途中、インストールする場所やデータを保存する場所が変更できる画面が表示されるはずだったのですが、今回はなぜか出ませんでした。
ちゃんとインストールされたのか確認してみたいので、コマンドプロンプトに
mysql -u root -p
と入力すると
なんか動いているらしい。
でも動いてるだけで中身は空っぽです。なんもしてませんから。
続けてMySQL Workbenchを起動、下の図のMySQL Connectionsの横にある+ボタンを押して適当な名前を付けて・・・
まあイメージとしてはMySQLって広い土地があって、その中に小さな家を作ってあげて、さらにその中に家具を作っていく感じかなあと。
因みに一番上のイルカを選んだ状態で接続を選ぶと、テーブルを作成したり、ユーザーを追加できるみたいで、2番目がリレーションの設定をしたり、リレーションを設定しながらテーブルを作成したりできるみたいです。
Accessでいう連鎖削除とか連鎖更新も設定できます。
今回はAccessのテーブルをMySQLに持っていきたいので、接続だけ作っておきます。
Connection Nameは自分の分かりやすい名前ならなんでもいいです。Accessならファイル名みたいなもの?ですかね。
ローカルで試しに作成していきますので他はこのままで「OK」押しておきます。
では今作成したDD_BASEを開いてみます。
空っぽです。まだなにもありません。
ここにデータを保存する箱みたいなものを作ります。
上で言えば家です。
名前を付けてApplyボタン
自動で書いてくれますので再度Apply。
SCHEMAS部分に新たに作成されますので本来はTables部分を右クリックしてテーブルを作成していきます。
今回はAccessのテーブルを投げ込みたいのですが、その場合「ODBC」なるものが必要になります。
上でMySQLと一緒にインストールしましたが、入れ忘れたときは後から追加できます。
ODBCインストール後、windows10の場合
C:\Windows\SysWOW64\odbcad32.exe、またはスタートバーのWindows管理ツールの中にODBCデータソースっていうのができていれば32bitを選んで(おそらく使っているAccessのバージョンに合わせるのだと)
システムDSNのところで追加ボタンを押して
MySQL ODBC ×× Unicode Driver(インストールしたODBCのバージョンによって変わります。Unicodeでいいらしいとどこかに書いてありましたがご自分の環境に合わせて。)を選択して完了を押すと
分かりやすい名前を付けて(MySQLの名前と合わせてますが、違ってもいいみたい。ただし、ネットワーク数台で使おうと思うならそれらのPCでの名前は統一しとく。)USERとPasswordはMySQLで設定したものを入力してあげるとDatabase部分に先程MySQL内に作った接続が選択できるようになるはずなので目的のものを選択して「OK」
なんか出来ました。
ここまで出来たらAccessを起動してテーブルをエクスポートしてみます。
まあこんなテーブルをエクスポートしたい場合、
ODBCを選択すると
エクスポート先での名前を聞かれますので入力後「OK]ボタンを。
エクスポートされました。
Accessで作ったテーブルをMySQLに移して元のソフトがそのまま使えるかと言いますと、場合によっては多少修正が必要になります。
まずAccessのテーブルをそのままMySQLにエクスポートするとオートナンバーフィールドがオートナンバーになってません。これはWorkbenchで修正できます。ただし、そのオートで発行された番号を取得するには一手間必要です。
ADOを利用する方法を公開してくださっている人がいて助かりました。
次にリレーションの設定は当然引き継がれませんが、これもWorkbenchで再度設定できます。
また、Accessだけで作ったものよりも場合によっては処理が遅くなることがあります。インデックスを上手く使うと解決できるかもしれません。
読み込むレコード数が多い場合もAccess単独よりも遅くなる場合があります。フォームに条件を加えて(TOP100とか)あらかじめ表示する件数を絞ることで解決する場合もあります。
チェックボックスを使っている場合は注意が必要で、Accessは-1と0ですが、MySQLでは1と0になり、プログラムに影響がある場合は修正が必要です。
MySQLネットワークで利用するには、外部からデータにアクセスできるUSERを作成し、権限も付けてあげないといけません。
この作業はWorkbenchでできます。
①でユーザー名を入れて、②に"%"を入れておけばネットワーク上どこからでもアクセスできるユーザーになります。
さらに
ここのチェックでユーザーの権限を制限できます。上図はすべてチェック入ってますが、ユーザーに合わせたチェックを入れてApplayボタンを押せば出来上がりです。
windowsだとこれでOKなんですが、サーバーをUbuntuにした場合、このままだと外部から共有できませんでした。
とりあえず自分のPC(win)で試してみて、これならいけそう?ってことで、Ubuntuで試してみたのですが、どうしてもネットワークから共有できない・・・。
なんで?と色々調べてみたら、Ubuntuだとmy.cnf のアドレスをコメントアウトしろとか書いてくださっている方々が。助かりますねえ。
/etc/mysql/my.cnf と書いてあったけどそこには無かったので/etc/mysql/mysql.conf.d/ にあったそれらしいものを
#bind-address = 127.0.0.1
としてあげて
sudo /etc/init.d/mysql restart
でMySQLを再起動すればいいらしい。
ただ、Ubuntuはファイルの編集しようとすると、権限がどうのこうの言われて直接そのファイルをダブルクリックしただけでは修正できない部分がありまして、root権限でテキストを編集するエディターを開いてあげないといけないそうな。
※文字コード設定
MySQLには文字コードってものがあります。utf8 とか、SJISとか。
Accessで作ったテーブルを調子に乗ってポイポイとMySQLにエクスポートして、順調に動いていたのですが、ちょっと別の機械を導入したいと思いまして、久しぶりにAccessのテーブルをMySQLのテーブルに投げ込もうとしたところ、エラーを起こしてエクスポートできませんでした。
あれ?と思いまして、データを空にして投げ込むとエクスポートできる。
何でかなあとMySQLに直接データを入力してみたところ、またエラーを起こしてデータが保存できない。
どうやら日本語があるとエクスポートも入力もできないようで、エラーコードで検索すると「文字コード」が何とかかんとか・・・。
うーーーん、どうしよう。よくわからん。そもそも以前はできていたのになんで設定変わったの?まあ一つ思い当たる節はあったのですが、「えーーい、MySQL再インストールしてしまえ」と自分のwindowsの実験用MySQLを再インストールしたところ、元に戻りました。
なんかよくわからんけどUbuntuの方も再インストールしたら戻るのか?と試してみたところダメでした。
以前作ったテーブルをインポートしたものには日本語入力できるので、新たに作成するテーブルの文字コードが変わってしまったのだろうと。
なにかWorkbenchに設定項目ないの?と色々いじっていたらありました。
テーブルではなくスキーマ部分を選択した状態でレンチマークのアイコン押したらそれらしい設定が・・・。
というか、スキーマ作るときに設定できるのね・・・。デフォルトのままやってたから気がつきませんでした。