访问数据库问题?

现在还是人类 2008-05-08 04:51:16
为什么就查询不出数据呢?
#include "stdio.h"
#include "stdafx.h"
#include "windows.h"
#import "C:\Program Files\Common Files\System\ado\msado20.tlb" no_namespace rename("EOF", "adoEOF")
HRESULT ComInit();
int APIENTRY WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow)
{
_ConnectionPtr pCn;
_RecordsetPtr pRs;

_variant_t vtEmpty;
_variant_t vRsinfo;
long ccc;

ComInit();
pCn.CreateInstance(__uuidof(Connection));
pRs.CreateInstance(__uuidof(Recordset));


pCn->Open("DRIVER={Microsoft Access Driver (*.mdb)};DBQ=C:\\VcADO\\users.mdb","","",-1);
if(pCn->State==0){
MessageBox(0,"连接数据库失败。","连接失败",MB_OK);
}else{
MessageBox(0,"状态值"+pCn->State,"连接成功",MB_OK);
vtEmpty="select * from Userinfo";
pRs->Open(vtEmpty, pCn.GetInterfacePtr(),adOpenDynamic,adLockOptimistic,adCmdText);
ccc=pRs->RecordCount;
//最大问题的地方,数据库里明明有数据,但cccc却是0
if(ccc>=1){
//这里也有问题,下面两句都有数据类型问题
MessageBox(0,"查询到"+ccc+"条数据","查询成功",MB_OK);
MessageBox(0,"查询内容:"+vRsinfo=pRs->Fields->GetItem("UserName")->GetValue,"查询成功",MB_OK);
pRs->Close;
}else{
MessageBox(0,"没有查询到数据.","查询失败",MB_OK);
}
pCn->Close;
}
return 0;
}


//COM 使用时初始化
HRESULT ComInit()
{
HRESULT hr = S_OK; // 默认返回值
if FAILED(CoInitialize(NULL)) // COM 初始化调用
{
CoUninitialize();
hr = E_UNEXPECTED;
}
return hr;
}

还有,应为不是MFC的,所以没有CString来用,那怎么转换其他类型为字符串类型呢?
我这样式过没用
char* pp;
ltoa(ccc,pp,10);

哪位好心的高手帮我改改好吗?万分感谢
...全文
290 28 打赏 收藏 转发到动态 举报
写回复
用AI写文章
28 条回复
切换为时间正序
请发表友善的回复…
发表回复
现在还是人类 2008-10-16
  • 打赏
  • 举报
回复

#include "stdafx.h"
#include "stdio.h"
#include "windows.h"
#include "string.h"
#import "C:\Program Files\Common Files\System\ado\msado20.tlb" no_namespace rename("EOF", "adoEOF")
HRESULT ComInit();
int APIENTRY WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow)
{
// TODO: Place code here.
_ConnectionPtr pCn;
_RecordsetPtr pRs;


_variant_t vtEmpty;
_variant_t vRsinfo;
long ccc;
char jj[255];
int j;

ComInit();
pCn.CreateInstance(__uuidof(Connection));
pRs.CreateInstance(__uuidof(Recordset));

//pCn->Open("PROVIDER=MSDASQL;dsn=bbq;uid=;pwd=;", "", "", -1);
//pCn->Open("PROVIDER=Microsoft.Jet.OLEDB.4.0;Data Source=C:\\VcADO\\users.mdb", "", "", -1);
pCn->Open("DRIVER={Microsoft Access Driver (*.mdb)};DBQ=C:\\VcADO\\users.mdb","","",-1);
if(pCn->State==0){
MessageBox(0,"连接数据库失败。","连接失败",MB_OK);
}else{
//MessageBox(0,"状态值"+pCn->State,"连接成功",MB_OK);
vtEmpty="select * from 用户信息表";
pRs->Open(vtEmpty, pCn.GetInterfacePtr(),adOpenStatic,adLockOptimistic,adCmdText);
ccc=pRs->RecordCount;
if(ccc>=1){
//j=sprintf(jj,"查询到%d条数据",ccc);
//MessageBox(0,jj,"查询成功",MB_OK);
vRsinfo=pRs->Fields->GetItem("姓名")->GetValue();
j=sprintf(jj,"查询到:%s",(char*)(_bstr_t)vRsinfo);
MessageBox(0,jj,"查询成功",MB_OK);
pRs->Close();
}else{
MessageBox(0,"没有查询到数据.","查询失败",MB_OK);
}
pCn->Close();
}
return 0;
}


//COM 使用时初始化
HRESULT ComInit()
{
HRESULT hr = S_OK; // 默认返回值
if FAILED(CoInitialize(NULL)) // COM 初始化调用
{
CoUninitialize();
hr = E_UNEXPECTED;
}
return hr;
}

zhouzhenyan 2008-05-08
  • 打赏
  • 举报
回复
客气。共同进步,呵呵。
现在还是人类 2008-05-08
  • 打赏
  • 举报
回复
谢谢各位,特别是zhouzhenyan ,非常感谢
zhouzhenyan 2008-05-08
  • 打赏
  • 举报
回复
先将_variant_t转化成CString。
(char*)_bstr_t(pRs->Fields->GetItem("UserName")->GetValue())
现在还是人类 2008-05-08
  • 打赏
  • 举报
回复
终于搞定了,哎,好苦闷
char jj[255];
int j;
j=sprintf(jj,"查询内容:%s",(char*)(_bstr_t)pRs->Fields->GetItem("UserName")->GetValue());
MessageBox(0,jj,"查询成功",MB_OK);
现在还是人类 2008-05-08
  • 打赏
  • 举报
回复
26个大小写字母和0到9的数字还有所有的标点符号我都试验过了,百分号后没有一个可以正常显示数据的,郁闷呀
该怎么弄呀?代码如下:

char jj[255];
int j;
j=sprintf(jj,"查询内容:%s",pRs->Fields->GetItem("UserName")->GetValue());
MessageBox(0,jj,"查询成功",MB_OK);

现在还是人类 2008-05-08
  • 打赏
  • 举报
回复
那百分号后面的该怎么写?用 V 不对,用什么呢?
zhouzhenyan 2008-05-08
  • 打赏
  • 举报
回复
晕。pRs->Fields->GetItem("UserName")->PutValue("value")错了。GetValue
现在还是人类 2008-05-08
  • 打赏
  • 举报
回复
不行,一样报错
error C2664: 'sprintf' : cannot convert parameter 3 from 'void' to '...'
zhouzhenyan 2008-05-08
  • 打赏
  • 举报
回复
char* jj;怎么能这么写?没分配空间啊!

可以写成这样:char jj[1024];
kingmax54212008 2008-05-08
  • 打赏
  • 举报
回复
11
现在还是人类 2008-05-08
  • 打赏
  • 举报
回复
pRs->Fields->GetItem("UserName")->PutValue("value")转换不了呀

char* jj;
int j;
j=sprintf(jj,"查询内容:%v",pRs->Fields->GetItem("UserName")->PutValue("value"));
MessageBox(0,jj,"查询成功",MB_OK);

出错
zhouzhenyan 2008-05-08
  • 打赏
  • 举报
回复
#include "stdio.h"
#include "stdafx.h"
#include "windows.h"

写错了,应该为:

#include "stdafx.h"
#include "stdio.h"
#include "windows.h"

这样就OK了。
现在还是人类 2008-05-08
  • 打赏
  • 举报
回复
谁帮我写个转换的代码来看看,就下面的来写

MessageBox(0,"查询到"+ccc+"条数据","查询成功",MB_OK);
MessageBox(0,"查询内容:"+pRs->Fields->GetItem("UserName")->PutValue("value"),"查询成功",MB_OK);
现在还是人类 2008-05-08
  • 打赏
  • 举报
回复
我的代码第一行就是
zhouzhenyan 2008-05-08
  • 打赏
  • 举报
回复
#include <stdio.h>
现在还是人类 2008-05-08
  • 打赏
  • 举报
回复
不行,出现error C2065: 'sprintf' : undeclared identifier错误
zhouzhenyan 2008-05-08
  • 打赏
  • 举报
回复
用sprintf格式化字符串,具体用法查MSDN
现在还是人类 2008-05-08
  • 打赏
  • 举报
回复
什么游标?没看懂你说什么?
scq2099yt 2008-05-08
  • 打赏
  • 举报
回复
将游标设置为客户端游标
加载更多回复(7)

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

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