我给listctrl分页,但是,分页的下一页对,上一页不对,请大家帮忙看一下代码,谢谢!!

liujin1234 2009-06-02 12:30:13
这是上一页这个有错误,但是不知道哪错了?不是语法错误,是逻辑上的错误

void CPropPage1::OnButton1()
{
//CStaticName::a--;
if (CStaticName::a==0)
{
MessageBox("这是首页!");
GetDlgItem(IDC_BUTTON1)->EnableWindow(false);
CStaticName::a=1;
}else{
try
{
m_pConnection.CreateInstance("ADODB.Connection");
CString strConnect="Provider=Microsoft.Jet.OLEDB.4.0;\
Data Source=Database\\City.mdb;Persist Security Info=False";
m_pConnection->Open((_bstr_t)strConnect,"","",adModeUnknown);
}
catch(_com_error e)
{
AfxMessageBox("数据库连接",0,0);
}
CStaticName::a--;
int n=13*CStaticName::a;
m_pRecordset.CreateInstance(__uuidof(Recordset));
m_pRecordset_count.CreateInstance(__uuidof(Recordset));

CString sql1;
sql1.Format("select count(*) as num from Zu where name = '%s' ",TreeCurrent);

_variant_t vt1;
vt1.vt = sql1.IsEmpty() ? VT_NULL:VT_BSTR;
vt1.bstrVal = sql1.AllocSysString();


CString num;
m_pRecordset_count->Open(vt1,m_pConnection.GetInterfacePtr(),adOpenDynamic,adLockOptimistic,adCmdText);
if(!m_pRecordset_count->adoEOF){
num=(LPCTSTR)(_bstr_t)m_pRecordset_count->GetCollect("num");


}



if (1==CStaticName::a)
{
MessageBox("到首页!");
GetDlgItem(IDC_BUTTON1)->EnableWindow(false);
}else{

GetDlgItem(IDC_BUTTON1)->EnableWindow(true);
GetDlgItem(IDC_BUTTON2)->EnableWindow(true);
CString sql;
sql.Format("select top 13 ID,Name,ParentItem,SecNum,tel from Zu where ID1 not in (select top %d ID1 from Zu where name = '%s' order by ID1 desc) and name = '%s' order by ID1 desc",n,TreeCurrent,TreeCurrent);

_variant_t vt;
vt.vt = sql.IsEmpty() ? VT_NULL:VT_BSTR;
vt.bstrVal = sql.AllocSysString();



m_pRecordset->Open(vt,m_pConnection.GetInterfacePtr(),adOpenDynamic,adLockOptimistic,adCmdText);
//删除所有列
m_ctrllist.DeleteAllItems();
int nIndex=0;

while(!m_pRecordset->adoEOF && nIndex<13)
{
CString id=(LPCTSTR)(_bstr_t)m_pRecordset->GetCollect("ID");
CString name=(LPCTSTR)(_bstr_t)m_pRecordset->GetCollect("Name");
vt = m_pRecordset->GetCollect("ParentItem");
CString parentitem=(vt.vt!=VT_NULL)?(LPCTSTR)(_bstr_t)vt:"";
vt = m_pRecordset->GetCollect("SecNum");
CString secnum=(vt.vt!=VT_NULL)?(LPCTSTR)(_bstr_t)vt:"";
vt = m_pRecordset->GetCollect("tel");
CString tel=(vt.vt!=VT_NULL)?(LPCTSTR)(_bstr_t)vt:"";

m_ctrllist.InsertItem(nIndex,id);
m_ctrllist.SetItemText(nIndex,1,name);
m_ctrllist.SetItemText(nIndex,2,parentitem);
m_ctrllist.SetItemText(nIndex,3,secnum);
m_ctrllist.SetItemText(nIndex,4,tel);
nIndex++;
m_pRecordset->MoveNext();
}
m_pRecordset->Close();


}
}
}




下面的是下一页,,是正确的

void CPropPage1::OnButton2()
{



try
{
m_pConnection.CreateInstance("ADODB.Connection");
CString strConnect="Provider=Microsoft.Jet.OLEDB.4.0;\
Data Source=Database\\City.mdb;Persist Security Info=False";
m_pConnection->Open((_bstr_t)strConnect,"","",adModeUnknown);
}
catch(_com_error e)
{
AfxMessageBox("数据库连接",0,0);
}
int n=13*CStaticName::a;
m_pRecordset.CreateInstance(__uuidof(Recordset));
m_pRecordset_count.CreateInstance(__uuidof(Recordset));

CString sql1;
sql1.Format("select count(*) as num from Zu where name = '%s' ",TreeCurrent);

_variant_t vt1;
vt1.vt = sql1.IsEmpty() ? VT_NULL:VT_BSTR;
vt1.bstrVal = sql1.AllocSysString();

// CStaticName::a++;
CString num;
m_pRecordset_count->Open(vt1,m_pConnection.GetInterfacePtr(),adOpenDynamic,adLockOptimistic,adCmdText);
if(!m_pRecordset_count->adoEOF){
num=(LPCTSTR)(_bstr_t)m_pRecordset_count->GetCollect("num");


}

int value;
sscanf((LPCTSTR)num, "%d", &value);
int temp=value%13;
int page=value/13;
if(temp!=0)
{
page=page+1;
}

if (page==CStaticName::a)
{
MessageBox("到末页!");
GetDlgItem(IDC_BUTTON2)->EnableWindow(false);
}else{
GetDlgItem(IDC_BUTTON1)->EnableWindow(true);
GetDlgItem(IDC_BUTTON2)->EnableWindow(true);
CString sql;
sql.Format("select top 13 ID,Name,ParentItem,SecNum,tel from Zu where ID1 not in (select top %d ID1 from Zu where name = '%s' order by ID1 desc) and name = '%s' order by ID1 desc",n,TreeCurrent,TreeCurrent);

_variant_t vt;
vt.vt = sql.IsEmpty() ? VT_NULL:VT_BSTR;
vt.bstrVal = sql.AllocSysString();

// CStaticName::a++;

m_pRecordset->Open(vt,m_pConnection.GetInterfacePtr(),adOpenDynamic,adLockOptimistic,adCmdText);
//删除所有列
m_ctrllist.DeleteAllItems();
int nIndex=0;

while(!m_pRecordset->adoEOF && nIndex<13)
{
CString id=(LPCTSTR)(_bstr_t)m_pRecordset->GetCollect("ID");
CString name=(LPCTSTR)(_bstr_t)m_pRecordset->GetCollect("Name");
vt = m_pRecordset->GetCollect("ParentItem");
CString parentitem=(vt.vt!=VT_NULL)?(LPCTSTR)(_bstr_t)vt:"";
vt = m_pRecordset->GetCollect("SecNum");
CString secnum=(vt.vt!=VT_NULL)?(LPCTSTR)(_bstr_t)vt:"";
vt = m_pRecordset->GetCollect("tel");
CString tel=(vt.vt!=VT_NULL)?(LPCTSTR)(_bstr_t)vt:"";

m_ctrllist.InsertItem(nIndex,id);
m_ctrllist.SetItemText(nIndex,1,name);
m_ctrllist.SetItemText(nIndex,2,parentitem);
m_ctrllist.SetItemText(nIndex,3,secnum);
m_ctrllist.SetItemText(nIndex,4,tel);
nIndex++;
m_pRecordset->MoveNext();
}
m_pRecordset->Close();
CStaticName::a++;

}

}

...全文
135 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
liyunyan0219 2009-11-12
  • 打赏
  • 举报
回复
看看先
高人一筹 2009-06-02
  • 打赏
  • 举报
回复
沙发 来顶顶 哥们我也在学这个有时间可以教教我么 可以得话 加下QQ以后有VC问题好问下你 呵呵 531802884
更欢迎各位高手可以给我提供指导
liujin1234 2009-06-02
  • 打赏
  • 举报
回复
有人回答吗?谢谢
liujin1234 2009-06-02
  • 打赏
  • 举报
回复
沙发
峰白 2009-06-02
  • 打赏
  • 举报
回复
又看了下,如果CStaticName::a=1的情况下运行OnButton1()

那么运行到这里时:CStaticName::a--;
int n=13*CStaticName::a;

n的值为0;然后运行到这里:

sql.Format("select top 13 ID,Name,ParentItem,SecNum,tel from Zu where ID1 not in \
(select top %d ID1 from Zu where name = '%s' order by ID1 desc) and name = '%s' order by ID1 desc",n,TreeCurrent,TreeCurrent);

得到的语句也不是你想设置的。

你应该:
if (CStaticName::a<=1)//这里改一下
{
MessageBox("这是首页!");
GetDlgItem(IDC_BUTTON1)->EnableWindow(false);
CStaticName::a=1;
return;
}

然后下面就不用判断CStaticName::a==1了
Conry 2009-06-02
  • 打赏
  • 举报
回复
没看见你根据当前页数来移动记录指针,就从你的循环来看,就是取的前13个记录
峰白 2009-06-02
  • 打赏
  • 举报
回复
按F5调试一下,错误出现的时候查看“call stack”,看看哪一行出的错误
liujin1234 2009-06-02
  • 打赏
  • 举报
回复
楼上的,谢谢你回答,我看着也都正确,但是不知道怎么的,就是不对,肯定由一个地方错了,
liangxd09 2009-06-02
  • 打赏
  • 举报
回复
怎么个错法,代码倒是没错,调不了不能帮你调,调进去看看参数都对吗
MyBatis-Plus(简称 MP)是一个 MyBatis 的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。 愿景我们的愿景是成为 MyBatis 超好的搭档,就像 魂斗罗 中的 1P、2P,基友搭配,效率翻倍。 特性无侵入:只做增强不做改变,引入它不会对现有工程产生影响,如丝般顺滑损耗小:启动即会自动注入基本 CURD,性能基本无损耗,直接面向对象操作强大的 CRUD 操作:内置通用 Mapper、通用 Service,仅仅通过少量配置即可实现单表大部分 CRUD 操作,更有强大的条件构造器,满足各类使用需求支持 Lambda 形式调用:通过 Lambda 表达式,方便的编写各类查询条件,无需再担心字段写错支持主键自动生成:支持多达 4 种主键策略(内含分布式唯一 ID 生成器 - Sequence),可自由配置,完美解决主键问题支持 ActiveRecord 模式:支持 ActiveRecord 形式调用,实体类只需继承 Model 类即可进行强大的 CRUD 操作支持自定义全局通用操作:支持全局通用方法注入( Write once, use anywhere )内置代码生成器:采用代码或者 Maven 插件可快速生成 Mapper 、 Model 、 Service 、 Controller 层代码,支持模板引擎,更有超多自定义配置等您来使用内置分页插件:基于 MyBatis 物理分页,开发者无需关心具体操作,配置好插件之后,写分页等同于普通 List 查询分页插件支持多种数据库:支持 MySQL、MariaDB、Oracle、DB2、H2、HSQL、SQLite、Postgre、SQLServer 等多种数据库内置性能分析插件:可输出 Sql 语句以及其执行时间,建议开发测试时启用该功能,能快速揪出慢查询内置全局拦截插件:提供全表 delete 、 update 操作智能分析阻断,也可自定义拦截规则,预防误操作 我们将通过理论与实操的方式来阐述 MyBatis-Plus 的强大功能,体验和学习MyBatis-Plus技术。

16,471

社区成员

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

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

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