RT
在ATL项目中使用SQLite3创建数据库,编译通过了,但是就是创建失败,有谁知道什么原因

解决方案 »

  1.   

    查看创建失败的原因,是不是sql语句不对
      

  2.   


    是创建数据库失败,不是创建表,就是用sqlite3_open()这个函数么,但是就是创建不出来
      

  3.   

    sqlite3_open() 没有数据库时会自动创建,是不是路径有问题。或者是已经创建了但是没在你想要的路径下。
      

  4.   

    sqlite3_open可以创建数据库的,你试试用全路径看看能不能创建成功了,不知道它的返回值能不能判断出什么错误了
      

  5.   

    你的路径有中文吧?
    #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);
    }
      

  6.   

    你用 OpenDatabase 就行了
      

  7.   

    再不行就重写SQLITE3驱动,自己可以调试错误。