mfc ClistCtrl 페이지에 데이터베이스 데이터 표시

1986 단어 VS2008오리지널
공정이 비교적 크기 때문에 일부 코드를 추출하다.
1. 다음은 조회 데이터베이스입니다.
m_strQuerySql = GetQuerySql();//"select * from 
	if (m_strQuerySql == "")
	{
		return;
	}

	_RecordsetPtr pRes = NULL;
	pRes = DBManager::getInstance().QueryOracleData(m_strQuerySql.c_str());
	m_pRecordSet = pRes;				//     

	long RecodCount = pRes->GetRecordCount();	//    
	long FieldCount = pRes->GetFields()->Count;	//   

	m_nMaxCount = RecodCount;
	m_nMaxPage = RecodCount / PAGERECORD + 1;	//    ,   

2. ClistCtrl 페이지 나누기 표시:
자신의 필드 수에 따라 코드를 수정할 수 있다.
#define PAGERECORD 50
페이지당 50개 표시
페이지 전송은 0으로 시작합니다.
void CDlgOracleQuery::SetPageData( int nPage )
{
	if(nPage>=0 && nPage < m_nMaxPage)
	{
		m_historyData.DeleteAllItems();
		int nIndex = (nPage) * PAGERECORD;
		CString strTemp;

		long FieldCount = m_pRecordSet->GetFields()->Count;
		_variant_t fieldValue = NULL;
		DWORD dwCount = 0;
		if (nPage == 0)
		{
			m_pRecordSet->MoveFirst();
		}
		else
		{
			m_pRecordSet->MoveFirst();
			m_pRecordSet->Move(nIndex);
		}

		while (!m_pRecordSet->EndOfFile)
		{
			for (int j = 0;j < FieldCount;j++)
			{
				fieldValue = m_pRecordSet->GetCollect(_variant_t((long)j));
 				if(fieldValue.vt==VT_NULL || fieldValue.vt==VT_EMPTY)
 				{
 					strTemp = "0";
 
 				}
				else
				{
					strTemp = (LPCSTR)_bstr_t(fieldValue);
					strTemp.TrimRight();
				}
				switch (j)
				{
				case 0:
					{
						m_historyData.InsertItem( dwCount, strTemp);
						break;
					}
				case 1:
					{
						m_historyData.SetItemText(dwCount, j, strTemp);
						break;
					}
				case 2:
					{
						m_historyData.SetItemText(dwCount, j, strTemp);
						break;
					}
				case 3:
					{
						m_historyData.SetItemText(dwCount, j, strTemp);
						break;
					}
				default:
					break;
				}
			}
			m_pRecordSet->MoveNext();
			dwCount++;
			if (dwCount == PAGERECORD)
			{
				break;
			}
		}
	}
}

좋은 웹페이지 즐겨찾기