• 7462阅读
  • 13回复

还是连不上数据库,是否和Opensource有关? [复制链接]

上一主题 下一主题
离线honsrx
 
只看楼主 倒序阅读 楼主  发表于: 2008-04-19
— 本帖被 XChinux 执行加亮操作(2008-04-20) —
数据库课程的实验,助教给了一大堆MFC的例程,我觉得太丑,就自己用Qt做,结果一直提示说driver not loaded,并且显示available drivers为空,我检查了目录,各个dll都好好的啊,自己又重编译了一遍src\plugins\sqldrivers下面的dll,还是一个都找不到,请问是为什么呢?太奇怪了!
是不是opensource版本就不支持数据库呢?貌似不是啊,我把每个driver都编译好了啊。
不过QApplication::libraryPath()却还是返回空
而且QApplication::addLibraryPath()一用就出现内存错误,可以通过编译,但是一运行就崩了……
请各位给出个主意吧!
在线XChinux

只看该作者 1楼 发表于: 2008-04-19
楼主用的是什么数据库?
二笔 openSUSE Vim N9 BB10 XChinux@163.com 网易博客 腾讯微博
承接C++/Qt、Qt UI界面、PHP及预算报销系统开发业务
离线honsrx
只看该作者 2楼 发表于: 2008-04-19
我先用Oracle9i,在windows的ODBC管理器里已连接成功,但程序中不行;后来又想用sqlite,但还是老问题,driver not loaded……
在线XChinux

只看该作者 3楼 发表于: 2008-04-20
odbc和sqlite默认带着的。
driver not loaded出现是因为程序找不到插件在哪里。
你需要:
1、在QT及PATH环境变量所设定的条件下执行程序
或者
2、在自己的程序中指定插件目录
或者
3、使用qt.conf配置文件
或者
4、将插件编译到QtSql模块中去,而不使用插件(configure时使用-qt-sql-odbc -qt-sql-sqlite)
二笔 openSUSE Vim N9 BB10 XChinux@163.com 网易博客 腾讯微博
承接C++/Qt、Qt UI界面、PHP及预算报销系统开发业务
离线simonetta
只看该作者 4楼 发表于: 2008-04-20
除了配置之外, 可以把代码贴上来看看, 最近刚好在搞oracle, 那天用qt试了一下, 效果不错, 顺便测试了一下lob的读取, 应该都没问题。

另外还搞了一下两个db并存时的测试(一个oracle,一个sqlite), 发现函数调用时, 如QSqlQuery声明中, 必须用QSqlDatabase::database()来索引数据库, 而不能用addDatabase返回的数据库变量来区分数据库。 这点使用的时候要注意一下。
我的blog
http://blog.csdn.net/solotek97/
离线honsrx
只看该作者 5楼 发表于: 2008-04-20
代码如下,省掉了#include行:
int main(int argc, char *argv[])
{
    QFile file("err.txt");
    file.open(QIODevice::WriteOnly);
    QDataStream out(&file);
//    QApplication::addLibraryPath("E:\QtDev\4.3.4\plugins");
                      ~~~~这行加上就出现错误,可以编译,不能运行!
    QStringList avlLib = QApplication::libraryPaths();
    out << avlLib;
                        ~~~~~~这行输出的是空!奇怪
    QSqlDatabase db = QSqlDatabase::addDatabase("QODBC", "Sen");
                        ~~~~~~~显示QODBC driver not loaded, 并且available drivers为空
    db.setHostName("Sen");
    db.setDatabaseName("Sen");
    db.setUserName("system");
    db.setPassword("system");

    if (!db.open()) {
        cout << "Fail to connect database!" << endl;
        return 0;
    }

    db = QSqlDatabase::database("Sen");
    QStringList connectionNames = QSqlDatabase::connectionNames();
    /*out << connectionNames;*/
    cout << "Data Base OK!" << endl;

    QSqlQuery q(db);
                    //以下所有行均打印出0,表示未成功执行
    cout << q.exec("drop table Movies") << endl;
    cout << q.isActive() << endl;
    cout << q.exec("drop table Names");
    cout << q.exec("create table Movies (id integer primary key, Title varchar, Director varchar, Rating number)");
    cout << q.exec("insert into Movies values (0, 'Metropolis', 'Fritz Lang', '8.4')");
    cout << q.exec("insert into Movies values (1, 'Nosferatu, eine Symphonie des Grauens', 'F.W. Murnau', '8.1')");
    cout << q.exec("insert into Movies values (2, 'Bis ans Ende der Welt', 'Wim Wenders', '6.5')");
    cout << q.exec("insert into Movies values (3, 'Hardware', 'Richard Stanley', '5.2')");
    cout << q.exec("insert into Movies values (4, 'Mitchell', 'Andrew V. McLaglen', '2.1')");
    cout << q.exec("create table Names (id integer primary key, Firstname varchar, Lastname varchar, City varchar)");
    cout << q.exec("insert into Names values (0, 'Sala', 'Palmer', 'Morristown')");
    cout << q.exec("insert into Names values (1, 'Christopher', 'Walker', 'Morristown')");
    cout << q.exec("insert into Names values (2, 'Donald', 'Duck', 'Andeby')");
    cout << q.exec("insert into Names values (3, 'Buck', 'Rogers', 'Paris')");
    cout << q.exec("insert into Names values (4, 'Sherlock', 'Holmes', 'London')");
   
    cout << "Create Table OK!" << endl;

    q.exec("SELECT * FROM Movies");
    cout << q.next() << " " << q.at() << endl;
    cout << q.isSelect () << endl;
    cout << "Check Result!" << endl;
    while (q.next()) {
        cout << q.value(0).toInt() << endl;
    }

    db.close();
    QSqlDatabase::removeDatabase("Sen");
    return 0;
}
离线honsrx
只看该作者 6楼 发表于: 2008-04-20
编译到模块后,是否还能在未安装Qt的机器采用提供dll的方式上运行?
谢谢您!

引用第3楼XChinux于2008-04-20 10:30发表的  :
odbc和sqlite默认带着的。
driver not loaded出现是因为程序找不到插件在哪里。
你需要:
1、在QT及PATH环境变量所设定的条件下执行程序
或者
.......
在线XChinux

只看该作者 7楼 发表于: 2008-04-20
1、将对应数据库支持编译到QtSql模块中去后,就不用再带插件了。
2、addLibraryPath()函数使用路径E:\QtDev\4.3.4\plugins本身就不正确,应该用E:\\QtDev\\4.3.4\\plugins或者E:/QtDev/4.3.4/plugins的形式。
二笔 openSUSE Vim N9 BB10 XChinux@163.com 网易博客 腾讯微博
承接C++/Qt、Qt UI界面、PHP及预算报销系统开发业务
离线honsrx
只看该作者 8楼 发表于: 2008-04-20
路径改了E:/QtDev/4.3.4/plugins,但运行时还是一开始就崩溃……
我是用vc6的nmake编译的,不知道有没有关系?
现在又装了一个,QMAKESPEC改成了新的目录,试着用mingw编译,configure过了后,再打make的时候提示出错,看了路径发现是因为使用vc6的stl库出错了,我把环境变量都该横Mingw目录的,但编译时用的还是vc6的stl库,所以总是导致出错无法完成编译。请问怎样能更改默认使用的stl呢?
引用第7楼XChinux于2008-04-20 19:08发表的  :
1、将对应数据库支持编译到QtSql模块中去后,就不用再带插件了。
2、addLibraryPath()函数使用路径E:QtDev4.3.4plugins本身就不正确,应该用E:\QtDev\4.3.4\plugins或者E:/QtDev/4.3.4/plugins的形式。
在线XChinux

只看该作者 9楼 发表于: 2008-04-21
看看INCLUDE、LIB相关的环境变量设置。
二笔 openSUSE Vim N9 BB10 XChinux@163.com 网易博客 腾讯微博
承接C++/Qt、Qt UI界面、PHP及预算报销系统开发业务
离线honsrx
只看该作者 10楼 发表于: 2008-04-21
环境变量没有问题,一开始都加上了,后来又反复检查了……
唉,正在犹豫要不要重新装系统了,,呵呵
引用第9楼XChinux于2008-04-21 08:26发表的  :
看看INCLUDE、LIB相关的环境变量设置。
离线honsrx
只看该作者 11楼 发表于: 2008-04-22
这些变量都设置的没有问题啊,检查了N遍了……
现在在考虑要不要重新装系统……
现在不论是odbc,还是sqlite都显示driver not loaded,郁闷啊
引用第9楼XChinux于2008-04-21 08:26发表的  :
看看INCLUDE、LIB相关的环境变量设置。
离线傻猫
只看该作者 12楼 发表于: 2008-04-22
呵呵 刚刚搞定数据库实验 也被驱动搞了几个晚上 你可以参考下

显式加载插件试试看
//QApplication::addLibraryPath("plugins");//<-----------------------------------------为了发布 把plugins文件路径要添加新路径
QPluginLoader sqlPlugin("plugins\\sqldrivers\\qsqlmysql4.dll");
    if(! sqlPlugin.load())
            QMessageBox::information(NULL,"error",sqlPlugin.errorString (),QMessageBox::Ok);

在main.cpp中加上 查看报错信息 再进一步处理

我是用opensource+msvc2005开发的
-------------------------------
不常在
有事短消息或者到我blog讨论http://hi.baidu.com/ning_cat
已经没用qt作开发了。。。:-(
离线傻猫
只看该作者 13楼 发表于: 2008-04-22
补充说明下
1, 上面是显式load mysql的驱动 你用其他数据库要做相应的修改
2, debug和release的驱动不一样 自己要看
3,lib和dll都要在,不然可能出现is not a valid plugin的错误  (这个昨天被搞的半死不活的....)

建议检查
1,驱动是否编译正确了 (看qtdemo里面的sqlBrowser,看他能找到几个驱动,能找到说明是可以用的)
2,环境配置
3,个人认为 添加QApplication::addLibraryPath("plugins"); 程序出错  这边可能是问题的关键
-------------------------------
不常在
有事短消息或者到我blog讨论http://hi.baidu.com/ning_cat
已经没用qt作开发了。。。:-(
快速回复
限100 字节
 
上一个 下一个