如何用ADO执行SQL语句? 用Execute的确是能执行,删除,插入这些都没问题,但是查找怎么办???需要返回数据呀,鬼知道他把数据放哪去了 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 _RecordsetPtr rs;rs->Open() 楼上的具体点好吗?我不大懂,OPEN有哪些参数,分别是干什么用的!谢谢! LZ是否是想获取查询返回的数据集的各个字段值?我是这么做的:================================================== 华丽的分割线 =============================================首先为数据表User单独建一个类(如下)#pragma once#include "icrsint.h" //注意一定要引用这个!!#include "StdAfx.h"class CUsers : public CADORecordBinding{private: //绑定入口宏 BEGIN_ADO_BINDING(CUsers) ADO_VARIABLE_LENGTH_ENTRY2( 1, ::adChar, m_user_name, sizeof(m_user_name), dw_user_nameStatus, TRUE) ADO_VARIABLE_LENGTH_ENTRY2( 2, ::adChar, m_user_pwd, sizeof(m_user_pwd), dw_user_pwdStatus, TRUE) ADO_VARIABLE_LENGTH_ENTRY2( 3, ::adInteger, m_state, 2, dw_stateStatus, TRUE) END_ADO_BINDING()public: CHAR m_user_name[40]; DWORD dw_user_nameStatus; CHAR m_user_pwd[10]; DWORD dw_user_pwdStatus; int m_state; DWORD dw_stateStatus;public: CUsers(void); ~CUsers(void);};================================================== 华丽的分割线 =============================================当然,少不了要声明CUsers类的实例CUsers *m_pUsers;m_pUsers = new CUsers================================================== 华丽的分割线 =============================================然后,在RecordSet对象调用open函数: char sql [1024]; sprintf(sql,"select * from user"); //根据SQL语句打开相应的数据集合 HRESULT hr = this->m_pRecordset->Open( sql, this->m_pConnection.GetInterfacePtr(), adOpenStatic, adLockOptimistic, adCmdText); if (!SUCCEEDED(hr)) { sprintf(msg,"Recordset Open Fail !"); printf("%s\n",msg); return false; }================================================== 华丽的分割线 =============================================接着,将数据集和user表绑定 hr = this->m_pRecordset->QueryInterface( __uuidof(IADORecordBinding), (LPVOID *)&this->m_pADORecordBinding); if (!SUCCEEDED(hr)) { sprintf(msg, "Users Recordset QueryInterface Fail !"); printf("%s\n",msg); return false; } hr = this->m_pADORecordBinding->BindToRecordset(this->m_pUsers); if (!SUCCEEDED(hr)) { sprintf(msg,"Users BindToRecordset Fail !"); printf("%s\n",msg); return false; }================================================== 华丽的分割线 =============================================最后,遍历数据集,取出各条记录: //遍历数据表 while (!scan->m_pRecordset->adEOF) { strncpy(username,m_pUsers->m_user_name,sizeof(m_pUsers->m_user_name); strncpy(password,m_pUsers->m_user_pwd, sizeof(m_pUsers->m_user_pwd); state = m_pUsers->m_state; //取下一条记录 scan->m_pRecordset->MoveNext(); } WSAWaitForMultipleEvents,如何管理多个线程的多个 event? 类的成员变量的地址会不会改变? 调查一下。 有关DDB和DIB的问题 ATTENTATION!支持LOSSLESS压缩的JPEG库 关于vc编译环境和系统设置对编译程序的影响问题!高手请进! 如何截取Dos虚拟机全屏方式下显示的内容 GDI函数怎么画出来的颜色不对?线性宽度是对的 视频文件分割与和并的问题 请问,修改MFC控件的内容时,如何禁止控件发送因修改动作引起的消息? 在98下如何送ATAPI command给USB 光驱? ADO程序运行出现Runtime Error
rs->Open()
public CADORecordBinding
{
private:
//绑定入口宏
BEGIN_ADO_BINDING(CUsers)
ADO_VARIABLE_LENGTH_ENTRY2( 1, ::adChar, m_user_name, sizeof(m_user_name), dw_user_nameStatus, TRUE)
ADO_VARIABLE_LENGTH_ENTRY2( 2, ::adChar, m_user_pwd, sizeof(m_user_pwd), dw_user_pwdStatus, TRUE)
ADO_VARIABLE_LENGTH_ENTRY2( 3, ::adInteger, m_state, 2, dw_stateStatus, TRUE)
END_ADO_BINDING()public:
CHAR m_user_name[40];
DWORD dw_user_nameStatus; CHAR m_user_pwd[10];
DWORD dw_user_pwdStatus; int m_state;
DWORD dw_stateStatus;public:
CUsers(void);
~CUsers(void);
};
================================================== 华丽的分割线 =============================================当然,少不了要声明CUsers类的实例CUsers *m_pUsers;
m_pUsers = new CUsers
================================================== 华丽的分割线 =============================================然后,在RecordSet对象调用open函数: char sql [1024];
sprintf(sql,"select * from user"); //根据SQL语句打开相应的数据集合
HRESULT hr = this->m_pRecordset->Open(
sql,
this->m_pConnection.GetInterfacePtr(),
adOpenStatic,
adLockOptimistic,
adCmdText);
if (!SUCCEEDED(hr))
{
sprintf(msg,"Recordset Open Fail !");
printf("%s\n",msg);
return false;
}
================================================== 华丽的分割线 =============================================接着,将数据集和user表绑定 hr = this->m_pRecordset->QueryInterface( __uuidof(IADORecordBinding), (LPVOID *)&this->m_pADORecordBinding);
if (!SUCCEEDED(hr))
{
sprintf(msg, "Users Recordset QueryInterface Fail !");
printf("%s\n",msg);
return false;
} hr = this->m_pADORecordBinding->BindToRecordset(this->m_pUsers);
if (!SUCCEEDED(hr))
{
sprintf(msg,"Users BindToRecordset Fail !");
printf("%s\n",msg);
return false;
}
================================================== 华丽的分割线 =============================================最后,遍历数据集,取出各条记录: //遍历数据表
while (!scan->m_pRecordset->adEOF)
{
strncpy(username,m_pUsers->m_user_name,sizeof(m_pUsers->m_user_name);
strncpy(password,m_pUsers->m_user_pwd, sizeof(m_pUsers->m_user_pwd);
state = m_pUsers->m_state; //取下一条记录
scan->m_pRecordset->MoveNext();
}