⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 serverview.cpp

📁 面向软件工程的Visual C++网络程序开发
💻 CPP
📖 第 1 页 / 共 2 页
字号:
			if(!ConstructVar(saValues.GetAt(i), data_type, &varValue)) return FALSE;
			hr = field->put_Value(varValue);
		}
		m_recordset->Update(); 
		fields->Release();
		field->Release();
	    m_recordset->Close(); 

	}
	catch (_com_error &e){
	   m_recordset->Close(); 
//	   MessageBox(e.ErrorMessage()); 
	   return FALSE;
	}
	
	return (SUCCEEDED(hr));
}

BOOL CServerView::ConstructVar(CString strValue, int type, VARIANT *var)
{
	COleDateTime var_date;
	CURRENCY cy;
	cy.Hi = 0;
	switch(type){
	case adInteger:
		var->vt = VT_I4;
		var->lVal = atoi(strValue);
		break;
	case adCurrency:
		var->vt = VT_CY;
		cy.Lo = atoi(strValue);
		cy.int64 = atoi(strValue);
		var->cyVal = cy;
		break;
	case adChar:
	case adVarWChar:
		var->vt = VT_BSTR;
		var->bstrVal = (_bstr_t)strValue;
		break;
	case adDBTimeStamp:
		var->vt = VT_DATE;
		var->date = var_date;
		break;
	default:
		var->vt = VT_EMPTY;
		break;
	}

	return TRUE;
}

BOOL CServerView::GetInfoArray(CString strTableName, CUIntArray &uaID, CStringArray &saArray,int i)
{
	m_iRefresh=0;
	if(!m_fConnected) return FALSE;
	//
	HRESULT hr;
	CString strQuery;
	CString strValue;
	VARIANT var_value;

	VARIANT_BOOL ValEof;
	int nRowCount = 0;
	Field *field = NULL;

	_variant_t var_t;
	_bstr_t bst_t;

	VARIANT varCounter;
	varCounter.vt = VT_I4;
	varCounter.lVal = 0;


	strQuery.Format("%s", strTableName);
	_bstr_t query = strQuery;
	_bstr_t source =  m_strSource;
	try{
		hr = m_recordset->Open(query, source, adOpenDynamic, adLockOptimistic, adCmdText);
		ValEof = m_recordset->get_adoEOF(&ValEof);
		while(TRUE){
			if(ValEof) break;

			varCounter.lVal = 0;
			m_recordset->Fields->get_Item(varCounter, &field);
			field->get_Value(&var_value);
			uaID.Add(var_value.lVal); 
				
			varCounter.lVal = i;
			m_recordset->Fields->get_Item(varCounter, &field);  
			field->get_Value(&var_value);
			var_t = var_value;
			bst_t = var_t;
			saArray.Add((const char *)bst_t); 
			m_iRefresh=nRowCount;
			nRowCount++;
			m_recordset->MoveNext(); 
			m_recordset->get_adoEOF(&ValEof);
		}
		m_recordset->Close(); 
	}
	catch (_com_error &e){
	   m_recordset->Close(); 
//	   MessageBox(e.ErrorMessage()); 
	   return FALSE;
	}

	return (SUCCEEDED(hr));
}


BOOL CServerView::DeleteRow(CString strSelect)
{
	if(!m_fConnected) return FALSE;
	//
	HRESULT hr;
	CString strQuery;
	VARIANT_BOOL ValEof;

	strQuery.Format("%s", strSelect);
	_bstr_t query = strQuery;
	_bstr_t source =  m_strSource;
	try{
		hr = m_recordset->Open(query, source, adOpenDynamic, adLockOptimistic, adCmdText);
		ValEof = m_recordset->get_adoEOF(&ValEof);
		if(!ValEof)	m_recordset->Delete(adAffectCurrent); 
		m_recordset->Close(); 
	}
	catch (_com_error &e){
	   m_recordset->Close(); 
//	   MessageBox("删除记录失败!"); 
	   return FALSE;
	}

	return (SUCCEEDED(hr));
}

BOOL CServerView::RefreshData(ULONG ulColCount,CString strResult[100][200])
{
	m_iRefresh=0;
	if(!m_fConnected)
		return FALSE;
	if(0 == ulColCount)
		return FALSE;

	HRESULT hr;
	CString strValue;
	VARIANT var_value;

	VARIANT_BOOL ValEof;
	int nRowCount = 0;
	Field *field = NULL;

	VARIANT varCounter;
	varCounter.vt = VT_I4;
	varCounter.lVal = 0;

	try{
		ValEof = m_recordset->get_adoEOF(&ValEof);
		while(TRUE){
			if(ValEof) break;
			varCounter.lVal = 0;
			m_recordset->Fields->get_Item(varCounter, &field);
			DataTypeEnum data_type;
			field->get_Value(&var_value);
			strValue = VariantToCtring(var_value);
			strResult[nRowCount][0]=strValue;	
	
			for(int i=1;i<ulColCount;i++){
				varCounter.lVal = i;
				m_recordset->Fields->get_Item(varCounter, &field);  
				field->get_Value(&var_value);
				strValue = VariantToCtring(var_value);
				strResult[nRowCount][i]=strValue;
			}
			nRowCount ++;
			m_iRefresh=nRowCount;
			m_recordset->MoveNext(); 
			m_recordset->get_adoEOF(&ValEof);

		}
	m_recordset->Close(); 
	}  
	catch (_com_error &e){
		m_recordset->Close(); 
		return FALSE;
	}
	return (SUCCEEDED(hr));
}

BOOL CServerView::RefreshData(ULONG ulColCount,CStringArray strResult[100])
{
	m_iRefresh=0;
	if(!m_fConnected)
		return FALSE;
	if(0 == ulColCount)
		return FALSE;

	HRESULT hr;
	CString strValue;
	VARIANT var_value;

	VARIANT_BOOL ValEof;
	int nRowCount = 0;
	Field *field = NULL;

	VARIANT varCounter;
	varCounter.vt = VT_I4;
	varCounter.lVal = 0;

	try{
		ValEof = m_recordset->get_adoEOF(&ValEof);
		while(TRUE){
			if(ValEof) break;
			varCounter.lVal = 0;
			m_recordset->Fields->get_Item(varCounter, &field);
			DataTypeEnum data_type;
			field->get_Value(&var_value);
			strValue = VariantToCtring(var_value);
			strResult[0].Add(strValue) ;	
	
			for(int i=1;i<ulColCount;i++){
				varCounter.lVal = i;
				m_recordset->Fields->get_Item(varCounter, &field);  
				field->get_Value(&var_value);
				strValue = VariantToCtring(var_value);
				strResult[i].Add(strValue);
			}
			nRowCount++;
			m_iRefresh=nRowCount;
			m_recordset->MoveNext(); 
			m_recordset->get_adoEOF(&ValEof);
		}
		m_recordset->Close(); 
	}  
	catch (_com_error &e){
		m_recordset->Close(); 
		return FALSE;
	}

	return (SUCCEEDED(hr));
}

BOOL CServerView::GetColumn(ULONG *pulColCount, CString strColmnName[100])
{
	if(!m_fConnected) 
		return FALSE;

	HRESULT hr;
	CString strColName;
	Fields* fields = NULL;

	try{	
		hr = m_recordset->get_Fields(&fields);
		if (SUCCEEDED(hr))
			hr = fields->get_Count((long *)pulColCount);

		for(long i=0;i<*pulColCount;i++){
			BSTR bstrColName;
			hr = fields->Item[i]->get_Name(&bstrColName);
			strColName = bstrColName;
			strColmnName[i]=strColName;
		}

		if (SUCCEEDED(hr))
			fields->Release();
	}
	catch (_com_error &e){
	   m_recordset->Close();
	   return FALSE;
	}

	return (SUCCEEDED(hr));
}

void CServerView::OnTimer(UINT nIDEvent) 
{
	CServerDoc* pDoc=GetDocument();
	CMessage* pMsg = new CMessage;
	POSITION posname;
	CServiceSocket *pSock;
	pMsg->To = "";
	if(pDoc->m_connectionList.IsEmpty())
		return;
	for( posname=pDoc->m_connectionList.GetHeadPosition();posname;)
	{				
		pSock = (CServiceSocket *)pDoc->m_connectionList.GetNext(posname);
		if(!pSock->m_bActive)
		{
			pDoc->CloseSocket(pSock);
		}
		else
		{
			pSock->m_bActive=false;
			pDoc->m_connectionList.SetAt(pDoc->m_connectionList.Find(pSock),pSock);
		}
			
	}
	
	if(pDoc->m_connectionList.IsEmpty())
		return;

	for( posname=pDoc->m_connectionList.GetHeadPosition();posname;)
	{				
		pSock = (CServiceSocket *)pDoc->m_connectionList.GetNext(posname);

		if(pSock==NULL ) 
			continue;
		if (pMsg == NULL) 
			continue;
		pMsg->From = pSock->Name;
		pMsg->ShortMessage  = _TEXT("Online?");
		pMsg->To = _TEXT("All");
		pMsg->Type = 9999;
		try{
			pDoc->SendMsg(pSock, pMsg);

		}
		catch(...)
		{
			pDoc->CloseSocket(pSock);
		}
		
	}


	CEditView::OnTimer(nIDEvent);
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -