首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VC/MFC >

SQL语句在Access里面运行正确,在pDb->ExecuteSQL(strSql)运行不正确,为啥?解决思路

2012-02-04 
SQL语句在Access里面运行正确,在pDb-ExecuteSQL(strSql)运行不正确,为啥?SELECTDISTINCT学号,姓名INTOnew

SQL语句在Access里面运行正确,在pDb->ExecuteSQL(strSql)运行不正确,为啥?
SELECT   DISTINCT   学号,   姓名   INTO   newtable   FROM   sce2007   WHERE   班级   like   '231010* '
在access里面运行正确
但是在应用程序里面,只生成表,无记录.....
如果去掉WHERE   子句则可以.............


CString   zhuan= "Table "+zhuanye;
CString   slike=zhuanye+ "** ";
CDatabase   *pDb=new   CDatabase;
pDb-> Open( "Appraisement ");
CString   strSql= "SELECT   DISTINCT   学号,   姓名   INTO   "+zhuan+ "   FROM   sce2007   WHERE   班级   like   '231010* '   ";
pDb-> ExecuteSQL(strSql);
UpdateData(false);
pDb-> Close();

还有我在这里添加try   catch   语句老是出错,哪位哥哥能给个demo?谢谢


同时请教:
try
{

CString   strSql= "SELECT   DISTINCT   学号,   姓名   INTO   "+zhuan+ "   FROM   sce2007   ";
pDb-> ExecuteSQL(strSql);

}
catch(CDBException,e)
{
CString   strMsg;
strMsg.LoadString(IDS_EXECUTE_SQL_FAILED);
strMsg+=strSql;
}

pDb-> Close();

输出如下:
------   已启动生成:   项目:   Appraisement,   配置:   Debug   Win32   ------

正在编译...
sNew.cpp
d:\VC   work\Appraisement\sNew.cpp(89)   :   error   C2061:   语法错误   :   标识符“e”
d:\VC   work\Appraisement\sNew.cpp(89)   :   error   C2316:   “CDBException”   :   无法作为析构函数捕获,或者复制构造函数不可访问,或同时出现这两种情况
d:\VC   work\Appraisement\sNew.cpp(92)   :   error   C2065:   “IDS_EXECUTE_SQL_FAILED”   :   未声明的标识符
d:\VC   work\Appraisement\sNew.cpp(93)   :   error   C2065:   “strSql”   :   未声明的标识符
d:\VC   work\Appraisement\sNew.cpp(93)   :   error   C2593:   “operator   +=”不明确
d:\Program   Files\Microsoft   Visual   Studio   .NET   2003\Vc7\atlmfc\include\cstringt.h(1082):   可能是“ATL::CStringT <BaseType,StringTraits>   &ATL::CStringT <BaseType,StringTraits> ::operator   +=(const   VARIANT   &)”
with
[
BaseType=char,
StringTraits=StrTraitMFC_DLL <char>
]
d:\Program   Files\Microsoft   Visual   Studio   .NET   2003\Vc7\atlmfc\include\cstringt.h(1075):   或   “ATL::CStringT <BaseType,StringTraits>   &ATL::CStringT <BaseType,StringTraits> ::operator   +=(wchar_t)”
with
[
BaseType=char,
StringTraits=StrTraitMFC_DLL <char>
]
d:\Program   Files\Microsoft   Visual   Studio   .NET   2003\Vc7\atlmfc\include\cstringt.h(1068):   或   “ATL::CStringT <BaseType,StringTraits>   &ATL::CStringT <BaseType,StringTraits> ::operator   +=(unsigned   char)”
with
[
BaseType=char,
StringTraits=StrTraitMFC_DLL <char>
]
d:\Program   Files\Microsoft   Visual   Studio   .NET   2003\Vc7\atlmfc\include\cstringt.h(1061):   或   “ATL::CStringT <BaseType,StringTraits>   &ATL::CStringT <BaseType,StringTraits> ::operator   +=(char)”
with
[
BaseType=char,
StringTraits=StrTraitMFC_DLL <char>
]
d:\Program   Files\Microsoft   Visual   Studio   .NET   2003\Vc7\atlmfc\include\cstringt.h(1054):   或   “ATL::CStringT <BaseType,StringTraits>   &ATL::CStringT <BaseType,StringTraits> ::operator   +=(ATL::CSimpleStringT <BaseType,t_bMFCDLL> ::PCYSTR)”


with
[
BaseType=char,
StringTraits=StrTraitMFC_DLL <char> ,
t_bMFCDLL=true
]
d:\Program   Files\Microsoft   Visual   Studio   .NET   2003\Vc7\atlmfc\include\cstringt.h(1041):   或   “ATL::CStringT <BaseType,StringTraits>   &ATL::CStringT <BaseType,StringTraits> ::operator   +=(ATL::CSimpleStringT <BaseType,t_bMFCDLL> ::PCXSTR)”
with
[
BaseType=char,
StringTraits=StrTraitMFC
_DLL <char> ,
t_bMFCDLL=true
]
d:\Program   Files\Microsoft   Visual   Studio   .NET   2003\Vc7\atlmfc\include\cstringt.h(1027):   或   “ATL::CStringT <BaseType,StringTraits>   &ATL::CStringT <BaseType,StringTraits> ::operator   +=(const   ATL::CStringT <BaseType,StringTraits> ::CThisSimpleString   &)”
with
[
BaseType=char,
StringTraits=StrTraitMFC_DLL <char>
]
试图匹配参数列表“(CString,   'unknown-type ')”时

生成日志保存在“file://d:\VC   work\Appraisement\Debug\BuildLog.htm”中
Appraisement   -   5   错误,0   警告



//   sNew.cpp   :   实现文件
//

#include   "stdafx.h "
#include   "Appraisement.h "
#include   "sNew.h "
#include   ".\snew.h "
#include   "afxdb.h "
#include   "AppraisementSet.h "

多谢!!



[解决办法]
1,select不到东西,那应该是like的问题,具体的原因就不知道了,我不熟悉access。只知道sql server的like是百分号作为通配符。
2,把try改成:
try
{
}
catch(...)
{
}

如果要精细,可以先catch com错误。
[解决办法]
catch(CDBException,e)//逗号改成空格
{

}

[解决办法]
建议楼主使用CString.Format,字符串那样加很难看的。呵呵

热点排行