连接之后并没有自动生成一些和ado相关的类,是正常的么。。。
[http://blog.sina.com.cn/s/blog_610c1cad0100yhrr.html]
// UserData.cpp : implementation file
//
#include "stdafx.h"
#include "LicManage.h"
#include "UserData.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CUserData dialog
#define ACCESSVERSION "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=.\\stb_safety.mdb"
#define INFONUM 20 // 每页20条信息
CUserData::CUserData(CWnd* pParent /*=NULL*/)
: CDialog(CUserData::IDD, pParent)
{
//{{AFX_DATA_INIT(CUserData)
m_keyWord = _T("");
//}}AFX_DATA_INIT
}
void CUserData::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CUserData)
DDX_Control(pDX, IDC_USERINFO, m_userInfo);
DDX_Text(pDX, IDC_KEYWORD, m_keyWord);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CUserData, CDialog)
//{{AFX_MSG_MAP(CUserData)
ON_BN_CLICKED(IDC_REWORK, OnRework)
ON_BN_CLICKED(IDC_DELETE, OnDelete)
ON_BN_CLICKED(IDC_SAVE, OnSave)
ON_WM_CLOSE()
ON_BN_CLICKED(IDC_EXIT, OnExit)
ON_BN_CLICKED(IDC_QUERY, OnQuery)
ON_BN_CLICKED(IDC_ABOVEPAGE, OnAbovepage)
ON_BN_CLICKED(IDC_NEXTPAGE, OnNextpage)
ON_BN_CLICKED(IDC_FIRSTPAGE, OnFirstpage)
ON_BN_CLICKED(IDC_LASTPAGE, OnLastpage)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CUserData message handlers
BOOL CUserData::OnInitDialog()
{
CDialog::OnInitDialog();
// TODO: Add extra initialization here
DWORD styles = m_userInfo.GetExtendedStyle();
m_userInfo.SetExtendedStyle(styles|LVS_EX_FULLROWSELECT|LVS_EX_GRIDLINES|LVS_EX_TRACKSELECT);
m_userInfo.InsertColumn(0,"用户名",LVCFMT_CENTER,70,-1);
m_userInfo.InsertColumn(1,"特征码",LVCFMT_CENTER,150,-1);
m_userInfo.InsertColumn(2,"用户类别",LVCFMT_CENTER,90,-1);
m_userInfo.InsertColumn(3,"申请时间",LVCFMT_CENTER,90,-1);
m_userInfo.InsertColumn(4,"过期时间",LVCFMT_CENTER,90,-1);
m_userInfo.InsertColumn(5,"备注",LVCFMT_CENTER,110,-1);
m_bUpdata = FALSE;
m_nCurPage = 1;
if (!ConnectData())
{
return FALSE;
}
this->Loaddata();
this->UpdataToList(m_nCurPage);
this->ShowPage();
CString str;
str.Format(_T("共%d条记录") ,m_nRecordNum);
GetDlgItem(IDC_RECORDNUM)->SetWindowText(str);
return TRUE; // return TRUE unless you set the focus to a control
// EXCEPTION: OCX Property Pages should return FALSE
}
// 显示第几页数据
void CUserData::Loaddata()
{
HRESULT hr;
_variant_t vUserName , vCraCode, vUserType ,vAppTime ,vOverTime ,vRemark;
//CString id ,usertype ,cracode ,apptime ,overtime;
int nItem, nSubItem;
nItem = 0;
nSubItem = 1;
CString sql = "SELECT * FROM stb_safety";
if (0 == m_pConn->State)
{
AfxMessageBox("数据库尚未连接,不能导出数据!");
return ;
}
try{
hr = m_pRecordset->Open(_variant_t(sql) , _variant_t((IDispatch *)m_pConn, true), adOpenStatic,adLockOptimistic ,adCmdText);
}
catch(_com_error e) //捕捉异常
{
CString errormessage;
errormessage.Format("导出数据失败!");
AfxMessageBox(errormessage); //显示错误信息
}
/*
if (SUCCEEDED(hr))
{
m_pRecordset->Move(nPage * INFONUM ,_variant_t((long)adBookmarkFirst)); // 从第一条记录往下移动N条记录
}
else
{
AfxMessageBox("导出数据失败!");
return;
}*/
/*
m_userInfo.DeleteAllItems();
while (!m_pRecordset->adoEOF) {
// 这里为什么是adoEOF而不是EOF呢?还记得rename("EOF","adoEOF")这一句吗?
vUserName = m_pRecordset->GetCollect("UserName"); //取得第1列的值,从0开始计数,你也可以直接给出列的名称
vUserType = m_pRecordset->GetCollect("UserType"); //取得username字段的值
vCraCode = m_pRecordset->GetCollect("CraCode");
vAppTime = m_pRecordset->GetCollect("AppTime");
vOverTime = m_pRecordset->GetCollect("OverTime");
vRemark = m_pRecordset->GetCollect("remark");
if (vUserName.vt != VT_NULL)
{
m_userInfo.InsertItem(nItem, (LPCTSTR)(_bstr_t)vUserName );
}
else
{
m_userInfo.InsertItem(nItem, "" );
}
if(vUserType.vt != VT_NULL && vCraCode.vt != VT_NULL && vCraCode.vt != VT_NULL && vAppTime.vt != VT_NULL)
{
m_userInfo.SetItemText(nItem, nSubItem++, (LPCTSTR)(_bstr_t)vCraCode );
m_userInfo.SetItemText(nItem, nSubItem++, (LPCTSTR)(_bstr_t)vUserType );
m_userInfo.SetItemText(nItem, nSubItem++, (LPCTSTR)(_bstr_t)vAppTime );
m_userInfo.SetItemText(nItem, nSubItem++, (LPCTSTR)(_bstr_t)vOverTime );
}
if (vRemark.vt != VT_NULL)
{
m_userInfo.SetItemText(nItem, nSubItem++, (LPCTSTR)(_bstr_t)vRemark );
}
nItem++;
nSubItem = 1;
m_pRecordset->MoveNext(); // 移到下条记录
if (nItem > 19) // 由界面设计,每页只显示20条信息
break;
}
m_pRecordset->MoveFirst(); // 移到首条记录
*/
}
BOOL CUserData::ConnectData()
{
HRESULT hr;
try{
// 创建Connection对象
hr = m_pConn.CreateInstance("ADODB.Connection" );
if (SUCCEEDED(hr))
{// 连接数据库
//m_pConn->ConnectionTimeout = 5;///设置超时时间为5秒
hr = m_pConn->Open(ACCESSVERSION ,"","", adModeUnknown);// adModeReadWrite); | adModeShareDenyWrite);
m_pRecordset.CreateInstance(__uuidof(Recordset));
//m_pOldRecordset.CreateInstance(__uuidof(Recordset));
//m_pCommand.CreateInstance(__uuidof(Command));
}
}
catch(_com_error e) //捕捉异常
{
CString errormessage;
errormessage.Format("连接数据库失败!\r\n错误信息:%s",e.ErrorMessage());
AfxMessageBox(errormessage); //显示错误信息
return FALSE;
}
return TRUE;
}
void CUserData::OnRework()
{
// TODO: Add your control notification handler code here
int nResponse;
CString sql;
int nSelnum = m_userInfo.GetNextItem(-1,LVNI_SELECTED);
if ( -1 == nSelnum)
{
AfxMessageBox("请选择要修改的项!");
return;
}
m_Amend.m_userName = m_userInfo.GetItemText(nSelnum ,0);
m_Amend.m_craCode = m_userInfo.GetItemText(nSelnum ,1);
m_Amend.m_userType = m_userInfo.GetItemText(nSelnum ,2);
m_Amend.m_appTime = m_userInfo.GetItemText(nSelnum ,3);
m_Amend.m_overTime = m_userInfo.GetItemText(nSelnum ,4);
m_Amend.m_reMark = m_userInfo.GetItemText(nSelnum ,5);
m_Amend.m_bShow = TRUE;
nResponse = m_Amend.DoModal();
if (nResponse == IDOK && !m_Amend.m_userName.IsEmpty() && !m_Amend.m_reMark.IsEmpty())
{
/*m_bUpdata = TRUE;
for (int i = 0 ;i < REWORKCOUT ;i++)
{
if (-1 == m_cracode[i])
{
m_cracode[i] = nSelnum;
m_userInfo.SetItemText(nSelnum ,0 ,m_Amend.m_userName);
m_userInfo.SetItemText(nSelnum ,5 ,m_Amend.m_reMark);
return;
}
else
{
if (nSelnum == m_cracode[i])
{
m_userInfo.SetItemText(nSelnum ,0 ,m_Amend.m_userName);
m_userInfo.SetItemText(nSelnum ,5 ,m_Amend.m_reMark);
return;
}
}
}*/
m_bUpdata = TRUE;
m_userInfo.SetItemText(nSelnum ,0 ,m_Amend.m_userName);
m_userInfo.SetItemText(nSelnum ,5 ,m_Amend.m_reMark);
m_pRecordset->Move(((m_nCurPage-1) * 20) + nSelnum,_variant_t((long)adBookmarkFirst)); // 从第一条记录往下移动N条记录
m_pRecordset->PutCollect(_variant_t("UserName") ,_variant_t((_bstr_t)m_Amend.m_userName)); // 修改名字
m_pRecordset->PutCollect(_variant_t("Remark") ,_variant_t((_bstr_t)m_Amend.m_reMark)); // 修改备注
/*
sql.Format(_T("SELECT * FROM stb_safety where CraCode='%s'") ,m_Amend.m_craCode);
m_pRecordset->Open(_variant_t(sql) , _variant_t((IDispatch *)m_pConn, true), adOpenStatic,adLockOptimistic,adCmdText);
if (!m_pRecordset->adoEOF)
{
//m_pRecordset->PutCollect(_variant_t("UserName"),_variant_t((long)45)); // 修改名字
m_pRecordset->PutCollect(_variant_t("UserName") ,_variant_t((_bstr_t)m_Amend.m_userName)); // 修改名字
m_pRecordset->PutCollect(_variant_t("Remark") ,_variant_t((_bstr_t)m_Amend.m_reMark)); // 修改备注
}*/
//m_pRecordset->Update();
//m_pRecordset->Close();
}
}
void CUserData::OnDelete()
{
// TODO: Add your control notification handler code here
int index = 0;
int nSelItem = -1;
POSITION pos = NULL;
CString reg, sql;
int nSelnum = m_userInfo.GetSelectedCount();
if (!nSelnum)
{
AfxMessageBox("请选择要删除的行!");
return;
}
reg.Format(_T("一旦删除将无法恢复,确定要删除这%d行数据吗?") ,nSelnum);
if (IDOK == AfxMessageBox(reg ,MB_OKCANCEL))
{
//m_bUpdata = TRUE;
while(pos = m_userInfo.GetFirstSelectedItemPosition())
{
nSelItem = m_userInfo.GetNextSelectedItem(pos);
m_userInfo.DeleteItem(nSelItem);
m_pRecordset->Move(((m_nCurPage-1) * 20) + nSelItem ,_variant_t((long)adBookmarkFirst)); // 从第一条记录往下移动N条记录
m_pRecordset->Delete(adAffectCurrent); // 删除当前记录
}
if (!m_userInfo.GetItemCount() && ((m_nCurPage) == m_nTotalPage))
{// 如果尾页被删完,则显示上一页
if (1 != m_nCurPage)
{// 首页除外
m_nCurPage--;
}
}
UpdataToList(m_nCurPage);
ShowPage();
reg.Format(_T("共%d条记录") ,m_nRecordNum);
GetDlgItem(IDC_RECORDNUM)->SetWindowText(reg);
}
}
void CUserData::OnSave()
{
// TODO: Add your control notification handler code here
if (m_bUpdata)
{
Savedata();
}
/*
HRESULT hr;
try{
// 保存数据到数据库
hr = m_pRecordset->Update();
if (SUCCEEDED(hr))
{
AfxMessageBox("保存完毕!");
m_bUpdata = FALSE;
}
}
catch(_com_error e) //捕捉异常
{
CString errormessage;
errormessage.Format("数据保存失败!\r\n错误信息:%s",e.ErrorMessage());
AfxMessageBox(errormessage); //显示错误信息
}*/
}
void CUserData::OnClose()
{
// TODO: Add your message handler code here and/or call default
if (m_bUpdata)
{
if (IDOK == AfxMessageBox("数据已经被修改,是否需要保存?" ,MB_OKCANCEL))
{
OnSave();
m_pRecordset->Close();
}
}
if(m_pConn->State)
{
m_pConn->Close();
}
// 因为m_pRecordset被修改,如果不保存而关闭它,会出错,所以这里直接关闭m_pConn也行
/*if(m_pConn->State)
{
m_pConn->Close();
}
*/
CDialog::OnClose();
}
void CUserData::OnQuery()
{
// TODO: Add your control notification handler code here
int nItem = 0;
CString Value;
CString sql;
CString str;
// HRESULT hr;
POSITION pos = NULL;
BOOL bFind = FALSE;
this->UpdateData(TRUE);
if (m_bUpdata)
{
if (IDOK == AfxMessageBox("数据已经被修改,需要保存吗?" ,MB_OKCANCEL))
{
Savedata();
}
if (m_pRecordset->GetRecordCount()>0)
{
m_pRecordset->MoveFirst();
}
m_bUpdata = FALSE;
}
m_pRecordset->Close();
this->BuildQuerykey(m_keyWord ,sql);
this->QueryData(sql);
m_nCurPage = 1;
UpdataToList(m_nCurPage);
ShowPage();
m_nRecordNum = m_pRecordset->GetRecordCount();
str.Format(_T("共%d条记录") ,m_nRecordNum);
GetDlgItem(IDC_RECORDNUM)->SetWindowText(str);
}
void CUserData::OnExit()
{
// TODO: Add your control notification handler code here
OnClose();
this->OnOK();
}
void CUserData::Savedata()
{
m_pRecordset->Update();
/* CString sql;
CString keyvalue ,username ,remark;
int nIndex = 0;
// 修改
while (-1 != m_cracode[nIndex])
{
keyvalue = m_userInfo.GetItemText(m_cracode[nIndex] ,1);
username = m_userInfo.GetItemText(m_cracode[nIndex] ,0);
remark = m_userInfo.GetItemText(m_cracode[nIndex] ,5);
sql.Format(_T("SELECT * FROM stb_safety where CraCode='%s'") ,keyvalue);
m_pRecordset->Open(_variant_t(sql) , _variant_t((IDispatch *)m_pConn, true), adOpenStatic,adLockOptimistic,adCmdText);
if (!m_pRecordset->adoEOF)
{
m_pRecordset->PutCollect(_variant_t("UserName") ,_variant_t((_bstr_t)username)); // 修改名字
m_pRecordset->PutCollect(_variant_t("Remark") ,_variant_t((_bstr_t)remark)); // 修改备注
}
m_pRecordset->Update();
m_pRecordset->Close();
m_cracode[nIndex] = -1;
nIndex++;
}
*/
/*for (int i = 0 ;i < REWORKCOUT ;i++)
{
if (!m_cracode[i].IsEmpty())
{
sql.Format(_T("SELECT * FROM stb_safety where CraCode='%s'") ,m_cracode[i]);
m_pRecordset->Open(_variant_t(sql) , _variant_t((IDispatch *)m_pConn, true), adOpenStatic,adLockOptimistic,adCmdText);
if (!m_pRecordset->adoEOF)
{
//m_pRecordset->PutCollect(_variant_t("UserName"),_variant_t((long)45)); // 修改名字
info.psz = m_cracode[i].GetBuffer(m_cracode[i].GetLength()) ;
if((nIndex=m_userInfo.FindItem(&info)) != -1)
{// 这里只能按控件第一列的值进行搜索
value = m_userInfo.GetItemText(nIndex ,0);
m_pRecordset->PutCollect(_variant_t("UserName") ,_variant_t((_bstr_t)value)); // 修改名字
value = m_userInfo.GetItemText(nIndex ,5);
m_pRecordset->PutCollect(_variant_t("Remark") ,_variant_t((_bstr_t)value)); // 修改备注
}
}
m_pRecordset->Update();
m_pRecordset->Close();
}
} */
AfxMessageBox("数据保存完毕!");
m_bUpdata = FALSE;
}
void CUserData::Insertdata()
{
_variant_t tmp;
int nIsNew = 0; // 是否是新加入的元素,1:是 0:否
HRESULT hrst;
int nResponse;
CString sql;
char apptime[10] = {0};
//m_craCode.Insert(20,'\0');
// this->ConnectData();
BOOL rst = this->ConnectData();
sql.Format(_T("SELECT * FROM stb_safety where CraCode='%s'") ,m_craCode);
hrst = m_pRecordset->Open(_variant_t(sql) , _variant_t((IDispatch *)m_pConn, true), adOpenStatic,adLockOptimistic ,adCmdText);
if(hrst < 0)
{
AfxMessageBox("数据库打开失败!");
return ;
}
if (!m_pRecordset->adoEOF)
{
//m_userInfo.SetItemText(nItem, nSubItem++, (LPCTSTR)(_bstr_t)vCraCode );
_variant_t colRst = m_pRecordset->GetCollect("UserName");
if(colRst.vt == VT_NULL)
{
// 数据库查找失败、
AfxMessageBox("数据记录损坏!请进入用户信息查询,删除非法的用户记录!");
return ;
}
//如果字段为空 m_Amend.m_userName.Format(_T("%s") ,(LPCTSTR)(_bstr_t)m_pRecordset->GetCollect("UserName"));会出现异常
// m_Amend.m_userName.Format(_T("%s") ,(LPCTSTR)(_bstr_t)m_pRecordset->GetCollect("UserName"));
// tmp = m_pRecordset->GetCollect("UserName");
//m_Amend.m_userName = (LPCTSTR)_bstr_t(tmp);
//m_Amend.m_userName.Format(_T("%s") ,tmp);
// m_Amend.m_craCode.Format(_T("%s") ,(LPCTSTR)(_bstr_t)m_pRecordset->GetCollect("CraCode"));
/*tmp = m_pRecordset->GetCollect("CraCode");
m_Amend.m_craCode = (LPCTSTR)(_bstr_t)tmp;
m_Amend.m_userType.Format(m_userType);
m_Amend.m_appTime.Format(m_appTime);
m_Amend.m_overTime.Format(m_overTime);
//m_Amend.m_userType.Format(_T("%s") ,(LPCTSTR)(_bstr_t)m_pRecordset->GetCollect("UserType"));
//m_Amend.m_appTime.Format(_T("%s") ,(LPCTSTR)(_bstr_t)m_pRecordset->GetCollect("AppTime"));
//m_Amend.m_overTime.Format(_T("%s") ,(LPCTSTR)(_bstr_t)m_pRecordset->GetCollect("OverTime"));
m_Amend.m_reMark.Format(_T("%s") ,(LPCTSTR)(_bstr_t)m_pRecordset->GetCollect("Remark"));*/
// tmp = m_pRecordset->GetCollect("Remark");
//m_Amend.m_reMark.Format(_T("%s") ,tmp);
//m_Amend.m_reMark = (LPCTSTR)_bstr_t(tmp);
}
else
{
m_Amend.m_userName = "";
m_Amend.m_craCode = m_craCode;
m_Amend.m_userType = m_userType;
m_Amend.m_appTime = m_appTime ;
m_Amend.m_overTime = m_overTime ;
m_Amend.m_reMark = "" ;
nIsNew = 1;
}
m_Amend.m_bShow = FALSE;
nResponse= m_Amend.DoModal();
if ((IDOK != nResponse))
{//不保存新数据
this->Closedata();
return;
}
if (nIsNew)
{
m_pRecordset->AddNew(); //添加新记录
}
m_userName = m_Amend.m_userName;
m_remark = m_Amend.m_reMark;
if (!m_userName.IsEmpty())
{
m_pRecordset->PutCollect("UserName",_variant_t((_bstr_t)m_userName));
}
m_pRecordset->PutCollect("CraCode",_variant_t((_bstr_t)m_craCode));
m_pRecordset->PutCollect("UserType",_variant_t((_bstr_t)m_userType));
m_pRecordset->PutCollect("AppTime",_variant_t((_bstr_t)m_appTime));
m_pRecordset->PutCollect("OverTime",_variant_t((_bstr_t)m_overTime));
if (!m_userName.IsEmpty())
{
m_pRecordset->PutCollect("Remark",_variant_t((_bstr_t)m_remark));
}
m_pRecordset->Update();
this->Closedata();
}
void CUserData::Closedata()
{
if(m_pConn->State)
{
m_pRecordset->Close();
m_pConn->Close();
}
}
void CUserData::QueryData(CString sql)
{
_variant_t vUserName , vCraCode, vUserType ,vAppTime ,vOverTime ,vRemark;
int RecordCount = 0;
HRESULT hr;
int nItem = 0;
int nSubItem = 1;
try{
hr = m_pRecordset->Open(_variant_t(sql) , _variant_t((IDispatch *)m_pConn, true), adOpenStatic,adLockOptimistic ,adCmdText);
/*
m_userInfo.DeleteAllItems();
RecordCount = m_pRecordset->GetRecordCount();
while (!m_pRecordset->adoEOF) {
// 这里为什么是adoEOF而不是EOF呢?还记得rename("EOF","adoEOF")这一句吗?
vUserName = m_pRecordset->GetCollect("UserName"); //取得第1列的值,从0开始计数,你也可以直接给出列的名称
vUserType = m_pRecordset->GetCollect("UserType"); //取得username字段的值
vCraCode = m_pRecordset->GetCollect("CraCode");
vAppTime = m_pRecordset->GetCollect("AppTime");
vOverTime = m_pRecordset->GetCollect("OverTime");
vRemark = m_pRecordset->GetCollect("remark");
if (vUserName.vt != VT_NULL)
{
m_userInfo.InsertItem(nItem, (LPCTSTR)(_bstr_t)vUserName );
}
else
{
m_userInfo.InsertItem(nItem, "" );
}
if(vUserType.vt != VT_NULL && vCraCode.vt != VT_NULL && vCraCode.vt != VT_NULL && vAppTime.vt != VT_NULL)
{
m_userInfo.SetItemText(nItem, nSubItem++, (LPCTSTR)(_bstr_t)vCraCode );
m_userInfo.SetItemText(nItem, nSubItem++, (LPCTSTR)(_bstr_t)vUserType );
m_userInfo.SetItemText(nItem, nSubItem++, (LPCTSTR)(_bstr_t)vAppTime );
m_userInfo.SetItemText(nItem, nSubItem++, (LPCTSTR)(_bstr_t)vOverTime );
}
if (vRemark.vt != VT_NULL)
{
m_userInfo.SetItemText(nItem, nSubItem++, (LPCTSTR)(_bstr_t)vRemark );
}
nItem++;
nSubItem = 1;
m_pRecordset->MoveNext(); // 移到下条记录
if (nItem > 19) // 由界面设计,每页只显示20条信息
break;
}*/
}
catch(_com_error e) //捕捉异常
{
CString errormessage;
errormessage.Format("查询数据失败!\r\n错误信息:%s",e.ErrorMessage());
AfxMessageBox(errormessage); //显示错误信息
}
}
// 根据关键字生成SQL查询语句(要求各个字段均要搜查)
void CUserData::BuildQuerykey(CString key ,CString &sql)
{
int buflen = 0;
char buf[256] = "SELECT * FROM stb_safety where UserName like '%"; // 字段UserName
buflen = strlen(buf);
sprintf(buf + buflen ,"%s" ,key);
buflen = strlen(buf);
memcpy(buf + buflen ,"%'" ,2);
strcat(buf ," OR CraCode like '%"); // 字段CraCode
buflen = strlen(buf);
sprintf(buf + buflen ,"%s" ,key);
buflen = strlen(buf);
memcpy(buf + buflen ,"%'" ,2);
strcat(buf ," OR UserType like '%"); // 字段UserType
buflen = strlen(buf);
sprintf(buf + buflen ,"%s" ,key);
buflen = strlen(buf);
memcpy(buf + buflen ,"%'" ,2);
strcat(buf ," OR AppTime like '%"); // 字段AppTime
buflen = strlen(buf);
sprintf(buf + buflen ,"%s" ,key);
buflen = strlen(buf);
memcpy(buf + buflen ,"%'" ,2);
strcat(buf ," OR OverTime like '%"); // 字段OverTime
buflen = strlen(buf);
sprintf(buf + buflen ,"%s" ,key);
buflen = strlen(buf);
memcpy(buf + buflen ,"%'" ,2);
strcat(buf ," OR Remark like '%"); // 字段Remark
buflen = strlen(buf);
sprintf(buf + buflen ,"%s" ,key);
buflen = strlen(buf);
memcpy(buf + buflen ,"%'" ,2);
sql.Format(_T("%s") ,buf);
}
// 显示某页记录
void CUserData::UpdataToList(UINT nPage)
{
_variant_t vUserName , vCraCode, vUserType ,vAppTime ,vOverTime ,vRemark;
int nSelItem ;
int nItem = 0;
int nSubItem = 1;
if (m_pRecordset->GetRecordCount()>0)
{
m_pRecordset->MoveFirst(); // 移到第一条记录
}
nSelItem = (nPage-1) * 20;
if (m_pRecordset->adoEOF)
{// 记录被完全删除
return;
}
m_pRecordset->Move(nSelItem ,_variant_t((long)adBookmarkFirst)); // 从第一条记录往下移动N条记录
m_userInfo.DeleteAllItems();
while (!m_pRecordset->adoEOF) {
// 这里为什么是adoEOF而不是EOF呢?还记得rename("EOF","adoEOF")这一句吗?
vUserName = m_pRecordset->GetCollect("UserName"); //取得第1列的值,从0开始计数,你也可以直接给出列的名称
vUserType = m_pRecordset->GetCollect("UserType"); //取得username字段的值
vCraCode = m_pRecordset->GetCollect("CraCode");
vAppTime = m_pRecordset->GetCollect("AppTime");
vOverTime = m_pRecordset->GetCollect("OverTime");
vRemark = m_pRecordset->GetCollect("remark");
if (vUserName.vt != VT_NULL)
{
m_userInfo.InsertItem(nItem, (LPCTSTR)(_bstr_t)vUserName );
}
else
{
m_userInfo.InsertItem(nItem, "" );
}
if(vUserType.vt != VT_NULL && vCraCode.vt != VT_NULL && vCraCode.vt != VT_NULL && vAppTime.vt != VT_NULL)
{
m_userInfo.SetItemText(nItem, nSubItem++, (LPCTSTR)(_bstr_t)vCraCode );
m_userInfo.SetItemText(nItem, nSubItem++, (LPCTSTR)(_bstr_t)vUserType );
m_userInfo.SetItemText(nItem, nSubItem++, (LPCTSTR)(_bstr_t)vAppTime );
m_userInfo.SetItemText(nItem, nSubItem++, (LPCTSTR)(_bstr_t)vOverTime );
}
if (vRemark.vt != VT_NULL)
{
m_userInfo.SetItemText(nItem, nSubItem++, (LPCTSTR)(_bstr_t)vRemark );
}
nItem++;
nSubItem = 1;
m_pRecordset->MoveNext(); // 移到下条记录
if (nItem > 19) // 由界面设计,每页只显示20条信息
break;
}
}
// 显示记录集页数信息
void CUserData::ShowPage()
{
CString str;
UINT nTemp = m_nCurPage;
m_nRecordNum = m_pRecordset->GetRecordCount();
m_nTotalPage = m_nRecordNum/20;
CWnd *pWnd = (CWnd *)GetDlgItem(IDC_CURPAGE);
if (m_nRecordNum%20 || m_nRecordNum == 0)
{
m_nTotalPage++;
}
str.Format(_T("当前页:%d/%d") ,nTemp ,m_nTotalPage);
pWnd->SetWindowText(str);
}
void CUserData::OnAbovepage()
{
// TODO: Add your control notification handler code here
if (1 == m_nCurPage)
{
AfxMessageBox("当前已是首页!");
return;
}
m_nCurPage--;
UpdataToList(m_nCurPage);
ShowPage();
}
void CUserData::OnNextpage()
{
// TODO: Add your control notification handler code here
if ((m_nTotalPage) == m_nCurPage)
{
AfxMessageBox("当前已是尾页!");
return;
}
m_nCurPage++;
UpdataToList(m_nCurPage);
ShowPage();
}
void CUserData::OnFirstpage()
{
// TODO: Add your control notification handler code here
if (1 == m_nCurPage)
{
AfxMessageBox("当前已是首页!");
return;
}
m_nCurPage = 1;
UpdataToList(m_nCurPage);
ShowPage();
}
void CUserData::OnLastpage()
{
// TODO: Add your control notification handler code here
if ((m_nTotalPage) == m_nCurPage)
{
AfxMessageBox("当前已是尾页!");
return;
}
m_nCurPage = m_nTotalPage;
UpdataToList(m_nCurPage);
ShowPage();
}