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

📄 databaseserverview.cpp

📁 本程序提供了winCE访问pc机sqlserver中间键的解决方案和源码 注:本程序以及解决方案来自网上 不是本人所写
💻 CPP
📖 第 1 页 / 共 2 页
字号:
	//删除
	sSql.Format("DELETE FROM %s WHERE Name = '%s'",tableName,Name);
	database.ExecuteSQL(sSql);

	//使用完这个数据库之后,关闭数据库以及记录集
	if(recordset.IsOpen())
	{
		recordset.Close();
	}
	if(database.IsOpen())
	{
		database.Close();
	}

	//刷新列表
	RefreshList();
}

void CDatabaseServerView::OnModifyRecord() 
{
	if(m_nSelected==-1)
	{
		AfxMessageBox("尚未选择要修改的记录!请先选择。");
		return;
	}

	CString Name,Address,Phone;
	Name=m_ctrlListData.GetItemText(m_nSelected,0);
	Address=m_ctrlListData.GetItemText(m_nSelected,1);
	Phone=m_ctrlListData.GetItemText(m_nSelected,2);

	CRecordDlg Dialog1;
	Dialog1.m_strName=Name;
	Dialog1.m_strAddress=Address;
	Dialog1.m_strPhone=Phone;

	if(Dialog1.DoModal()==IDCANCEL)
	{
		return;
	}

	//修改记录
	CDatabase database;
	CRecordset recordset;
	CString tableName;
	CString sSql;
	CString Temp;
	//打开数据库
	TRY
	{
		sSql.Format("DSN=%s;;","Contact");
		database.OpenEx(sSql,CDatabase::noOdbcDialog);		
	}
	CATCH(CDBException, e)
	{
		//错误代码为e->m_nRetCode
	}
	END_CATCH
	recordset.m_pDatabase=&database;
	tableName="Contact";

	//查找这个记录是否存在
	recordset.m_strFilter="";
	sSql.Format("SELECT * FROM %s WHERE Name = '%s'",tableName,Name);
	recordset.Open(CRecordset::dynaset,sSql);

	if(recordset.IsBOF()&&recordset.IsEOF())
	{
		//不存在,无法修改
		AfxMessageBox("该记录不存在,无法修改!");
		//使用完这个数据库之后,关闭数据库以及记录集
		if(recordset.IsOpen())
		{
			recordset.Close();
		}
		if(database.IsOpen())
		{
			database.Close();
		}
		return;
	}
	else
	{
		
	}

	//修改
	sSql.Format("UPDATE %s SET Name= '%s',Address = '%s',Phone = '%s' WHERE Name = '%s'",tableName,Name,Dialog1.m_strAddress,Dialog1.m_strPhone,Name);
	database.ExecuteSQL(sSql);

	//使用完这个数据库之后,关闭数据库以及记录集
	if(recordset.IsOpen())
	{
		recordset.Close();
	}
	if(database.IsOpen())
	{
		database.Close();
	}

	//刷新列表
	RefreshList();
	
}

void CDatabaseServerView::OnDestroy() 
{
	CFormView::OnDestroy();
	
	m_pServer->UnInit();
	delete m_pServer;
}

void CDatabaseServerView::OnStartServer() 
{
	if(!m_bServerStarted)
	{
		m_pServer->Init(OnDataArrive,888,(DWORD)this);
		m_bServerStarted=TRUE;
		SetDlgItemText(IDC_START_SERVER,"停止服务器");
	}
	else
	{
		m_pServer->UnInit();
		m_bServerStarted=FALSE;
		SetDlgItemText(IDC_START_SERVER,"开始服务器");
	}
}

void CDatabaseServerView::OnDataArrive(unsigned long sIP, SOCKET sClient, char * pData, unsigned long DataLength,DWORD userdata)
{
	CDatabaseServerView* pWnd=(CDatabaseServerView*)userdata;
	DWORD inf[2];
	inf[0]=DataLength;
	inf[1]=sClient;
	pWnd->SendMessage(WM_NET_DATA_ARRIVE,(WPARAM)pData,(LPARAM)&inf);
}

LONG CDatabaseServerView::OnDataArrivedMsg(WPARAM wParam,LPARAM lParam)
{
	DWORD inf[2];
	memcpy(&inf,(DWORD*)lParam,2*sizeof(DWORD));
	//m_pServer->SendMsg((SOCKET)inf[1],(char*)wParam,inf[0]);
	
	CString Data;
	Data=CString((char*)wParam).Left(inf[0])+"\r\n";
	
	//判断是否是合格的请求语句("Request:"开头)
	//1.Request:A-----添加记录
	//2.Request:M-----修改记录
	//3.Request:D-----删除记录
	//4.Request:Q-----查询记录
	//后面跟SQL语句
	if(Data.Left(8)!="Request:")
	{
		return 0;
	}

	//进行数据库操作
	CString sSql;
	/*
	if(Data.Left(9).Right(1)=="A")
	{
		//增加记录
	}

	if(Data.Left(9).Right(1)=="M")
	{
		//修改记录
	}

	if(Data.Left(9).Right(1)=="D")
	{
		//删除记录
	}
	*/
	sSql=Data.Right(Data.GetLength()-9);

	//操作数据库
	CDatabase database;
	CRecordset recordset;
	CString tableName;
	CString sSql1("SELECT * FROM Contact");
	CString Temp;
	//打开数据库
	TRY
	{
		sSql1.Format("DSN=%s;;","Contact");
		database.OpenEx(sSql1,CDatabase::noOdbcDialog);		
	}
	CATCH(CDBException, e)
	{
		//错误代码为e->m_nRetCode
	}
	END_CATCH
	recordset.m_pDatabase=&database;

	//操作
	TRACE(sSql+"\r\n");
	database.ExecuteSQL(sSql);
	
	//使用完这个数据库之后,关闭数据库以及记录集
	if(recordset.IsOpen())
	{
		recordset.Close();
	}
	if(database.IsOpen())
	{
		database.Close();
	}

	//刷新列表
	RefreshList();

	AddMessage(sSql);

	return 1;
}

void CDatabaseServerView::AddMessage(LPCTSTR msg)
{
	CString Message;
	
	//服务器
	GetDlgItemText(IDC_EDIT_SERVER_LOG,Message);
	Message+=msg;
	SetDlgItemText(IDC_EDIT_SERVER_LOG,Message);
	m_ctrlEditServerLog.SetSel(Message.GetLength(),Message.GetLength());
	
}

//获得本地计算机名称
int CDatabaseServerView::GetLocalHostName(CString &sLocalName)
{
	char szLocalName[256];
	int nRetCode;
	nRetCode=gethostname(szLocalName,sizeof(szLocalName));
	if(nRetCode!=0)
	{
		//产生错误
		sLocalName=_T("没有取得");
		return GetLastError();
	}
	sLocalName=szLocalName;
	return 0;
}

//获得本机IP地址
int CDatabaseServerView::GetIpAddress(const CString &sLocalName, CString &sIpAddress)
{
	struct hostent FAR * lpHostEnt=gethostbyname(sLocalName);
	if(lpHostEnt==NULL)
	{
		//错误
		sIpAddress=_T("");
		return GetLastError();
	}
	//获取IP地址
	LPSTR lpAddr=lpHostEnt->h_addr_list[0];
	if(lpAddr)
	{
		struct in_addr inAddr;
		memmove(&inAddr,lpAddr,4);
		//转换为标准格式
		sIpAddress=inet_ntoa(inAddr);
		if(sIpAddress.IsEmpty())
		{
			sIpAddress=_T("没有取得");
		}
	}
	return 0;
}

void CDatabaseServerView::SendBack()
{
	//将结果集返回给客户端
	CString Data;
	CMarkup *m_pXML;
	m_pXML=new CMarkup(_T("<?xml version=\"1.0\"?>\r\n<xml/>\r\n"));

	//写入记录
	//这里仅做测试使用这种写法和格式,根据自己的业务流程可以修改这里
	//写入字段表头结构
	m_pXML->ResetPos();
	m_pXML->FindElem();

	m_pXML->AddChildElem("Schema");	
	
	m_pXML->IntoElem();
	m_pXML->AddChildElem("Table");

	m_pXML->IntoElem();
	m_pXML->AddChildElem("Field");
	m_pXML->IntoElem();
	m_pXML->AddAttrib("Name","Name");

	m_pXML->OutOfElem();
	m_pXML->AddChildElem("Field");
	m_pXML->IntoElem();
	m_pXML->AddAttrib("Name","Address");

	m_pXML->OutOfElem();
	m_pXML->AddChildElem("Field");
	m_pXML->IntoElem();
	m_pXML->AddAttrib("Name","Phone");

	m_pXML->ResetPos();
	m_pXML->FindElem();

	//写入数据记录
	m_pXML->AddChildElem("Data");	
	m_pXML->IntoElem();	

	//操作数据库
	CDatabase database;
	CRecordset recordset;
	CString tableName;
	CString sSql1("SELECT * FROM Contact");
	CString Temp;

	//打开数据库
	TRY
	{
		sSql1.Format("DSN=%s;;","Contact");
		database.OpenEx(sSql1,CDatabase::noOdbcDialog);		
	}
	CATCH(CDBException, e)
	{
		//错误代码为e->m_nRetCode
	}
	END_CATCH
	recordset.m_pDatabase=&database;
	tableName="Contact";

	//查找记录
	recordset.m_strFilter="";
	sSql1.Format("SELECT * FROM %s",tableName);
	recordset.Open(CRecordset::dynaset,sSql1);
	if(recordset.IsBOF()&&recordset.IsEOF())
	{
		//AfxMessageBox("没有记录!");		
	}
	else
	{
		int nDataTotal=0;
		CString Temp;
		recordset.MoveFirst();
		while(!recordset.IsEOF())
		{
			if(nDataTotal>0)
			{
				m_pXML->OutOfElem();
			}
			m_pXML->AddChildElem("Record");
			
			m_pXML->IntoElem();
			recordset.GetFieldValue((short)1,Temp);
			m_pXML->AddAttrib("Name",Temp);
			recordset.GetFieldValue((short)2,Temp);
			m_pXML->AddAttrib("Address",Temp);
			recordset.GetFieldValue((short)3,Temp);
			m_pXML->AddAttrib("Phone",Temp);
			
			nDataTotal++;
			
			recordset.MoveNext();
		}
	}
	//使用完这个数据库之后,关闭数据库以及记录集
	if(recordset.IsOpen())
	{
		recordset.Close();
	}
    if(database.IsOpen())
	{
		database.Close();
	}

	Data=m_pXML->GetDoc();
	if(m_bServerStarted)
	{
		m_pServer->SendMsgToAll((char*)Data.GetBuffer(0),Data.GetLength());
	}

	delete m_pXML;
}

⌨️ 快捷键说明

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