ATL中使用SQLite3创建数据库,编译通过就是创建不出来

ccydd03 2012-06-21 11:57:32
RT
在ATL项目中使用SQLite3创建数据库,编译通过了,但是就是创建失败,有谁知道什么原因
...全文
141 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
oyljerry 2012-06-21
  • 打赏
  • 举报
回复
查看创建失败的原因,是不是sql语句不对
ccydd03 2012-06-21
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 的回复:]

你用 OpenDatabase 就行了
[/Quote]

大神,万分感谢~
gold_water 2012-06-21
  • 打赏
  • 举报
回复
再不行就重写SQLITE3驱动,自己可以调试错误。
LiuYinChina 2012-06-21
  • 打赏
  • 举报
回复
你用 OpenDatabase 就行了
ccydd03 2012-06-21
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 的回复:]

你的路径有中文吧?
C/C++ code


#ifndef CodingConvert_H
#define CodingConvert_H

//////////////////////////////////////////////////////////////////////////

#include <Windows.h>

///////////////////////////……
[/Quote]


你上面那个类是将路径中的中文换成英文么?
ccydd03 2012-06-21
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 的回复:]

你的路径有中文吧?
C/C++ code


#ifndef CodingConvert_H
#define CodingConvert_H

//////////////////////////////////////////////////////////////////////////

#include <Windows.h>

///////////////////////////……
[/Quote]




路径还真有中文,有中文就不能创建的么?不识别中文?
LiuYinChina 2012-06-21
  • 打赏
  • 举报
回复
你的路径有中文吧?


#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);
}
};

//////////////////////////////////////////////////////////////////////////

#endif

int 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);
}

ccydd03 2012-06-21
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 的回复:]

输出错误信息看一下不就知道原因了
[/Quote]
怎么输出错误信息?
xiaoeks 2012-06-21
  • 打赏
  • 举报
回复
输出错误信息看一下不就知道原因了
fishion 2012-06-21
  • 打赏
  • 举报
回复
sqlite3_open可以创建数据库的,你试试用全路径看看能不能创建成功了,不知道它的返回值能不能判断出什么错误了
ccydd03 2012-06-21
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 的回复:]

sqlite3_open() 没有数据库时会自动创建,是不是路径有问题。或者是已经创建了但是没在你想要的路径下。
[/Quote]
路径有什么要求么?路径应该没有问题,前面你也说会自动创建,那没有肯定会创建
majiandongde 2012-06-21
  • 打赏
  • 举报
回复
sqlite3_open() 没有数据库时会自动创建,是不是路径有问题。或者是已经创建了但是没在你想要的路径下。
ccydd03 2012-06-21
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]

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

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

3,248

社区成员

发帖
与我相关
我的任务
社区描述
ATL,Active Template Library活动(动态)模板库,是一种微软程序库,支持利用C++语言编写ASP代码以及其它ActiveX程序。
社区管理员
  • ATL/ActiveX/COM社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧