Unsolved 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的数据库这部分,目前本人还没有接触,我只能提供一下解决问题的思路,你可以尝试一下:
- 数据库打开成功,可是创建表的时候,发生错误。 sql语句是否正确, 可以在数据库的控制台中 ,执行sql语句,进行测试;
- sql语句正确的话,那么
exec
执行错误,那么具体的错误信息是什么? 请分析具体的错误信息。 - 是否正确的使用了sql语句;
- 请参考网络的其他实例,进行确认自己的用法;
- 就是题主的思考,是系统权限问题吗。
Good luck.
-
@joeQ 谢谢,好像是因为这种连接方式下不能使用PRIMARY KEY,还有关键字我也写错了,貌似并没有varchar,而是只有char。使用PRIMARY KEY也能创建表,但是会有一点问题。
其实我其实尝试过很多次,用过query.exec("CREATE TABLE Person(a int)")类似这样的来测试,但是不行,刚才可以了,我不知道是否是其他一些非代码问题,或者说背后还有一些默认的设置或依赖,突然成功了我都感到很懵。 总之,我提问时给出的代码有上面说到的那些问题,但是我尝试过各种方式,用过没有那些问题的代码但都失败了。
最后,我想多少还有一些SQL Server或者MySQL语句的蜜汁自信的影响。或许是因为我对这种“过时”的不得不做的不耐烦的报复,哈哈。。。我想没有几个人会再来用这种东西。
-
这种更多的是在数据库层面解决,是否语法错误什么的,和Qt关系很小。