ورود

View Full Version : سوال: نمی توانم از QSqlDataBase استفاده کنم !!



Arman_1367
جمعه 23 دی 1390, 11:09 صبح
با سلام و خسته نباشید.
قبل از هر چیز ممنون از این که وقت می گذارید و این متن رو می خوانید.

دوستان من با زبانهای مختلفی برنامه می نویسم و چند وقتی هست به فکر پورت کردن برنامه های خودم روی Qt شدم. تا اونجا که من سر در اوردم باید برای بر قراری ارتباط با بانک اطلاعاتی درایور آن بانک را در کنار Qt کمپایل کنیم و بعدش می شود از درایور استفاده کرد.حالا مشکل چیست ؟
مشکل این هست که من مجموعه ای از کمپایلر های مختلف دارم و برای کمپایل کردن فرضاً ODBC درایور از دستورات زیر استفاده می کنم :

cd %QTDIR%\src\plugins\sqldrivers\mysql
بعد هم دستور qmake رو اجرا می کنم اما برای اجرای درستور make چون من همزمان هم دلفی هم Vs رو دارم وقتی دستور make رو می زنم نسخه مربوط به دلفی اجرا می شه و خطای زیر رو می دهد :

MAKE Version 5.4 Copyright (c) 1987, 2010 Embarcadero Technologies, Inc.
Fatal: 'FORCE' does not exist - don't know how to make it
خب این مشکل رو توانستم با اجرای دستور زیر حل کنم ( البته فکر کنم باید حل شده باشه :

C:/Qt/2010.05/mingw/bin/mingw32-make.exe
و دستور خروجی زیر را به من داد :

C:/Qt/2010.05/mingw/bin/mingw32-make.exe -f Makefile.Debug all
mingw32-make.exe[1]: Entering directory `C:/Qt/2010.05/qt/src/plugins/sqldrivers
/odbc'
g++ -c -g -frtti -fexceptions -mthreads -Wall -DUNICODE -DQT_LARGEFILE_SUPPORT -
DQT_NO_CAST_TO_ASCII -DQT_NO_CAST_FROM_ASCII -DQT_DLL -DQT_PLUGIN -DQT_SQL_LIB -
DQT_CORE_LIB -DQT_THREAD_SUPPORT -I"..\..\..\..\include\QtCore" -I"..\..\..\..\i
nclude\QtSql" -I"..\..\..\..\include" -I"..\..\..\..\include\ActiveQt" -I"tmp\mo
c\debug_shared" -I"..\..\..\..\mkspecs\win32-g++" -o tmp\obj\debug_shared\main.o
main.cpp
g++ -c -g -frtti -fexceptions -mthreads -Wall -DUNICODE -DQT_LARGEFILE_SUPPORT -
DQT_NO_CAST_TO_ASCII -DQT_NO_CAST_FROM_ASCII -DQT_DLL -DQT_PLUGIN -DQT_SQL_LIB -
DQT_CORE_LIB -DQT_THREAD_SUPPORT -I"..\..\..\..\include\QtCore" -I"..\..\..\..\i
nclude\QtSql" -I"..\..\..\..\include" -I"..\..\..\..\include\ActiveQt" -I"tmp\mo
c\debug_shared" -I"..\..\..\..\mkspecs\win32-g++" -o tmp\obj\debug_shared\qsql_o
dbc.o ..\..\..\sql\drivers\odbc\qsql_odbc.cpp
..\..\..\sql\drivers\odbc\qsql_odbc.cpp: In function 'QString qGetStringData(voi
d*, int, int, bool)':
..\..\..\sql\drivers\odbc\qsql_odbc.cpp:403: warning: comparison between signed
and unsigned integer expressions
..\..\..\sql\drivers\odbc\qsql_odbc.cpp:444: warning: comparison between signed
and unsigned integer expressions
g++ -c -g -frtti -fexceptions -mthreads -Wall -DUNICODE -DQT_LARGEFILE_SUPPORT -
DQT_NO_CAST_TO_ASCII -DQT_NO_CAST_FROM_ASCII -DQT_DLL -DQT_PLUGIN -DQT_SQL_LIB -
DQT_CORE_LIB -DQT_THREAD_SUPPORT -I"..\..\..\..\include\QtCore" -I"..\..\..\..\i
nclude\QtSql" -I"..\..\..\..\include" -I"..\..\..\..\include\ActiveQt" -I"tmp\mo
c\debug_shared" -I"..\..\..\..\mkspecs\win32-g++" -o tmp\obj\debug_shared\moc_qs
ql_odbc.o tmp\moc\debug_shared\moc_qsql_odbc.cpp
windres -i qsqlodbcd_resource.rc -o tmp\obj\debug_shared\qsqlodbcd_resource_res.
o --include-dir=. -DUNICODE -DQT_LARGEFILE_SUPPORT -DQT_NO_CAST_TO_ASCII -DQT_NO
_CAST_FROM_ASCII -DQT_DLL -DQT_PLUGIN -DQT_SQL_LIB -DQT_CORE_LIB -DQT_THREAD_SUP
PORT
g++ -enable-stdcall-fixup -Wl,-enable-auto-import -Wl,-enable-runtime-pseudo-rel
oc -mthreads -Wl -shared -Wl,--out-implib,c:\Qt\2010.05\qt\plugins\sqldrivers\li
bqsqlodbcd4.a -o ..\..\..\..\plugins\sqldrivers\qsqlodbcd4.dll tmp/obj/debug_sha
red/main.o tmp/obj/debug_shared/qsql_odbc.o tmp/obj/debug_shared/moc_qsql_odbc.o
-L"c:\Qt\2010.05\qt\lib" -L"c:\Qt\2010.05\qt\lib" tmp\obj\debug_shared\qsqlodb
cd_resource_res.o -lodbc32 -lQtSqld4 -lQtCored4
Creating library file: c:\Qt\2010.05\qt\plugins\sqldrivers\libqsqlodbcd4. a
mingw32-make.exe[1]: Leaving directory `C:/Qt/2010.05/qt/src/plugins/sqldrivers/
odbc'
C:/Qt/2010.05/mingw/bin/mingw32-make.exe -f Makefile.Release all
mingw32-make.exe[1]: Entering directory `C:/Qt/2010.05/qt/src/plugins/sqldrivers
/odbc'
g++ -c -O2 -frtti -fexceptions -mthreads -Wall -DUNICODE -DQT_LARGEFILE_SUPPORT
-DQT_NO_CAST_TO_ASCII -DQT_NO_CAST_FROM_ASCII -DQT_DLL -DQT_NO_DEBUG -DQT_PLUGIN
-DQT_SQL_LIB -DQT_CORE_LIB -DQT_THREAD_SUPPORT -I"..\..\..\..\include\QtCore" -
I"..\..\..\..\include\QtSql" -I"..\..\..\..\include" -I"..\..\..\..\include\Acti
veQt" -I"tmp\moc\release_shared" -I"..\..\..\..\mkspecs\win32-g++" -o tmp\obj\re
lease_shared\main.o main.cpp
g++ -c -O2 -frtti -fexceptions -mthreads -Wall -DUNICODE -DQT_LARGEFILE_SUPPORT
-DQT_NO_CAST_TO_ASCII -DQT_NO_CAST_FROM_ASCII -DQT_DLL -DQT_NO_DEBUG -DQT_PLUGIN
-DQT_SQL_LIB -DQT_CORE_LIB -DQT_THREAD_SUPPORT -I"..\..\..\..\include\QtCore" -
I"..\..\..\..\include\QtSql" -I"..\..\..\..\include" -I"..\..\..\..\include\Acti
veQt" -I"tmp\moc\release_shared" -I"..\..\..\..\mkspecs\win32-g++" -o tmp\obj\re
lease_shared\qsql_odbc.o ..\..\..\sql\drivers\odbc\qsql_odbc.cpp
..\..\..\sql\drivers\odbc\qsql_odbc.cpp: In function 'QString qGetStringData(voi
d*, int, int, bool)':
..\..\..\sql\drivers\odbc\qsql_odbc.cpp:403: warning: comparison between signed
and unsigned integer expressions
..\..\..\sql\drivers\odbc\qsql_odbc.cpp:444: warning: comparison between signed
and unsigned integer expressions
g++ -c -O2 -frtti -fexceptions -mthreads -Wall -DUNICODE -DQT_LARGEFILE_SUPPORT
-DQT_NO_CAST_TO_ASCII -DQT_NO_CAST_FROM_ASCII -DQT_DLL -DQT_NO_DEBUG -DQT_PLUGIN
-DQT_SQL_LIB -DQT_CORE_LIB -DQT_THREAD_SUPPORT -I"..\..\..\..\include\QtCore" -
I"..\..\..\..\include\QtSql" -I"..\..\..\..\include" -I"..\..\..\..\include\Acti
veQt" -I"tmp\moc\release_shared" -I"..\..\..\..\mkspecs\win32-g++" -o tmp\obj\re
lease_shared\moc_qsql_odbc.o tmp\moc\release_shared\moc_qsql_odbc.cpp
windres -i qsqlodbc_resource.rc -o tmp\obj\release_shared\qsqlodbc_resource_res.
o --include-dir=. -DUNICODE -DQT_LARGEFILE_SUPPORT -DQT_NO_CAST_TO_ASCII -DQT_NO
_CAST_FROM_ASCII -DQT_DLL -DQT_NO_DEBUG -DQT_PLUGIN -DQT_SQL_LIB -DQT_CORE_LIB -
DQT_THREAD_SUPPORT
g++ -enable-stdcall-fixup -Wl,-enable-auto-import -Wl,-enable-runtime-pseudo-rel
oc -Wl,-s -mthreads -Wl -shared -Wl,--out-implib,c:\Qt\2010.05\qt\plugins\sqldri
vers\libqsqlodbc4.a -o ..\..\..\..\plugins\sqldrivers\qsqlodbc4.dll tmp/obj/rele
ase_shared/main.o tmp/obj/release_shared/qsql_odbc.o tmp/obj/release_shared/moc_
qsql_odbc.o -L"c:\Qt\2010.05\qt\lib" -L"c:\Qt\2010.05\qt\lib" tmp\obj\release_s
hared\qsqlodbc_resource_res.o -lodbc32 -lQtSql4 -lQtCore4
Creating library file: c:\Qt\2010.05\qt\plugins\sqldrivers\libqsqlodbc4.a
mingw32-make.exe[1]: Leaving directory `C:/Qt/2010.05/qt/src/plugins/sqldrivers/
odbc'
به هر حال فکر کنم خطایی وجود نداشت برای همین رفتم داخل Qt و بعد از افزودن Qt+=Sql به فایل پروژه و افزودن

#include <QtSql/QODBCDriver>
فایل مربوطه خواستم از دستوری مثل دستور زیر کمپایل بگیرم

QSqlDatabase db=QSqlDatabase::addDatabase("QODBC");
اما حاصل کمپایل خطای زیر هست :

C:/Qt/2010.05/SQLServerTest-build-desktop/../SQLServerTest/mainwindow.cpp:: In member function 'void MainWindow::on_pushButton_clicked()':
error :variable 'QSqlDatabase db' has initializer but incomlete type
error :incomplete type QSqlDatabase userd in nested name specifier
warning :unused variable 'db'

واو فکر کنم سوالم خیلی ابتدایی باشه اما واقعاً توش گیر افتادم :دی

alamate_aoal
جمعه 23 دی 1390, 14:56 عصر
سلام
اینو امتحان کن:
#include <QtSql>

اگر مشکل بر طرف نشد کد اتصال به پایگاه داده رو همینجا درج کن(کامل) .

حامد مصافی
جمعه 23 دی 1390, 15:29 عصر
در فایل pro :

Qt += sql

alamate_aoal
جمعه 23 دی 1390, 16:33 عصر
به نظر میاد این کار رو قبلا کرده:

به هر حال فکر کنم خطایی وجود نداشت برای همین رفتم داخل Qt و بعد از افزودن Qt+=Sql به فایل پروژه و ..

Arman_1367
جمعه 23 دی 1390, 19:44 عصر
دوستان مرسی از پاسخ های خوبتون بلاخره توانستم با بانک اطلاعاتی ارتباط بر قرار کنم.

جالب اینجا بود که من کلیک می کردم روی دکمه اجرا یا دیباگ و نمی تونستم اجرا بگیرم به ذهنم رسید تو ویژوال استودیو قدیمی گاهی که همچین چیزی به وجود می اومد با Clean And Biuld بر طرف می شد تو QtCreator هم همین طور مشکل رفع شد ولی علت دقیق این مشکل رو متوجه نشدم.