Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. International
  3. Chinese
  4. QT FoxPro连接求助
Forum Updated to NodeBB v4.3 + New Features

QT FoxPro连接求助

Scheduled Pinned Locked Moved Unsolved Chinese
4 Posts 3 Posters 2.0k Views
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • F Offline
    F Offline
    fangnan
    wrote on last edited by
    #1

    使用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();
    

    感激不尽

    joeQJ 1 Reply Last reply
    0
    • F fangnan

      使用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();
      

      感激不尽

      joeQJ Offline
      joeQJ Offline
      joeQ
      wrote on last edited by
      #2

      @fangnan 你好,朋友,欢迎;

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

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

      Good luck.

      Just do it!

      F 1 Reply Last reply
      0
      • joeQJ joeQ

        @fangnan 你好,朋友,欢迎;

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

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

        Good luck.

        F Offline
        F Offline
        fangnan
        wrote on last edited by
        #3

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

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

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

        1 Reply Last reply
        0
        • jiancaiyangJ Offline
          jiancaiyangJ Offline
          jiancaiyang
          wrote on last edited by
          #4

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

          我们自己的论坛:http://qtdream.com
          擅长三维角色仿真动画。

          1 Reply Last reply
          0

          • Login

          • Login or register to search.
          • First post
            Last post
          0
          • Categories
          • Recent
          • Tags
          • Popular
          • Users
          • Groups
          • Search
          • Get Qt Extensions
          • Unsolved