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连接求助
Qt 6.11 is out! See what's new in the release blog

QT FoxPro连接求助

Scheduled Pinned Locked Moved Unsolved Chinese
4 Posts 3 Posters 2.2k 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