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

📄 databaseserverview.cpp

📁 本程序提供了winCE访问pc机sqlserver中间键的解决方案和源码 注:本程序以及解决方案来自网上 不是本人所写
💻 CPP
📖 第 1 页 / 共 2 页
字号:
// DatabaseServerView.cpp : implementation of the CDatabaseServerView class
//

#include "stdafx.h"
#include "DatabaseServer.h"

#include "DatabaseServerDoc.h"
#include "DatabaseServerView.h"

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

/////////////////////////////////////////////////////////////////////////////
// CDatabaseServerView

IMPLEMENT_DYNCREATE(CDatabaseServerView, CFormView)

BEGIN_MESSAGE_MAP(CDatabaseServerView, CFormView)
	//{{AFX_MSG_MAP(CDatabaseServerView)
	ON_BN_CLICKED(IDC_ADD_RECORD, OnAddRecord)
	ON_NOTIFY(NM_CLICK, IDC_LIST_DATA, OnClickListData)
	ON_BN_CLICKED(IDC_DELETE_RECORD, OnDeleteRecord)
	ON_BN_CLICKED(IDC_MODIFY_RECORD, OnModifyRecord)
	ON_WM_DESTROY()
	ON_BN_CLICKED(IDC_START_SERVER, OnStartServer)
	ON_MESSAGE(WM_NET_DATA_ARRIVE,OnDataArrivedMsg)
	//}}AFX_MSG_MAP
	// Standard printing commands
	ON_COMMAND(ID_FILE_PRINT, CFormView::OnFilePrint)
	ON_COMMAND(ID_FILE_PRINT_DIRECT, CFormView::OnFilePrint)
	ON_COMMAND(ID_FILE_PRINT_PREVIEW, CFormView::OnFilePrintPreview)
	ON_UPDATE_COMMAND_UI(ID_INDICATOR_COORD, OnUpdateIndicatorCoord)
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CDatabaseServerView construction/destruction

CDatabaseServerView::CDatabaseServerView()
	: CFormView(CDatabaseServerView::IDD)
{
	//{{AFX_DATA_INIT(CDatabaseServerView)
		// NOTE: the ClassWizard will add member initialization here
	//}}AFX_DATA_INIT
	// TODO: add construction code here

}

CDatabaseServerView::~CDatabaseServerView()
{
}

void CDatabaseServerView::DoDataExchange(CDataExchange* pDX)
{
	CFormView::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CDatabaseServerView)
	DDX_Control(pDX, IDC_EDIT_SERVER_LOG, m_ctrlEditServerLog);
	DDX_Control(pDX, IDC_LIST_DATA, m_ctrlListData);
	//}}AFX_DATA_MAP
}

BOOL CDatabaseServerView::PreCreateWindow(CREATESTRUCT& cs)
{
	// TODO: Modify the Window class or styles here by modifying
	//  the CREATESTRUCT cs

	return CFormView::PreCreateWindow(cs);
}

void CDatabaseServerView::OnInitialUpdate()
{
	CFormView::OnInitialUpdate();
	GetParentFrame()->RecalcLayout();
	ResizeParentToFit();

	SetTimer(123,1000,NULL);

	//0.初始化服务器
	m_pServer=new CIocpModeSvr;
	m_bServerStarted=FALSE;

	//1.初始化数据库
	InitDatabase();

	//2.初始化表头
	m_ctrlListData.InsertColumn(0,_T("姓 名"),LVCFMT_LEFT,100,-1);
	m_ctrlListData.InsertColumn(1,_T("地 址"),LVCFMT_LEFT,100,-1);
	m_ctrlListData.InsertColumn(2,_T("电 话"),LVCFMT_LEFT,150,-1);
	m_ctrlListData.SetExtendedStyle(LVS_EX_FULLROWSELECT|LVS_EX_GRIDLINES);

	//3.刷新数据
	RefreshList();

	//4.获取本机的IP
	WORD wVersionRequested;
	WSADATA wsaData;
	
	wVersionRequested=MAKEWORD(2,2);
	
	WSAStartup(wVersionRequested,&wsaData);
	GetLocalHostName(m_strLocalName);
	GetIpAddress(m_strLocalName,m_strLocalIP);
	SetDlgItemText(IDC_STATIC_IP,m_strLocalName+"(本机)的IP:"+m_strLocalIP);

}

/////////////////////////////////////////////////////////////////////////////
// CDatabaseServerView printing

BOOL CDatabaseServerView::OnPreparePrinting(CPrintInfo* pInfo)
{
	// default preparation
	return DoPreparePrinting(pInfo);
}

void CDatabaseServerView::OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
	// TODO: add extra initialization before printing
}

void CDatabaseServerView::OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
	// TODO: add cleanup after printing
}

void CDatabaseServerView::OnPrint(CDC* pDC, CPrintInfo* /*pInfo*/)
{
	// TODO: add customized printing code here
}

/////////////////////////////////////////////////////////////////////////////
// CDatabaseServerView diagnostics

#ifdef _DEBUG
void CDatabaseServerView::AssertValid() const
{
	CFormView::AssertValid();
}

void CDatabaseServerView::Dump(CDumpContext& dc) const
{
	CFormView::Dump(dc);
}

CDatabaseServerDoc* CDatabaseServerView::GetDocument() // non-debug version is inline
{
	ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CDatabaseServerDoc)));
	return (CDatabaseServerDoc*)m_pDocument;
}
#endif //_DEBUG

/////////////////////////////////////////////////////////////////////////////
// CDatabaseServerView message handlers

void CDatabaseServerView::OnUpdateIndicatorCoord(CCmdUI* pCmdUI)
//这是手工的添加状态栏窗格用户界面处理函数:
{
	pCmdUI->Enable(true);//必须启用后才能在自定义状态栏窗格中显示信息
	CString time;
	CTime now=CTime::GetCurrentTime();
	time=now.Format(_T("当前时间: %Y年%m月%d日 %H:%M:%S"));
	pCmdUI->SetText(time);
}


void CDatabaseServerView::InitDatabase()
{
	//Access数据库初始化
	char* szDesc;	
	TCHAR Temppath[MAX_PATH];
	CString tem ;
	::GetCurrentDirectory(MAX_PATH,Temppath);
	tem=Temppath;
	tem=tem+_T("\\Contact.mdb"); //获得当前数据库文件
	
	szDesc=new char[256];
	sprintf(szDesc,"DSN=%s;PWD=123;DBQ=%s","Contact",tem);
 		 
	if(SQLConfigDataSource(NULL,ODBC_ADD_DSN,"Microsoft Access Driver (*.mdb)\0",(LPCSTR)szDesc)==FALSE)
	{
		//配置数据库失败
		AfxMessageBox("创建DSN时,出现错误!");
		return ;
	}
	
	//目的是在第一次运行时,自动建立数据源
}

void CDatabaseServerView::RefreshList()
{
	m_ctrlListData.DeleteAllItems();
	m_nSelected=-1;

	CDatabase database;
	CRecordset recordset;
	CString tableName;
	CString sSql;

	//打开数据库
	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",tableName);
	recordset.Open(CRecordset::dynaset,sSql);
	if(recordset.IsBOF()&&recordset.IsEOF())
	{
		AfxMessageBox("没有记录!");		
	}
	else
	{
		int nDataTotal=0;
		CString Temp;
		recordset.MoveFirst();
		while(!recordset.IsEOF())
		{
			recordset.GetFieldValue((short)1,Temp);
			m_ctrlListData.InsertItem(nDataTotal,Temp,-1);
			recordset.GetFieldValue((short)2,Temp);
			m_ctrlListData.SetItemText(nDataTotal,1,Temp);
			recordset.GetFieldValue((short)3,Temp);
			m_ctrlListData.SetItemText(nDataTotal,2,Temp);

			nDataTotal++;

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

	SendBack();

}

void CDatabaseServerView::OnAddRecord() 
{
	CRecordDlg Dialog1;
	if(Dialog1.DoModal()==IDCANCEL)
	{
		return;
	}

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

	//添加记录
	CDatabase database;
	CRecordset recordset;
	CString tableName;
	CString sSql;
	//打开数据库
	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,Dialog1.m_strName);
	recordset.Open(CRecordset::dynaset,sSql);
	if(recordset.IsBOF()&&recordset.IsEOF())
	{
		//增加这条记录
		sSql.Format("INSERT INTO %s (Name, Address, Phone) VALUES ('%s','%s','%s')",tableName,Dialog1.m_strName,Dialog1.m_strAddress,Dialog1.m_strPhone);
		database.ExecuteSQL(sSql);
	}
	else
	{
		AfxMessageBox("该记录已经存在,不能重复添加!");
	}
	//使用完这个数据库之后,关闭数据库以及记录集
	if(recordset.IsOpen())
	{
		recordset.Close();
	}
    if(database.IsOpen())
	{
		database.Close();
	}

	RefreshList();

}

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

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

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

	//删除记录
	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
	{
		
	}

⌨️ 快捷键说明

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