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

📄 databaseclientdlg.cpp

📁 本程序提供了winCE访问pc机sqlserver中间键的解决方案和源码 注:本程序以及解决方案来自网上 不是本人所写
💻 CPP
字号:
// DatabaseClientDlg.cpp : implementation file
//

#include "stdafx.h"
#include "DatabaseClient.h"
#include "DatabaseClientDlg.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CDatabaseClientDlg dialog

CDatabaseClientDlg::CDatabaseClientDlg(CWnd* pParent /*=NULL*/)
	: CDialog(CDatabaseClientDlg::IDD, pParent)
{
	//{{AFX_DATA_INIT(CDatabaseClientDlg)
		// NOTE: the ClassWizard will add member initialization here
	//}}AFX_DATA_INIT
	// Note that LoadIcon does not require a subsequent DestroyIcon in Win32
	m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}

void CDatabaseClientDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CDatabaseClientDlg)
	DDX_Control(pDX, IDC_LIST_DATA, m_ctrlListData);
	//}}AFX_DATA_MAP
}

BEGIN_MESSAGE_MAP(CDatabaseClientDlg, CDialog)
	//{{AFX_MSG_MAP(CDatabaseClientDlg)
	ON_WM_DESTROY()
	ON_BN_CLICKED(IDC_CONNECT, OnConnect)
	ON_MESSAGE(WM_NET_DATA_ARRIVE,OnDataArrivedMsg)
	ON_BN_CLICKED(IDC_ADD_RECORD, OnAddRecord)
	ON_BN_CLICKED(IDC_DELETE_RECORD, OnDeleteRecord)
	ON_BN_CLICKED(IDC_MODIFY_RECORD, OnModifyRecord)
	ON_NOTIFY(NM_CLICK, IDC_LIST_DATA, OnClickListData)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CDatabaseClientDlg message handlers

BOOL CDatabaseClientDlg::OnInitDialog()
{
	CDialog::OnInitDialog();

	// Set the icon for this dialog.  The framework does this automatically
	//  when the application's main window is not a dialog
	SetIcon(m_hIcon, TRUE);			// Set big icon
	SetIcon(m_hIcon, FALSE);		// Set small icon
	
	CenterWindow(GetDesktopWindow());	// center to the hpc screen

	// TODO: Add extra initialization here
	//1.初始化网络
	m_pClient=new CNetClient;
	m_bConnected=FALSE;

	//2.初始化表头
	m_ctrlListData.InsertColumn(0,_T("姓 名"),LVCFMT_LEFT,60,-1);
	m_ctrlListData.InsertColumn(1,_T("地 址"),LVCFMT_LEFT,60,-1);
	m_ctrlListData.InsertColumn(2,_T("电 话"),LVCFMT_LEFT,90,-1);
	m_ctrlListData.SetExtendedStyle(LVS_EX_FULLROWSELECT);
	
	return TRUE;  // return TRUE  unless you set the focus to a control
}



void CDatabaseClientDlg::OnDestroy() 
{
	CDialog::OnDestroy();
	
	m_pClient->UnInit();
	delete m_pClient;
}

void CDatabaseClientDlg::OnConnect() 
{
	if(!m_bConnected)
	{
		CString Ip;
		GetDlgItemText(IDC_EDIT_SERVERIP,Ip);
		char *ip;
		ip=new char[Ip.GetLength()];
		for(int i=0;i<Ip.GetLength();i++)
		{
			ip[i]=Ip.GetAt(i);
		}
		m_pClient->Init(OnDataArrive,ip,888,(DWORD)this);
		delete ip;
		SetDlgItemText(IDC_CONNECT,L"断开连接");
		m_bConnected=TRUE;
		
		//先更新一次表格
		CString Sql(L"Request:QSELECT * FROM Contact");
		SubmitRequest(Sql);
	}
	else
	{
		m_pClient->UnInit();	
		SetDlgItemText(IDC_CONNECT,L"连接服务器");
		m_bConnected=FALSE;
	}
}

void CDatabaseClientDlg::OnDataArrive(char * pData,unsigned long DataLength,DWORD userdata)
{
	CDatabaseClientDlg* pDlg=(CDatabaseClientDlg*)userdata;
	if(pData)
	{
		pDlg->SendMessage(WM_NET_DATA_ARRIVE,(WPARAM)pData,(LPARAM)DataLength);
	}
}

LONG CDatabaseClientDlg::OnDataArrivedMsg(WPARAM wParam,LPARAM lParam)
{
	//处理收到的数据
	//这里为简单起见,处理的都是单纯的XML数据,并且格式已经固定
	//再次开发可以按照自己的业务进行
	CString Data;
	Data=CString((char*)wParam).Left((int)lParam);

	RefreshList(Data);

	return 0;
}

void CDatabaseClientDlg::RefreshList(LPCTSTR Data)
{
	//使用XML解析返回的结果并且更新表格显示

	CMarkup *m_pXML;
	m_pXML=new CMarkup(Data);

	//查找结果集元素
	m_pXML->ResetPos();
	m_pXML->FindElem();
	m_pXML->IntoElem();

	m_pXML->FindElem();
	m_pXML->FindElem();
	m_pXML->IntoElem();

	//向列表中添加记录
	int nTotal=0;
	m_ctrlListData.DeleteAllItems();
	m_nSelected=-1;
	while(m_pXML->FindElem())
	{
		//AfxMessageBox(m_pXML->GetTagName());
		//AfxMessageBox(m_pXML->GetAttrib(L"Name"));
		m_ctrlListData.InsertItem(nTotal,m_pXML->GetAttrib(L"Name"),-1);
		m_ctrlListData.SetItemText(nTotal,1,m_pXML->GetAttrib(L"Address"));
		m_ctrlListData.SetItemText(nTotal,2,m_pXML->GetAttrib(L"Phone"));

		nTotal++;
	}

	delete m_pXML;
}

void CDatabaseClientDlg::SubmitRequest(CString Sql)
{
	if(!m_bConnected)
	{
		return;
	}

	char *send;
	send=new char [Sql.GetLength()];
	
	//中文转换
	int actuallength=0;	
	actuallength=WideCharToMultiByte(CP_ACP,NULL,(LPCWSTR)Sql.GetBuffer(0),Sql.GetLength(),(LPSTR)send,0,NULL,NULL);	
	delete send;
	
	send=new char [actuallength];
	ZeroMemory(send,actuallength);
	WideCharToMultiByte(CP_ACP,NULL,(LPCWSTR)Sql.GetBuffer(0),Sql.GetLength(),(LPSTR)send,actuallength,NULL,NULL);
	
	int nRet=m_pClient->SendMsg(send,actuallength);	
	delete send;
}

void CDatabaseClientDlg::OnAddRecord() 
{
	//输入记录
	CRecordDlg Dialog1;
	if(Dialog1.DoModal()==IDCANCEL)
	{
		return;
	}

	if(Dialog1.m_strName=="")
	{
		AfxMessageBox(L"姓名不能为空!");
		return;
	}

	//先判断是否记录已经存在
	CString Name;
	for(int i=0;i<m_ctrlListData.GetItemCount();i++)
	{
		Name=m_ctrlListData.GetItemText(i,0);
		if(Name==Dialog1.m_strName)
		{
			AfxMessageBox(L"该记录已经存在,不能重复添加!");
			return;
		}
	}

	//不存在,提交增加的请求
	CString sSql;
	sSql.Format(L"Request:AINSERT INTO Contact (Name, Address, Phone) VALUES ('%s','%s','%s')",Dialog1.m_strName,Dialog1.m_strAddress,Dialog1.m_strPhone);
	SubmitRequest(sSql);
	
}

void CDatabaseClientDlg::OnDeleteRecord() 
{
	if(m_nSelected==-1)
	{
		AfxMessageBox(L"尚未选择要删除的记录!请先选择。");
		return;
	}

	CString Name;
	Name=m_ctrlListData.GetItemText(m_nSelected,0);

	CString sSql;
	sSql.Format(L"Request:DDELETE * FROM Contact WHERE Name = '%s'",Name);

	SubmitRequest(sSql);

}

void CDatabaseClientDlg::OnModifyRecord() 
{
	if(m_nSelected==-1)
	{
		AfxMessageBox(L"尚未选择要修改的记录!请先选择。");
		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;
	}

	//修改记录
	CString sSql;
	sSql.Format(L"Request:MUPDATE Contact SET Name= '%s',Address = '%s',Phone = '%s' WHERE Name = '%s'",Name,Dialog1.m_strAddress,Dialog1.m_strPhone,Name);

	SubmitRequest(sSql);
	
}

void CDatabaseClientDlg::OnClickListData(NMHDR* pNMHDR, LRESULT* pResult) 
{
	//选中一条记录
	if(m_ctrlListData.GetSelectionMark()!=-1)
	{
		m_nSelected=m_ctrlListData.GetSelectionMark();
	}
	else
	{
		m_nSelected=-1;
	}
	
	*pResult = 0;
}

⌨️ 快捷键说明

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