معرفی فریمورک اپلیکیشن نویسی Qt ‏ (16)

یکی از دوستان درمورد چگونگی استفاده از سرورهای SQL مثل MySQL و اوراکل و غیره در Qt پرسیده بودن. این پرسش منجر به تحقیق و تست و درج مطالبی در چند پست در اینمورد شد که خلاصهء مفید اونها رو در این پست ارائه میکنم.

اولا این مطلب از رفرنس کیوت درمورد دیتابیس های پشتیبانی شده توسط کیوت:

The table below lists the drivers included with Qt. Due to license incompatibilities with the GPL, not all of the plugins are provided with the Qt Open Source Edition.

Driver name DBMS
QDB2 IBM DB2 (version 7.1 and above)
QIBASE Borland InterBase
QMYSQL MySQL
QOCI Oracle Call Interface Driver
QODBC Open Database Connectivity (ODBC) – Microsoft SQL Server and other ODBC-compliant databases
QPSQL PostgreSQL (versions 7.3 and above)
QSQLITE2 SQLite version 2
QSQLITE SQLite version 3
QTDS Sybase Adaptive Server

Note: To build a driver plugin you need to have the appropriate client library for your Database Management System (DBMS). This provides access to the API exposed by the DBMS, and is typically shipped with it. Most installation programs also allow you to install “development libraries”, and these are what you need. These libraries are responsible for the low-level communication with the DBMS.

مورد تست دیتابیس MySQL بوده.
ما ابتدا از ODBC برای اتصال به MySQL استفاده میکنیم.
ابتدا درایور ODBC مربوطه را دانلود میکنیم:

درج این آدرس بخاطر این بود که دسترسی به لینک دانلود بخاطر تحریم کمی مشکل بود (نیاز به فیلترشکن)، وگرنه بطور معمول خودتون باید جستجو و نسخهء مناسب رو از مکان مناسب دانلود کنید.
بعد از نصب و انجام تنظیمات ODBC لازم در ویندوز (این بخشها به خود کیوت مربوط نمیشن و توضیح نمیدم)، میتونیم با چنین کد تست ساده و مختصری برقراری اتصال و دسترسی موفق رو بررسی کنیم:

#include <QtSql>
#include <QApplication>
#include <QDebug>

int main(int argc, char *argv[]) {
QApplication app(argc, argv);

QSqlDatabase db = QSqlDatabase::addDatabase("QODBC");
db.setDatabaseName("mysqlxx");
if(!db.open()) {
qDebug("error in opening!");
QSqlError err=db.lastError();
qDebug()<<err.databaseText();
qDebug()<<err.driverText();
return 1;
}
else qDebug("success");

QSqlQuery query;
query.exec("SELECT * FROM counter");

while (query.next()) {
QString c = query.value(0).toString();
qDebug() << c << '\n';
}

qDebug("-------------end---------------\npress Ctrl+C to exit!");

return app.exec();
}

در قسمت setDatabaseName توجه میکنیم که بجای نام دیتابیس اصلی نامی رو که برای data source name در تنظیمات ODBC ویندوز انتخاب کردیم بهش میدیم. ضمنا ظاهرا دیگه نیازی به یوزرنیم و پسورد MySQL هم نبود! (اگر لازم بود به نمونه کد روش بعدی مراجعه کنید).
یادتون باشه به فایل پروژهء این برنامهء تست این دو خط رو هم اضافه کنید:

QT += sql
CONFIG+=console


روش دیگر استفاده از درایور مخصوص خود MySQL هست.

در کیوت احتمالا بخاطر مواردی مثل حجم و غیره (یا مورد ناسازگاری مجوز که گفته)، پلاگین درایور MySQL و کتابخانهء اون بصورت پیشفرض وجود ندارن.
طرز ساخت و استفاده از پلاگین MySQL رو طوری که خودم انجام دادم شرح میدم. توجه کنید که بعضی پارامترها ممکنه برای شما و نسخه هایی که استفاده میکنید تفاوت داشته باشن.

اولا چون من از EasyPHP 2.0b1 برای محیط برنامه نویسی وب روی سیستم خودم استفاده میکردم و میدونیم که EasyPHP شامل وب سرور آپاچی همراه با ماجول PHP، و سرور دیتابیس MySQL هست، خواستم تا از همین نسخه از MySQL که همراه EasyPHP هست استفاده کنم. ضمنا من این نسخه از EasyPHP رو از قبل روی سیستم نصب داشتم و احتمالا الان دیگه قدیمی شده. نکتهء دیگه اینکه اگر شما فقط به یک سرور MySQL نیاز دارید و نه یک محیط برنامه نویسی وب، بهتره فقط یک سرور MySQL رو جداگانه نصب و اجرا کنید؛ استفاده از EasyPHP در اینجا فقط بخاطر این بوده که بنده برنامه نویسی وب هم میکنم و این برنامه از قبل روی سیستمم نصب بوده.
خب اول باید نسخهء MySQL رو بفهمیم. اینکار از راههای مختلفی امکان پذیر هست. احتمالا راحتترین راهش اینه که روی آیکون EasyPHP در تسکبار کلیک راست کرده و گزینهء Administration رو انتخاب کنید که در نتیجه در صفحهء باز شده نسخهء 5.0.27 رو برای من نشون میداد.
حالا باید هدرها و کتابخانه های مختص این نسخه از MySQL رو پیدا و دانلود کنیم.
من نهایتا پس از جستجو از این آدرس دانلودشون کردم:

این آدرس مستقیم رو بعنوان نمونه گذاشتم و ضمنا اینکه بعلت تحریم نیاز به استفاده از روشهایی مثل فیلترشکن برای رسیدن به این آدرس بود.
بعد از دانلود باید برنامهء نصبی رو که داخل فایل زیپ هست اجرا و اجزای MySQL رو نصب کنید (موقع نصب گزینهء Complete رو انتخاب کردم).

حالا اینکارها رو انجام میدیم:
- همهء فایلهای موجود در C:\Program Files\MySQL\MySQL Server 5.0\include رو به E:\Qt2009.05\qt\include کپی کنید.
مسلمه که آدرس محل نصب Qt SDK و MySQL که دانلود کردید ممکنه برای شما متفاوت باشه.
- از آدرس C:\Program Files\MySQL\MySQL Server 5.0\lib\opt فایل libmysql.lib رو به E:\Qt2009.05\qt\lib کپی کنید.
- از دایرکتوری C:\Program Files\MySQL\MySQL Server 5.0\lib\opt فایل libmysql.dll رو به E:\Qt2009.05\qt\bin کپی کنید.
- خط فرمان کیوت رو اجرا کرده و دایرکتوری جاری رو به E:\Qt2009.05\qt\src\plugins\sqldrivers\mysql تغییر بدید.
- فرمان qmake رو اجرا کنید.
- فرمان mingw32-make رو اجرا کنید.

بعد از تمام شدن اجرای این فرمانها کار تمامه!
اگر به دایرکتوری E:\Qt2009.05\qt\plugins\sqldrivers مراجعه کنید باید فایلهای مربوط به MySQL رو ببینید (درمورد مال من، 4 فایل هست که در نام اونها عبارت mysql وجود داره).
این هم یک برنامهء تست خیلی مختصر و ساده:

#include <QtSql>
#include <QApplication>

int main(int argc, char *argv[]) {
QApplication app(argc, argv);

QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");
db.setHostName("localhost");
db.setDatabaseName("database1");
db.setUserName("mysql_username");
db.setPassword("mysql_password");
if(!db.open()) {
qDebug("error in opening!");
return 1;
}
else qDebug("success");

QSqlQuery query;
query.exec("SELECT * FROM table1");

while (query.next()) {
QString c = query.value(0).toString();
qDebug() << c << '\n';
}

qDebug("-------------end---------------\npress Ctrl+C to exit!");

return app.exec();
}

یادتون باشه به فایل پروژهء این برنامهء تست این دو خط رو هم اضافه کنید:

QT += sql
CONFIG+=console

بعد با فرمان qmake و بعد mingw32-make release برنامه رو کامپایل میکنیم (استفاده از release بخاطر بالا بردن سرعت کامپایل و سرعت اجرای برنامه هست).
بعد با فرمان release\test.exe برنامه رو تست میکنیم. البته حتما قبلش باید سرور MySQL درحال اجرا باشه (درمورد بنده یعنی EasyPHP اجرا شده باشه).
حالا فقط یادتون باشه وقتی برنامتون رو میخواید توزیع کنید باید علاوه بر dll های معمول و اونهایی که صریحا درخواست میکنه، حتما اینکارها رو هم انجام بدید:
- یک نسخه از libmysql.dll رو همراه برنامه قرار بدید (در دایرکتوری خود برنامه).
- یک دایرکتوری بنام sqldrivers در دایرکتوری برنامه ایجاد کرده و از آدرس E:\Qt2009.05\qt\plugins\sqldrivers فایل qsqlmysql4.dll رو به داخل این دایرکتوری کپی کنید.

پاسخ دهید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

*

شما می‌توانید از این دستورات HTML استفاده کنید: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>