2017年11月6日 星期一

MairaDB - 第一次安裝,讓Excel VBA 可以讀取 MariaDB

重點摘要
1. 安裝 XAMPP (Appache + MariaDB + phpMyAdmin + PHP)
2. 安裝 MariaDB ODBC Driver
3. Excel VBA 讀取 MariaDB 的第一隻小程式



目前在將DB由 Sqlite 移轉到 MariaDB。為啥呢?

複雜的說,是為了多人使用、BigData、FinTech、導入Python、未來商業化等多項崇高的夢想打基礎。簡單的說,就是自找麻煩。

1. 安裝XAMPP - 網上教學很多,記得先看一下 [Link1]
[1] 本文的重點是要勾選 Appache 、 MariaDB 、 phpMyAdmin 、 PHP
[2] 安裝後,至開始工作表找 XAMPP Control Panel,將 Appache 、 MariaDB 的服務按下"Start",以後若不想麻煩,可以進到Config,去設定開機就自動啟動。




2. 進入 phpMyAdmin 看看啟動是否正常
[1] 如果是安裝在本機,就打 127.0.0.1/phpmyadmin/ 或 localhost/phpmyadmin/ 就可以連入
[2] 如果有遇到登入 id=root, pws沒有設定,可以直接登入。記得一定要去變更。



[3] 因為我是選擇採用 Synology DS218j 作為資料庫,記得要在Wifi AP裡幫它指定一個固定IP,不然每次都要找找它,也挺麻煩的。
[4] Synology DS218j 的規格,說實在,挺克難的。但因只當資料庫,且只有一兩個人用,手上又有舊的二個160G SATA硬碟,嗯,這樣也挺搭的。
[5] 因為不是在本機安裝,這件事也搞了我一會,因為始終無法登入,最後又是拜了大神,才知道帳號後面,還要指定 "%" ,才能夠遠端登入。





3. 創建一個資料庫以及一個資料表來測試
[1] 一個資料庫底下,可以有多個資料表 (拍謝,久沒用這種大刀,提醒一下自己)
[2] 如何建立資料庫與資料表?嗯,麻煩問一下大神。前面那個MySQL 超新手入門的網站,也很不錯喔。
[3] 比較頭痛的是編碼的選擇,幾篇長知識的好文章整理如下。其實沒有花太多時間去搞懂它,因為我的問題很簡單,到底要選哪一個。


為什麼MYSQL要設定用UTF8MB4編碼 UTF8MB4_UNICODE_CI (我最後是看了這篇,選擇用UTF8MB4_UNICODE_CI)






4. 進入重點了,Excel VBA 到底怎麼連上去呢?這段我搞了二天,特別在此紀錄一下。


5. 要先安裝 MariaDB ODBC Driver,MariaDB官網上有



[1] 綠色的Download給他按下去,拍謝,又面臨選擇



[2] 看到有Windows的那一個,按下去,結束了嗎?還沒。看到有兩個,一個是 xxx-win32.msi /  xxx-win64.msi 。
這是怎樣呢?我的電腦是 Excel 2003 (32位元) + Windows 10 (64位元) ... 只好兩個都下載,都安裝。




[3] 點擊這兩個 msi 檔案之後呢?如果打開 Excel VBA的編輯器,去引用,並沒有看到MariaDB的項目...嗯...鬼打牆了。



[4] 拜大神....拜了好久,下面這篇文章給了我個希望,它提示了一個方向,要去Window的ODBC資料來源登記





所以,我在32位元與64位元,都給它登記。此時,前面有提到要用 phpMyAdmin 將帳號的權限增加 "%" 可以由遠端登入,不然在此處會無法登記成功。切記、切記。






5. 在 Excel VBA 的編輯器中,去引用 "Microsoft ActiveX Data Objects 6.1 Library" & "Microsoft ActiveX Data Objects Recordset 6.0 Library"




6. 接下來,重頭戲到了,寫支 Excel VBA 小程式來連連看...立刻被打槍
 - 在此之前,已經可以用遠端登入 phpMyAdmin,也可以操作 MariaDB,因此排除資料庫本身的問題。




7. 好吧,進入逐項除錯階段

[1] 是引用項目不對?改引用 2.8 版 ... 照樣打槍




[2] 是不是SQL的字串要寫成一整條,字串不用連結符號 "&" 呢?...成功了。




[3] 不死心,SQL的字串還是用連結符號 "&" 呢?...又成功了。




[4] 最後終於找到原因,不能有空格...


這點很奇怪,因為第一支程式也是參考網友寫的...


[5] 總結一下
 - 在 Excel VBA 的引用項目,2.8版 與 6.0版 都是可以的
 - ConnectionString,不能空格