CB2009 TADOQuery->Close()即产生异常. "Invalid Pointer Operation"

BeRoy 2008-12-16 08:25:15
图新鲜,用CB2009做了个小程序,用ADO连ACCSEE.结果出了个莫名其妙的错误...
代码:



DB_RET __fastcall TdbmGlobal::DBGetUserAccByName(char* User,char *strAcc)
{

int len=strlen(User);
char *pBuffE=new char[len*2+2];
char *pBuffD=new char[len*2+2];
//加密字串
GEncryObj->GetEStrByPassKey8(User,len,pBuffE);
DB_RET Ret;
UnicodeString Sql;

Sql="SELECT OPR_ACC FROM OPERATORS WHERE (OPR_NAME = \'"+UnicodeString(pBuffE)+"\')";

qryGetUserAccByName->SQL->Clear();
qryGetUserAccByName->SQL->Add(Sql);
qryGetUserAccByName->Open();

if(qryGetUserAccByName->RecordCount<1)
{
//没有此用户
Ret=DB_ERR_USER;
}
else
{
strcpy(pBuffE,qryGetUserAccByName->FieldByName("OPR_ACC")->AsString.t_str() );
int nLen=strlen(pBuffE);
//解密字串
GEncryObj->GetDStrByPassKey8(pBuffE,nLen,pBuffD);

strcpy(strAcc,pBuffD);
Ret=DB_ERR_OK;
}
qryGetUserAccByName->Close();// 到了这里就报错,ShowMessage(exception.Message)="Invalid Pointer Operation";
delete []pBuffE;
delete []pBuffD;
return Ret;
}

...全文
244 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
wwwzxl 2008-12-25
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 e_board 的回复:]
要用strcpy吧,只有ansistring才可以直接赋值
[/Quote]顶
wwwzxl 2008-12-25
  • 打赏
  • 举报
回复
up
e_board 2008-12-24
  • 打赏
  • 举报
回复
strAcc =AnsiString(AAAA);
e_board 2008-12-24
  • 打赏
  • 举报
回复
要用strcpy吧,只有ansistring才可以直接赋值
tjg5202 2008-12-22
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 CppFile 的回复:]
会不会是unicode的问题呢?2009好像特别难用,一会unicode,一会Ansistring的,让人迷惑啊
[/Quote]up
CppFile 2008-12-20
  • 打赏
  • 举报
回复
会不会是unicode的问题呢?2009好像特别难用,一会unicode,一会Ansistring的,让人迷惑啊
ooily 2008-12-19
  • 打赏
  • 举报
回复
ding
BeRoy 2008-12-19
  • 打赏
  • 举报
回复

//经过摸索,这样不会出错.
DB_RET __fastcall TdbmGlobal::DBGetUserAccByName(char* User,AnsiString &strAcc)
{

int len=strlen(User);
char *pBuffE=new char[len*2+2];
char *pBuffD=new char[len*2+2];
//加密字串
//GEncryObj->GetEStrByPassKey8(User,len,pBuffE);
DB_RET Ret;
AnsiString Sql;
Sql="SELECT OPR_ACC FROM OPERATORS WHERE (OPR_NAME = '2714c01bc69d3909')";
//Sql="SELECT OPR_ACC FROM OPERATORS WHERE (OPR_NAME = \'"+AnsiString(pBuffE)+"\')";
qryGetUserAccByName->SQL->Clear();
qryGetUserAccByName->SQL->Add(Sql);
qryGetUserAccByName->Open();
if(qryGetUserAccByName->RecordCount<1)
{
//没有此用户
Ret=DB_ERR_USER;
}
else
{
char AAAA[256];
strcpy(AAAA,qryGetUserAccByName->FieldByName("OPR_ACC")->AsString.c_str() );
//int nLen=strlen(pBuffE);
//解密字串
//GEncryObj->GetDStrByPassKey8(pBuffE,nLen,pBuffD);
strAcc =AAAA;
Ret=DB_ERR_OK;
}

qryGetUserAccByName->Close();
delete []pBuffE;
delete []pBuffD;

return Ret;
}



//但是这样做就会出错.
DB_RET __fastcall TdbmGlobal::DBGetUserAccByName(char* User,AnsiString &strAcc)
{

int len=strlen(User);
char *pBuffE=new char[len*2+2];
char *pBuffD=new char[len*2+2];
//加密字串
//GEncryObj->GetEStrByPassKey8(User,len,pBuffE);
DB_RET Ret;
AnsiString Sql;
Sql="SELECT OPR_ACC FROM OPERATORS WHERE (OPR_NAME = '2714c01bc69d3909')";
//Sql="SELECT OPR_ACC FROM OPERATORS WHERE (OPR_NAME = \'"+AnsiString(pBuffE)+"\')";
qryGetUserAccByName->SQL->Clear();
qryGetUserAccByName->SQL->Add(Sql);
qryGetUserAccByName->Open();
if(qryGetUserAccByName->RecordCount<1)
{
//没有此用户
Ret=DB_ERR_USER;
}
else
{
char AAAA[256];
strcpy(pBuffE,qryGetUserAccByName->FieldByName("OPR_ACC")->AsString.c_str() );
//int nLen=strlen(pBuffE);
//解密字串
//GEncryObj->GetDStrByPassKey8(pBuffE,nLen,pBuffD);
strAcc ="asdf";
Ret=DB_ERR_OK;
}

qryGetUserAccByName->Close();
delete []pBuffE;
delete []pBuffD;

return Ret;
}

Waiting4you 2008-12-17
  • 打赏
  • 举报
回复
楼主试试先把代码简化至只有这几行,看看会不会出错

qryGetUserAccByName->SQL->Clear();
qryGetUserAccByName->SQL->Add("SELECT OPR_ACC FROM OPERATORS");
qryGetUserAccByName->Open();
qryGetUserAccByName->Close();

如果还出错,那么...等update吧-_-
qqlpp 2008-12-17
  • 打赏
  • 举报
回复
友情up
BeRoy 2008-12-17
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 lhfde 的回复:]
qryGetUserAccByName->Close();
放在qryGetUserAccByName->SQL->Clear();
前面看看。
[/Quote]
无用

[Quote=引用 1 楼 thwen0101 的回复:]
一般是释放内存出错 ,试试把后面两句放到它前面
[/Quote]
无用

[Quote=引用 3 楼 jasonnbfan 的回复:]
qryGetUserAccByName 你连接到数据源了么...
[/Quote]
呵呵,我数据都查到了,肯定是连了的撒
jasonnbfan 2008-12-17
  • 打赏
  • 举报
回复
qryGetUserAccByName 你连接到数据源了么...
lhfde 2008-12-16
  • 打赏
  • 举报
回复
qryGetUserAccByName->Close();
放在qryGetUserAccByName->SQL->Clear();
前面看看。
TripH0101 2008-12-16
  • 打赏
  • 举报
回复
一般是释放内存出错 ,试试把后面两句放到它前面

1,178

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder 数据库及相关技术
社区管理员
  • 数据库及相关技术社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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