前言:
原本打算上一篇文章要把灌雙系統寫完的,不過後來因為要灌幾個小時,我就邊睡邊起 來按幾個按鍵,意識完的時候已經灌好了= =
不過如果有想要完整教學的話,可以在底下留言,我會補上後來的教學
本文:
最近在使用Qt寫一個UI,功能是先連到指定的資料庫,然後用在刻好的選單,
慢慢選好你要的選項之後,產生相對應的SQL指令,最後把那個table傳回UI上顯示
我寫簡單的UI一直都是用Qt,原因是我C++的UI目前也只會用Qt......(QQ)
#include <QtSql>
#include <QDebug>
#include <QApplication>
#include "mainwindow.h"
int main(int argc, char *argv[])
{
printf("Compiled with Qt Version %s\n", QT_VERSION_STR);
QApplication a(argc, argv);
MainWindow w;
w.show();
//設定一個database物件,並選用要用的driver
QSqlDatabase database = QSqlDatabase::addDatabase("QODBC");
return a.exec();
}
我使用的版本是最新的Qt5.7(我很愛用最新版的東西),然後版本就給我帶來了很大的問 題......(待會會解說)
先簡單說明一下上面的程式碼,真正有意義的就只有兩條
printf("Compiled with Qt Version %s\n", QT_VERSION_STR);
這是確認我的Qt編譯版本(待會會說明為什麼用到這條)
QSqlDatabase database = QSqlDatabase::addDatabase("QODBC");
因為我要連的是Microsoft的資料庫(MS SQL),所要用的驅動叫做ODBC
而當然也不是抓了就可以隨便直接用,而是Qt有自己寫好驅動ODBC的動態函式庫
藉由那個動態函式庫,我們才能正確的驅動ODBC,並產生database物件
(因為我是菜鳥,上面的解釋只是我在搞東搞西的時候自己覺得應該是這樣的,有錯可以 指正)
然後如果你是跟我一樣,在Ubuntu上安裝Qt5.7的話,執行這個程式應該會出現
QSqlDatabase: QODBC driver not loaded
QSqlDatabase: available drivers: QSQLITE QMYSQL QMYSQL3 QPSQL QPSQL7
疑疑,為什麼其他的驅動都有,就是只有我要用的ODBC沒有...
不過基本上我也沒別條路可以連資料庫了,我只好想辦法裝起來
http://doc.qt.io/qt-5.7/sql-driver.html#qodbc
第一件事情當然還是先翻Qt的document,我也沒有完全看懂他到底在講什麼,不過大意 就是預設安裝沒有ODBC的驅動,你得自己解決(乾)
cd $QTDIR/qtbase/src/plugins/sqldrivers/odbc
qmake "INCLUDEPATH+=/usr/local/unixODBC/include" "LIBS+=-L/usr/local/unixODBC/lib -lodbc"
make
他說首先,你得先有可以用的OBDC驅動裝在你的電腦裡面,然後再生成一個動態函式 庫去使用它
這裡就不教怎麼裝ODBC了,沒有很難
不過我在qmake,make時,不知道為何他就是會出現某些標頭檔有出問題,一直編譯不過
我大概花了一天多在編這個東西,後來還跑到Windows上去試,全部都失敗
後來我就放棄官網的document了
(其實你會發現官網的東西很多都很雷,像是上面那個要cd進的路徑跟Qt5.7根本不太一 樣,他也一直沒有更新)
http://adamcavendish.is-programmer.com/posts/40431.html
後來我是看到這篇,這個人是要用mySQL的驅動來連資料庫,可是他媽的明明那個.so檔 好好的,卻不能用
基本上接下來你可以用幾個動作來稿懂,為什麼這些so檔會有問題用不了
1.在文章裡面有幾個路徑你可以自己去看看,其實for mySQL跟for OBDC的動態函式庫
你在你的電腦裡面都找的到,可以直接拉近Qt裡面用
不過會失敗!
很大一個原因是你可能有更新Qt或是你的驅動,或是你Qt給你的動態函式庫根本就是舊 版的
這時候要做的事情,文章裡面是叫你去抓相對應你正在使用的Qt版本的原始碼,然後試 試看把那個so檔編出來
這是可行的!文章裡面的確有成功
不過我沒有XD,要有些小步驟
unpack it and go to qtbase/src/plugins/sqldrivers/mysql/ directory
>> qmake
>> make
他的步驟是這樣,這樣就可以找到你的so擋了
不過有個問題,我在編的時候會失敗!
為什麼呢,後來是發現
你用的原始碼版本正確,可是qmake版本也會影響= =
你可以用 qmake --version來查看你的qmake版本
嗯嗯 出來是4.xx版,很明顯可能會有問題
你可以加上一個flag
qmake -qt=qt5 --version
結果我顯示是5.5.1版...
這代表其實你裝Qt的時候,他並不會連command line 的qmake指令也一起更新,我也不知 道我到底怎麼裝到qmake 5.5.1版本的
但是,至少你用的Qt creator的qmake是5.7版的吧!!!
(可以用文章一開始程式碼的compile version來確認)
所以應該可以用這個qmake來編你的so檔
解法:
Qt5.7->工具->選項->建製並執行->Qt Versions
可以看到我使用的編譯器叫做Qt 5.7.0 GCC 64bit
位置在 /home/bj/Develop/DevelopTools/Qt/5.7/gcc_64/bin/qmake
接下來也很簡單,你就重新進入原始碼的odbc資料夾,
/home/bj/Develop/DevelopTools/Qt/5.7/gcc_64/bin/qmake (使用5.7版本的qmake)
make
順利的話你應該就可以在source code的另外一個地方找到你要的so擋了
最後丟進你Qt的安裝目錄的一個地方,就順利完成!!!
曾苔眠的學習記錄隨筆
2016年6月26日 星期日
2016年6月18日 星期六
從買新電腦到重灌完一條龍教學(1)-先灌windows
前言:
之前有說要灌windows + Ubuntu雙系統,至於為什麼是先灌windows呢
這邊用我完全沒考證過的經驗來解釋
基本上你要把電腦開機可以分成幾個階段
一開始會先進BIOS,你可能從來沒看過,因為通常預設會跳過這個階段
(BIOS我的理解是寫死在主機板上的基礎程式)
接下來,因為你的電腦可能有很多個作業系統,你要讓一個作業系統跑起來
並不是滑鼠右鍵點他就會動了,各種不同的作業系統,在主機板上用的指令,執行方式
肯定大不相同,所以我們想用哪個作業系統開機前,都要先boot它
windows的開機驅動叫做windows boot manager
ubuntu好像沒有特別講叫做啥名字,但是你在選單上選Ubuntu也會經過boot這個動作
body:
幹,前言講太多了,總之我們先把windows10的映像檔抓下來吧
學校的windows10檔案名稱叫做Win10_Cht_64Bit.iso,你作業系統要灌來源來自哪裡我管不 著,總共3,8G,要等1小時載完,因為我原本打算按了下載之後就跑去睡覺,
所以我就順便按了ubuntu-16.04-desktop-amd64.iso(Ubuntu的映像檔)
Visual_Studio_Pro_2015_Cht_32bit.iso(vs2015)
Office_2016_Pro_Plus_Cht_64Bit.iso(office2016)
這些我自己都會用到,反正要睡一覺先存起來等win10裝完,再一起裝
在等待下載的時間,就來介紹一個概念吧!
你會注意到,我們下載的檔案,副檔名都是.iso,這到底是什麼檔案類型呢?
(通常中文都稱作光碟映像檔)
再解釋之前,大家可以先想想幾個問題
我們都知道,作業系統基本上是你跑任何軟體的核心,然後也跟你儲存資料有很大的影 響
所以我們對作業系統最大的要求是什麼?
沒錯,就是要快,而且要穩!
你不會希望你copy一個500mb的東西就要等半小時,也不想要整天windows都動不動就變 慢當機
要如何達到這些點呢,我們的做法是
再安裝作業系統時,我們找一塊固定,連續的磁碟空間來裝他,這樣你每次要讀系統 時,都只要在固定的地方讀就行了
(假設你的電腦有A~F磁區,你並不會想要你的windows boot manager50%裝在A磁區, 30%裝在B磁區,20%裝在C磁區吧,這樣實際也許還是跑得起來的,但是速度跟風險都 會很不理想)
而映像檔格式,就是專門存要放在一整塊連續磁碟空間的軟體,舉例而言就是作業系統
(一次全部下載完還要五個小時,下一篇再繼續講灌作業系統的概念)
之前有說要灌windows + Ubuntu雙系統,至於為什麼是先灌windows呢
這邊用我完全沒考證過的經驗來解釋
基本上你要把電腦開機可以分成幾個階段
一開始會先進BIOS,你可能從來沒看過,因為通常預設會跳過這個階段
(BIOS我的理解是寫死在主機板上的基礎程式)
接下來,因為你的電腦可能有很多個作業系統,你要讓一個作業系統跑起來
並不是滑鼠右鍵點他就會動了,各種不同的作業系統,在主機板上用的指令,執行方式
肯定大不相同,所以我們想用哪個作業系統開機前,都要先boot它
windows的開機驅動叫做windows boot manager
ubuntu好像沒有特別講叫做啥名字,但是你在選單上選Ubuntu也會經過boot這個動作
body:
幹,前言講太多了,總之我們先把windows10的映像檔抓下來吧
學校的windows10檔案名稱叫做Win10_Cht_64Bit.iso,你作業系統要灌來源來自哪裡我管不 著,總共3,8G,要等1小時載完,因為我原本打算按了下載之後就跑去睡覺,
所以我就順便按了ubuntu-16.04-desktop-amd64.iso(Ubuntu的映像檔)
Visual_Studio_Pro_2015_Cht_32bit.iso(vs2015)
Office_2016_Pro_Plus_Cht_64Bit.iso(office2016)
這些我自己都會用到,反正要睡一覺先存起來等win10裝完,再一起裝
在等待下載的時間,就來介紹一個概念吧!
你會注意到,我們下載的檔案,副檔名都是.iso,這到底是什麼檔案類型呢?
(通常中文都稱作光碟映像檔)
再解釋之前,大家可以先想想幾個問題
我們都知道,作業系統基本上是你跑任何軟體的核心,然後也跟你儲存資料有很大的影 響
所以我們對作業系統最大的要求是什麼?
沒錯,就是要快,而且要穩!
你不會希望你copy一個500mb的東西就要等半小時,也不想要整天windows都動不動就變 慢當機
要如何達到這些點呢,我們的做法是
再安裝作業系統時,我們找一塊固定,連續的磁碟空間來裝他,這樣你每次要讀系統 時,都只要在固定的地方讀就行了
(假設你的電腦有A~F磁區,你並不會想要你的windows boot manager50%裝在A磁區, 30%裝在B磁區,20%裝在C磁區吧,這樣實際也許還是跑得起來的,但是速度跟風險都 會很不理想)
而映像檔格式,就是專門存要放在一整塊連續磁碟空間的軟體,舉例而言就是作業系統
(一次全部下載完還要五個小時,下一篇再繼續講灌作業系統的概念)
從買新電腦到重灌完一條龍教學(0)-前言
前言的前言:
最近因為工作需要買了一台三萬的桌機,
對我這種一直都是用低階筆電的人,這台電腦對我而言的效能根本就是爆表,
正好有機會來從0開始灌一台電腦,就想來寫個教學。
前言:
在電腦時電腦店會問你要不要作業系統,因為學校有買教育版,所以我就說免了
本教學的暫定目標為灌完win10 + Ubuntu雙系統,之後有需要可能也會加其他東西
最近因為工作需要買了一台三萬的桌機,
對我這種一直都是用低階筆電的人,這台電腦對我而言的效能根本就是爆表,
正好有機會來從0開始灌一台電腦,就想來寫個教學。
前言:
在電腦時電腦店會問你要不要作業系統,因為學校有買教育版,所以我就說免了
本教學的暫定目標為灌完win10 + Ubuntu雙系統,之後有需要可能也會加其他東西
訂閱:
文章 (Atom)