问题场景(一):怎样在vs中引入.dll.lib
方法一:
这里我将要用的.dll和.lib放在一个文件中
(1)先在资源文件中引入.lib
(2)在属性配置中将工作目录改为.lib和.dill所在目录下
方法二:
(1)在项目属性中附加库目录
(2)在附加依赖项中添加所用的.lib
(3)再将所有要用到的.dll文件添加到运行目录下
问题场景(2): 宏重定义
1>c:\program files (x86)\microsoft sdks\windows\v7.0a\include\ws2def.h(91): warning C4005: “AF_IPX”: 宏重定义
1> c:\program files (x86)\microsoft sdks\windows\v7.0a\include\winsock.h(460) : 参见“AF_IPX”的前一个定义
1>c:\program files (x86)\microsoft sdks\windows\v7.0a\include\ws2def.h(131): warning C4005: “AF_MAX”: 宏重定义
1> c:\program files (x86)\microsoft sdks\windows\v7.0a\include\winsock.h(479) : 参见“AF_MAX”的前一个定义
1>c:\program files (x86)\microsoft sdks\windows\v7.0a\include\ws2def.h(168): warning C4005: “SO_DONTLINGER”: 宏重定义
1> c:\program files (x86)\microsoft sdks\windows\v7.0a\include\winsock.h(402) : 参见“SO_DONTLINGER”的前一个定义
1>c:\program files (x86)\microsoft sdks\windows\v7.0a\include\ws2def.h(212): error C2011: “sockaddr”:“struct”类型重定义
问题原因:
在引入的头文件中windows.h 包含的(winsock.h 与 WinSock2.h包含的(ws2def.h)有重定义的部分。
解决方法:
将winsock2.h写在windows.h前面。
因为windows.h里面有些东西要靠一些宏定义来预编译,否则取默认值,所以这些宏定义要在包含windows.h前面定义,而关于winsock的一些定义包含在winsock2.h里面。
如果先windows 后winsock2 那么windows里面已经按默认定义了一些东西,但又遇到winsock2,有些东西就会冲突,
问题场景(3): 如何让VS 控制台后台运行
在main函数之前加入:
//隐藏 控制台窗口
#pragma comment(linker, "/subsystem:\"windows\" /entry:\"mainCRTStartup\"")
注意:此方法仅仅适用于vs 2003以上版本,已经经过验证。因为
#pragma comment是vs特有的,而不是c++的标准。
问题场景(4): QSqlQuery::exec: database not open
问题原因:
如果我们仅仅只有一个连接,那么系统默认将QSqlQuery关联到了默认的唯一的数据库连接上了。也正因如此,我们遇上了QSqlQuery::exec: database not open的问题。
解决方法一:
sql_query=new QSqlQuery(database_);//注意必须在考虑是不是没有建立连接就直接使用QSqlQuery实例了?
问题场景(5): QSqlQuery::prepare: database not open
问题原因:
考虑是不是没有建立连接就直接使用QSqlQuery实例了?
注意:QSqlQuery必须在QSqlDatabase建立连接之后再实例化
解决方法一:
//判断是否存在这个连接
if (QSqlDatabase::contains("qt_sql_default_connection"))
{
//设置为默认连接
database_ = QSqlDatabase::database("qt_sql_default_connection");/
}
//强制指定数据库并且必须在QSqlDatabase建立连接之后
sql_query=new QSqlQuery(database_)
问题场景(6): SQLite插入数据失败
问题原因:
创建的数据表应该和插入数据数据表的参数个数一致。
QString create_sql = "create table member (id int primary key, name varchar(30))"; //创建数据表
QString insert_sql = "insert into member values(?,?)"; //插入数据