请求解答~~!!!!

jjyydd 2006-05-11 10:50:48
帮忙看一下,这是我读取数据库内容后要把内容显示到对话框上的代码,可是有点问题,就是执行到
strAttribute.Format("%-10s%-20s%-16s%","药品号码","药品名称","药品价格");这里的时候就跳转到OnTtimer消息里去了,然后再次调用Read_File()就出现异常了,我想是不是因为我第二次访问数据库时没有关闭记录集啊,请大家帮我指点一下看我错在哪里了。我的目的是用Read_yp调用Read_File()去读取数据库中数据,然后调用Show_yp将数据显示出来,大概就是个流程,请大家指点下






BOOL CHospitalDlg::Read_yp()
{




m_arryp.RemoveAll();

int iLen = 2000;
char *pContent = new char[iLen];
memset(pContent,0,iLen);

Read_File();

char *p = strtok(pContent,"\n");
while(p)
{
m_arryp.Add(p);
p = strtok(NULL,"\n");
}



delete []pContent;

return TRUE;




}



//读取数据库内容
BOOL CHospitalDlg::Read_File()
{


_variant_t var;
CString str;
CStringArray strArray;
try

{

m_pRecordset->Open("SELECT * FROM leechdomlist",//查询药品表所有字段
theApp.m_pConnection.GetInterfacePtr(),//获得连接库指针
adOpenDynamic,
adLockOptimistic,
adCmdText);


}
catch(_com_error *e)

{

AfxMessageBox(e->ErrorMessage());
}
try

{
if(!m_pRecordset->BOF)
m_pRecordset->MoveFirst();
else
{
AfxMessageBox("表为空");
return FALSE;
}

while(!m_pRecordset->adoEOF)
{
var=m_pRecordset->GetCollect("药品号码");

if(var.vt!=VT_NULL)
str.Format("%s",(LPCTSTR)_bstr_t(var));
//strArray.Add(str);

m_pRecordset->MoveNext();
}
}

catch(_com_error *e)
{
AfxMessageBox(e->ErrorMessage());
}


m_pRecordset->Close();



return TRUE;
}




void CHospitalDlg::OnTimer(UINT nIDEvent)
{
// TODO: Add your message handler code here and/or call default
if(nIDEvent == SHOWPAGE)
{
m_iypCurShowCount = 0;//药品显示页数
m_izjCurShowCount = 0;
m_ixxCurShowCount = 0;


KillTimer(SHOWYP);

m_iCurShowPage++;
if(m_iCurShowPage == m_iPageCount)
{
m_iCurShowPage = 0;
}

char cPage[20]={0};
strcpy(cPage,m_pPage[m_iCurShowPage].content);

CStringArray arrPageNum;
char *p = strtok(cPage,"");
while(p)
{
arrPageNum.Add(p);
p = strtok(NULL,",");
}

for(int i=0;i<arrPageNum.GetSize();i++)
{
switch(atoi(arrPageNum.GetAt(i).GetBuffer(0)))
{
case 1:
Read_yp();
Show_yp();
break;
case 2:
// Read_zj();
// Show_zj();
break;
case 3:
// Read_xx();
// Show_xx();
break;
default:
break;
}

}

KillTimer(SHOWPAGE);
SetTimer(SHOWPAGE,m_pPage[m_iCurShowPage].period*1000,NULL);
}



//显示数据库内容
BOOL CHospitalDlg::Show_yp()
{
CDC* pDC = this->GetDC();

CBitmap backBmp,*pOldbmp;
backBmp.LoadBitmap(IDB_BITMAP1);

CDC memDC;
memDC.CreateCompatibleDC(pDC);
pOldbmp = (CBitmap*)memDC.SelectObject(&backBmp);
memDC.SetBkMode(OPAQUE);

//显示属性_开始
memDC.SetTextColor(RGB(255,0,0));

CFont attributeFont,*pOldfont;
attributeFont.CreateFont(
14,//13,//12,
0,
0,
0,
FW_NORMAL,//,//FW_NORMAL,//FW_BOLD,
FALSE,
FALSE,
0,
GB2312_CHARSET,
OUT_DEFAULT_PRECIS,
CLIP_DEFAULT_PRECIS,
DEFAULT_QUALITY,
DEFAULT_PITCH|FF_SWISS,
"宋体"
);
pOldfont = memDC.SelectObject(&attributeFont);

CString strAttribute;
strAttribute.Format("%-10s%-20s%-16s%","药品号码","药品名称","药品价格");
memDC.TextOut(m_ypRect.x,m_ypRect.y,strAttribute);

//显示表格_开始
memDC.SetTextColor(RGB(0,200,0));

CFont dataFont;
dataFont.CreateFont(
14,//13,//12, //2005_9_2改
0,
0,
0,
FW_NORMAL,//FW_NORMAL,//FW_BOLD,
FALSE,
FALSE,
0,
GB2312_CHARSET,
OUT_DEFAULT_PRECIS,
CLIP_DEFAULT_PRECIS,
DEFAULT_QUALITY,
DEFAULT_PITCH|FF_SWISS,
"宋体"
);
memDC.SelectObject(&dataFont);

int iCount = m_arryp.GetSize();
for(int i=0;i<iCount-m_iypCurShowCount;i++)
{
CString str = m_arryp.GetAt(i+m_iypCurShowCount);

char pItem[100]={0};
memcpy(pItem,str.GetBuffer(0),str.GetLength());

CString strItem,strTemp;
char *p = strtok(pItem,"|");//基金代码
strItem.Format("%-10s",p);

p = strtok(NULL,"|");//基金名称
strTemp.Format("%-20s",p);
strItem += strTemp;

p = strtok(NULL,"|");//状态
strTemp.Format("%-16s",p);
strItem += strTemp;



if(m_ypRect.y+20+i*15 > m_ypRect.height)
{
SetTimer(SHOWYP,m_ypUpdatetime*1000,NULL);
break;
}

memDC.TextOut(m_ypRect.x,m_ypRect.y+20+i*15,strItem);
}
m_iypCurShowCount += i;
if(m_iypCurShowCount == iCount)
{
m_iypCurShowCount = 0;
}
//显示表格_结束



//粘贴内存图像_开始
pDC->BitBlt(m_ypRect.x,m_ypRect.y,m_ypRect.width,m_ypRect.height,&memDC,0,0,SRCCOPY);
//粘贴内存图像_结束

memDC.SelectObject(pOldbmp);
memDC.SelectObject(pOldfont);
//memDC.SelectObject(pOldpen);

backBmp.DeleteObject();
//titleFont.DeleteObject();
attributeFont.DeleteObject();
dataFont.DeleteObject();
//linePen.DeleteObject();

this->ReleaseDC(pDC);
pDC=NULL;




return TRUE;
}


















...全文
60 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
aa3000 2006-05-12
  • 打赏
  • 举报
回复
strAttribute.Format("%-10s%-20s%-16s%","药品号码","药品名称","药品价格");

%-10s%-20s%-16s% --->>> %-10s%-20s%-16s

4,012

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 数据库
社区管理员
  • 数据库
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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