急救啊~~~ 关于查询sqlite数据库的问题

yeefa 2011-02-23 05:33:36
我现在在用C++查询sqlite数据库,运行到
if(sqlite3_prepare16(con.db, sql,-1, &this->stmt, (const void**)&tail)!=SQLITE_OK)就出错了,但错误的原因找不出来
cSql=L"SELECT * FROM t_province";
//cSql=L"SELECT * FROM T_AREA";

这里有两个语句,用第二个的时候查询就没有问题
但用第一个就报错了

在sqlite的查询分析器里面查询是没有问题的

两个表的表结构如下:
T_AREA
--------------------
区号 名称(中) 名称(繁体) 名称(英)
-------------------------------------


t_province

编号 名称(中) 名称(繁体) 名称(英)
---------------------------------------


源码:
[code=C]/C++

CString GetProvinceList(int SysVersion)
{
CString cSql;
CString cResult;
wstring Name;
sqlite3_reader rd;

cResult.Append(L"<Results>");

if (SysVersion==3)
{
cResult.Append(L"<Result Name='**ALL**' />");
}
else
{
cResult.Append(L"<Result Name='**全部**' />");
}

cSql=L"SELECT * FROM t_province";
//cSql=L"SELECT * FROM T_AREA";

try
{
sqlite3_connection con(dbFile);
sqlite3_command cmd(con,cSql);
rd=cmd.executereader();

while(rd.read())
{
if(SysVersion==1)
{
Name=rd.getstring16(0);

}else if(SysVersion==2)
{
Name=rd.getstring16(1);

}else if(SysVersion==3)
{
Name=rd.getstring16(2);
}

cResult.Append(L"<Result ");
cResult.AppendFormat(L"Name='%s' ", _variant_t(Name.c_str()).bstrVal);
cResult.Append(L"/>");
}

rd.close();
}catch(Error *e)
{
rd.close();
cResult=L"";
}
cResult.Append(L"</Results>");
return cResult;
}[/code]
...全文
185 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
yeefa 2011-02-24
  • 打赏
  • 举报
回复
谢谢 ptrunner、qq120848369、justkk,谢谢你们
pstrunner 2011-02-24
  • 打赏
  • 举报
回复
google一下,这个不清楚。

[Quote=引用 13 楼 yeefa 的回复:]

发现问题:

在调试环境下运行的时候用的是查询结果是以前用过的数据库,应该是在缓存里面,但是实在环境中的时候用现用的却是现在的数据

我想把以前的缓清除掉,怎么清除啊

开发工具是vs2008
[/Quote]
yeefa 2011-02-23
  • 打赏
  • 举报
回复
什么叫内存数据库呢?
qq120848369 2011-02-23
  • 打赏
  • 举报
回复
内存数据库么,那就真不知道怎么刷掉了.
yeefa 2011-02-23
  • 打赏
  • 举报
回复
发现问题:

在调试环境下运行的时候用的是查询结果是以前用过的数据库,应该是在缓存里面,但是实在环境中的时候用现用的却是现在的数据

我想把以前的缓清除掉,怎么清除啊

开发工具是vs2008
yeefa 2011-02-23
  • 打赏
  • 举报
回复
返回值是:
SQLITE_ERROR 1 /* SQL error or missing database */
yeefa 2011-02-23
  • 打赏
  • 举报
回复
中的 0x7c812afb 处未处理的异常: Microsoft C++ 异常: 内存位置 0x032ff818 处的 sqlite3x::database_error
justkk 2011-02-23
  • 打赏
  • 举报
回复
没用过sqlite
出错的时候,通过sqlite3_prepare16 函数的返回值能不能得到点有用的信息..
pstrunner 2011-02-23
  • 打赏
  • 举报
回复
报什么错呢?

[Quote=引用 5 楼 yeefa 的回复:]

[code=C]/C++
sqlite3_command::sqlite3_command(sqlite3_connection &con, const wchar_t *sql) : con(con),refs(0) {
const wchar_t *tail=NULL;
if(sqlite3_prepare16(con.db, sql,-1, &this->stmt, ……
[/Quote]
yeefa 2011-02-23
  • 打赏
  • 举报
回复
SELECT * FROM t_province

就换了一个表名字

SELECT * FROM T_AREA

其它什么内容都不变,查询的时候就是报错

好急啊,有没有人可以帮帮忙啊
yeefa 2011-02-23
  • 打赏
  • 举报
回复
上面这个是出错的地方
pstrunner 2011-02-23
  • 打赏
  • 举报
回复
word也可以看啊。

[Quote=引用 4 楼 yeefa 的回复:]

你是说语句里面是否有宽字符吗?

怎么看呢?
[/Quote]
yeefa 2011-02-23
  • 打赏
  • 举报
回复
[code=C]/C++
sqlite3_command::sqlite3_command(sqlite3_connection &con, const wchar_t *sql) : con(con),refs(0) {
const wchar_t *tail=NULL;
if(sqlite3_prepare16(con.db, sql,-1, &this->stmt, (const void**)&tail)!=SQLITE_OK)
throw database_error(con);

this->argc=sqlite3_column_count(this->stmt);
}
[/code]
yeefa 2011-02-23
  • 打赏
  • 举报
回复
你是说语句里面是否有宽字符吗?

怎么看呢?
pstrunner 2011-02-23
  • 打赏
  • 举报
回复
sql里是否有宽字符?
yeefa 2011-02-23
  • 打赏
  • 举报
回复
大小写都换过了,还是不行啊
justkk 2011-02-23
  • 打赏
  • 举报
回复
与大小写没有关系吧

64,637

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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