• 5458阅读
  • 9回复

qt使用QSqlQuery如何在SQL SERVER 2005中创建一个表 [复制链接]

上一主题 下一主题
离线pan356
 
只看楼主 倒序阅读 楼主  发表于: 2011-06-11
QSqlDatabase db = QSqlDatabase::addDatabase("QODBC");
   db.setHostName("CHINA-E84436998");
   QString dsn = QString::fromLocal8Bit
    ("DRIVER={SQL SERVER};SERVER=CHINA-E84436998;DATABASE=SMUimageDB;uid=pan;pwd=123");
      db.setDatabaseName(dsn);
      db.setUserName("pan");
      db.setPassword("pan");
   if(!db.open()) {
    QMessageBox::critical(0,QLabel::trUtf8("数据库连接失败"),db.lastError().text());
    return -1;
   }
//上面连接数据成功

QSqlQuery query;
query.exec("CREATE TABLE pictures ("
  "ImageID INT PRIMARY KEY AUTOINCREMENT, "
  "ImageName VARCHAR(10) , "
  "fromID INT NOT NULL, "
  "path varbinary(MAX) NOT NULL");

此处用代码创建一个新的pictures表失败,提示:
[Microsoft][ODBC SQL Server Driver][SQL Server]对象名 'pictures' 无效。 [Microsoft][ODBC SQL Server Driver][SQL Server]无法预定义语句。"
到底是上面意思?为什么创建失败?

调试时,直接跳过创建表的代码,query.exec结果返回false
离线alexltr

只看该作者 1楼 发表于: 2011-06-11
最后那行是不是少了一个右括号???
我不从事IT,只是喜欢Qt。
我不是程序员,只是与程序有缘。
我写程序,只是为了让工作变得简单有序!

                      ----  一个一直在入门的编程学习者
离线pan356
只看该作者 2楼 发表于: 2011-06-12
没有,这是对的,编译没有报错。
我加了括号后反而报错了
离线alexltr

只看该作者 3楼 发表于: 2011-06-12
MAX是预定义的常量? 不可以放在SQL字符串里吧。
我不从事IT,只是喜欢Qt。
我不是程序员,只是与程序有缘。
我写程序,只是为了让工作变得简单有序!

                      ----  一个一直在入门的编程学习者
离线alexltr

只看该作者 4楼 发表于: 2011-06-12
另外的一个问题可能出现在AUTOINCREMENT这里。
好像不同的数据库这个关键词是不一样的。
我不从事IT,只是喜欢Qt。
我不是程序员,只是与程序有缘。
我写程序,只是为了让工作变得简单有序!

                      ----  一个一直在入门的编程学习者
离线pan356
只看该作者 5楼 发表于: 2011-06-13
回复alexltr
上述两个均没有错误, varbinary(MAX)是SQL中的数据类型之一
离线alexltr

只看该作者 6楼 发表于: 2011-06-13
那你的問題是否已經解決了?
我不从事IT,只是喜欢Qt。
我不是程序员,只是与程序有缘。
我写程序,只是为了让工作变得简单有序!

                      ----  一个一直在入门的编程学习者
离线pan356
只看该作者 7楼 发表于: 2011-06-14
没有
离线alexltr

只看该作者 8楼 发表于: 2011-06-14
query.exec("CREATE TABLE pictures ("
  "ImageID INT PRIMARY KEY , "
  "ImageName VARCHAR(10) , "
  "fromID INT NOT NULL, "
  "path varbinary(80) NOT NULL)");

我按照上面的代碼試了可以建立pictures表.
我不从事IT,只是喜欢Qt。
我不是程序员,只是与程序有缘。
我写程序,只是为了让工作变得简单有序!

                      ----  一个一直在入门的编程学习者
离线pan356
只看该作者 9楼 发表于: 2011-06-15
果然可以,谢谢LS,原来是引号前少个了括号,这样居然不报错
快速回复
限100 字节
 
上一个 下一个