ATL中使用SQLite3创建数据库,编译通过就是创建不出来 RT在ATL项目中使用SQLite3创建数据库,编译通过了,但是就是创建失败,有谁知道什么原因 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 查看创建失败的原因,是不是sql语句不对 是创建数据库失败,不是创建表,就是用sqlite3_open()这个函数么,但是就是创建不出来 sqlite3_open() 没有数据库时会自动创建,是不是路径有问题。或者是已经创建了但是没在你想要的路径下。 sqlite3_open可以创建数据库的,你试试用全路径看看能不能创建成功了,不知道它的返回值能不能判断出什么错误了 你的路径有中文吧?#ifndef CodingConvert_H#define CodingConvert_H//////////////////////////////////////////////////////////////////////////#include <Windows.h>//////////////////////////////////////////////////////////////////////////template <DWORD>class CodingConvert{public: // lpszBuf - 目标缓冲区 // lBufLen - 目标缓冲区尺寸 // lpszSrc - 原始码 // 返回值为转换后的目标字节数 static LONG GB2312_2_UTF8(PCHAR lpszBuf, LONG lBufLen, LPCSTR lpszSrc, LONG lSrcLen = 0) { if (0 == lSrcLen) { lSrcLen = lstrlenA(lpszSrc); } LONG j = 0; for (LONG i = 0; i < lSrcLen; ) { if (j >= lBufLen - 1) { break; } if (lpszSrc[i] >= 0) { lpszBuf[j++] = lpszSrc[i++]; } else { USHORT w_c = 0; Gb2312_2_Unicode(&w_c, lpszSrc + i); CHAR tmp[4] = ""; Unicode_2_UTF8(tmp, &w_c); lpszBuf[j+0] = tmp[0]; lpszBuf[j+1] = tmp[1]; lpszBuf[j+2] = tmp[2]; i += 2; j += 3; } } lpszBuf[j] = '\0'; return j; } static LONG UTF8_2_GB2312(PCHAR lpszBuf, LONG lBufLen, LPCSTR lpszSrc, LONG lSrcLen = 0) { if (0 == lSrcLen) { lSrcLen = lstrlenA(lpszSrc); } LONG j = 0; for (LONG i = 0; i < lSrcLen; ) { if (j >= lBufLen - 1) { break; } if (lpszSrc[i] >= 0) { lpszBuf[j++] = lpszSrc[i++]; } else { USHORT w_c = 0; UTF8_2_Unicode(&w_c, lpszSrc + i); CHAR tmp[4] = ""; Unicode_2_GB2312(tmp, w_c); lpszBuf[j+0] = tmp[0]; lpszBuf[j+1] = tmp[1]; i += 3; j += 2; } } lpszBuf[j] = '\0'; return j; }private: static __inline void Gb2312_2_Unicode(PUSHORT lpszDst, LPCSTR lpszSrc) { ::MultiByteToWideChar(CP_ACP, MB_PRECOMPOSED, lpszSrc, 2, (LPWSTR) lpszDst, 1); } static __inline void Unicode_2_UTF8(PCHAR lpszDst, PUSHORT lpszSrc) { PCHAR pChar = (PCHAR) lpszSrc; lpszDst[0] = (0xE0 | ((pChar[1] & 0xF0) >> 4)); lpszDst[1] = (0x80 | ((pChar[1] & 0x0F) << 2)) + ((pChar[0] & 0xC0) >> 6); lpszDst[2] = (0x80 | ( pChar[0] & 0x3F)); } static __inline void UTF8_2_Unicode(PUSHORT lpszDst, LPCSTR lpszSrc) { PCHAR pUChar = (PCHAR) lpszDst; pUChar[1] = ((lpszSrc[0] & 0x0F) << 4) + ((lpszSrc[1] >> 2) & 0x0F); pUChar[0] = ((lpszSrc[1] & 0x03) << 6) + (lpszSrc[2] & 0x3F); } static __inline void Unicode_2_GB2312(PCHAR lpszDst, USHORT uData) { WideCharToMultiByte(CP_ACP, NULL, (LPCWSTR) &uData, 1, lpszDst, sizeof(USHORT), NULL, NULL); }};//////////////////////////////////////////////////////////////////////////#endifint OpenDatabase(LPCSTR pszDBFile, sqlite3 *&pSQLite3){ CHAR szDBFile[MAX_PATH<<2] = { 0 }; CodingConvert<0>::GB2312_2_UTF8(szDBFile, sizeof(szDBFile), pszDBFile); return sqlite3_open(szDBFile, &pSQLite3);} 你用 OpenDatabase 就行了 再不行就重写SQLITE3驱动,自己可以调试错误。 消息路由的一个问题 用vc++, 作opengl实现阴影的小例子,求助!!!!! 运行dsdk9.0里面的例子都出现下面的错误 想实现这样一个程序,需要去学习哪些内容。 求filemon程序的文件过滤驱动源程序工程 进程A把消息钩子安装到了进程B,按理说应该是过滤进程B的消息呀,为什么其他进程的消息也过滤了?奇怪哦~ 为什么变量已经使用了还是会出现变量没引用呢 windows 网络编程,winsock 进程之发消息通信 这是什么冲突??? MFC对话框 求助:球面点三维坐标到二维坐标的转换
是创建数据库失败,不是创建表,就是用sqlite3_open()这个函数么,但是就是创建不出来
#ifndef CodingConvert_H
#define CodingConvert_H//////////////////////////////////////////////////////////////////////////#include <Windows.h>//////////////////////////////////////////////////////////////////////////template <DWORD>
class CodingConvert
{
public:
// lpszBuf - 目标缓冲区
// lBufLen - 目标缓冲区尺寸
// lpszSrc - 原始码
// 返回值为转换后的目标字节数
static LONG GB2312_2_UTF8(PCHAR lpszBuf, LONG lBufLen, LPCSTR lpszSrc, LONG lSrcLen = 0)
{
if (0 == lSrcLen) {
lSrcLen = lstrlenA(lpszSrc);
} LONG j = 0;
for (LONG i = 0; i < lSrcLen; ) {
if (j >= lBufLen - 1) {
break;
}
if (lpszSrc[i] >= 0) {
lpszBuf[j++] = lpszSrc[i++];
}
else {
USHORT w_c = 0;
Gb2312_2_Unicode(&w_c, lpszSrc + i); CHAR tmp[4] = "";
Unicode_2_UTF8(tmp, &w_c);
lpszBuf[j+0] = tmp[0];
lpszBuf[j+1] = tmp[1];
lpszBuf[j+2] = tmp[2];
i += 2;
j += 3;
}
} lpszBuf[j] = '\0';
return j;
}
static LONG UTF8_2_GB2312(PCHAR lpszBuf, LONG lBufLen, LPCSTR lpszSrc, LONG lSrcLen = 0)
{
if (0 == lSrcLen) {
lSrcLen = lstrlenA(lpszSrc);
} LONG j = 0;
for (LONG i = 0; i < lSrcLen; ) {
if (j >= lBufLen - 1) {
break;
}
if (lpszSrc[i] >= 0) {
lpszBuf[j++] = lpszSrc[i++];
}
else {
USHORT w_c = 0;
UTF8_2_Unicode(&w_c, lpszSrc + i); CHAR tmp[4] = "";
Unicode_2_GB2312(tmp, w_c);
lpszBuf[j+0] = tmp[0];
lpszBuf[j+1] = tmp[1];
i += 3;
j += 2;
}
} lpszBuf[j] = '\0';
return j;
}private:
static __inline void Gb2312_2_Unicode(PUSHORT lpszDst, LPCSTR lpszSrc)
{
::MultiByteToWideChar(CP_ACP, MB_PRECOMPOSED, lpszSrc, 2, (LPWSTR) lpszDst, 1);
}
static __inline void Unicode_2_UTF8(PCHAR lpszDst, PUSHORT lpszSrc)
{
PCHAR pChar = (PCHAR) lpszSrc;
lpszDst[0] = (0xE0 | ((pChar[1] & 0xF0) >> 4));
lpszDst[1] = (0x80 | ((pChar[1] & 0x0F) << 2)) + ((pChar[0] & 0xC0) >> 6);
lpszDst[2] = (0x80 | ( pChar[0] & 0x3F));
}
static __inline void UTF8_2_Unicode(PUSHORT lpszDst, LPCSTR lpszSrc)
{
PCHAR pUChar = (PCHAR) lpszDst;
pUChar[1] = ((lpszSrc[0] & 0x0F) << 4) + ((lpszSrc[1] >> 2) & 0x0F);
pUChar[0] = ((lpszSrc[1] & 0x03) << 6) + (lpszSrc[2] & 0x3F);
}
static __inline void Unicode_2_GB2312(PCHAR lpszDst, USHORT uData)
{
WideCharToMultiByte(CP_ACP, NULL, (LPCWSTR) &uData, 1, lpszDst, sizeof(USHORT), NULL, NULL);
}
};//////////////////////////////////////////////////////////////////////////#endifint OpenDatabase(LPCSTR pszDBFile, sqlite3 *&pSQLite3)
{
CHAR szDBFile[MAX_PATH<<2] = { 0 };
CodingConvert<0>::GB2312_2_UTF8(szDBFile, sizeof(szDBFile), pszDBFile);
return sqlite3_open(szDBFile, &pSQLite3);
}