QT FoxPro连接求助



  • 使用QODBC连接FoxPro自由目录,能够连接并操作已经存在的数据库,但是新建数据库不行,是权限问题或者我漏掉了什么吗,那该如何解决?我是新手,对QT不熟,弄了很久也没有找到解决方案,这是学校要做的一个东西,哎,一言难尽。代码像下面这样,

    QSqlDatabase db = QSqlDatabase::addDatabase("QODBC");
    QString dsn = "Driver={Microsoft Visual FoxPro Driver};SourceType=DBF;SourceDB=D:/test/;Exclusive=No;Collate=Machine;NULL=NO;DELETED=NO;BACKGROUNDFETCH=NO;";
     db.setDatabaseName(dsn);
    
     if(!db.open()){ // 这里成功
        QMessageBox::critical(0, QObject::tr("Database Error"),db.lastError().text());
        return;
     } else {
             QMessageBox::about(0,"a","succeed");
     }
    
     QSqlQuery query(db);
    
     QString sql = QString::fromLocal8Bit("create table person "
                                           "(id integer primary key, "
                                           "firstname varchar(20), "
                                           "lastname varchar(30), "
                                          "age integer)");
    
     //query.prepare(sql);
     if(query.exec(sql)) { // 这里失败
         QMessageBox::about(0,"a","create table succeed");
     } else {
         QMessageBox::critical(0, QObject::tr("Database Error"),db.lastError().text()); 
     }
    
     query.prepare("INSERT INTO person(id, firstname, lastname,age) VALUES (:id, :forename, :surname,:age)");
     query.bindValue(":id", 1001);
     query.bindValue(":firstname", "Bart");
     query.bindValue(":lastname", "Simpson");
     query.bindValue(":age", 24);
    
     query.exec("INSERT INTO person(id,firstname,lastname,age) VALUES(13,\"fang\", \"nan\", 23)");
     query.exec("select * from person");
     while(query.next()) {
         QMessageBox::about(0,"a",query.value(0).toString());
     }
    
     db.close();
    

    感激不尽



  • @fangnan 你好,朋友,欢迎;

    Qt的数据库这部分,目前本人还没有接触,我只能提供一下解决问题的思路,你可以尝试一下:

    1. 数据库打开成功,可是创建表的时候,发生错误。 sql语句是否正确, 可以在数据库的控制台中 ,执行sql语句,进行测试;
    2. sql语句正确的话,那么exec执行错误,那么具体的错误信息是什么? 请分析具体的错误信息。
    3. 是否正确的使用了sql语句;
    4. 请参考网络的其他实例,进行确认自己的用法;
    5. 就是题主的思考,是系统权限问题吗。

    Good luck.



  • @joeQ 谢谢,好像是因为这种连接方式下不能使用PRIMARY KEY,还有关键字我也写错了,貌似并没有varchar,而是只有char。使用PRIMARY KEY也能创建表,但是会有一点问题。

    其实我其实尝试过很多次,用过query.exec("CREATE TABLE Person(a int)")类似这样的来测试,但是不行,刚才可以了,我不知道是否是其他一些非代码问题,或者说背后还有一些默认的设置或依赖,突然成功了我都感到很懵。 总之,我提问时给出的代码有上面说到的那些问题,但是我尝试过各种方式,用过没有那些问题的代码但都失败了。

    最后,我想多少还有一些SQL Server或者MySQL语句的蜜汁自信的影响。或许是因为我对这种“过时”的不得不做的不耐烦的报复,哈哈。。。我想没有几个人会再来用这种东西。



  • 这种更多的是在数据库层面解决,是否语法错误什么的,和Qt关系很小。


Log in to reply
 

Looks like your connection to Qt Forum was lost, please wait while we try to reconnect.