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

📄 identitycardquerydlg.cpp

📁 IdentityCardQuery是一个基于ado身份证查询系统,包括多表操作,查询,添加,删除等.
💻 CPP
📖 第 1 页 / 共 2 页
字号:
	
	if (strID.IsEmpty())
		return true;
	else if (ipos != -1 && strID.GetLength()==1)
		return true;
	else 
		return false;
}
void CIdentityCardQueryDlg::InsertOneRow(int row, CString strID, CString strName,CString strSex,CString strAge,CString strPace)
{

	if (row < 0 || row > m_DataListCtrl.GetItemCount())
		return;

	int ipos = -1;
	LVITEM iItem;
	iItem.mask = LVIF_TEXT;
	iItem.iItem = row;
	iItem.iSubItem=0;
	iItem.pszText = strID.GetBuffer(strID.GetLength());
	ipos = m_DataListCtrl.InsertItem(&iItem);//返回表项插入后的索引号 
	
	iItem.mask = LVIF_TEXT;
	iItem.iItem = ipos;
	iItem.iSubItem=1;
	iItem.pszText = strName.GetBuffer(strName.GetLength());
	m_DataListCtrl.SetItem(&iItem);

	iItem.mask = LVIF_TEXT;
	iItem.iItem = ipos;
	iItem.iSubItem=2;
	iItem.pszText = strSex.GetBuffer(strSex.GetLength());
	m_DataListCtrl.SetItem(&iItem);

	iItem.mask = LVIF_TEXT;
	iItem.iItem = ipos;
	iItem.iSubItem=3;
	iItem.pszText = strAge.GetBuffer(strAge.GetLength());
	m_DataListCtrl.SetItem(&iItem);

	iItem.mask = LVIF_TEXT;
	iItem.iItem = ipos;
	iItem.iSubItem=4;
	iItem.pszText = strPace.GetBuffer(strPace.GetLength());
	m_DataListCtrl.SetItem(&iItem);
}

void CIdentityCardQueryDlg::OnBtDelete() 
{
	if (!m_bConnect)
		return;

	UpdateData();

	if (m_comDelType.GetCurSel() == 0)//delete by id
	{
		m_strDelInfo.TrimLeft();m_strDelInfo.TrimRight();
		if (!CheckID(m_strDelInfo,true))
		{
			MessageBox(_T("ID 输入有误"));
			return;
		}
		else
		{
			if (MessageBox(_T("确定删除吗?"),_T("警告"),MB_OKCANCEL) == IDCANCEL)
				return;
		}

		DeleteOneRecordByID(m_strDelInfo);
		UpdateListDataEx(m_strDelInfo,0);
	}
	else if (m_comDelType.GetCurSel() == 1)//delete by name
	{
		m_strDelInfo.TrimLeft();m_strDelInfo.TrimRight();
		if (m_strDelInfo.IsEmpty())
		{
			MessageBox(_T("名称输入有误"));
			return;
		}
		else
		{
			if (MessageBox(_T("确定删除吗?"),_T("警告"),MB_OKCANCEL) == IDCANCEL)
				return;
		}
		DeleteOneRecordByName(m_strDelInfo);
		UpdateListDataEx(m_strDelInfo,1);
	}
	else if (m_comDelType.GetCurSel() == 2)//delete by checked
	{
		bool bdelete = false;
		CString strID = _T("");
		for (int i=m_DataListCtrl.GetItemCount()-1; i>=0; i--)
		{
			if (m_DataListCtrl.GetCheck(i))
			{
				strID = m_DataListCtrl.GetItemText(i,0);
				m_DataListCtrl.DeleteItem(i);
				DeleteOneRecordByID(strID);
				bdelete = true;
			}
		}
		
		if (!bdelete)
		MessageBox(_T("请选中要删除的记录"),_T("提示"));
	}
	else//delete all 
	{
		if (MessageBox(_T("确定全部删除吗?"),_T("警告"),MB_OKCANCEL) == IDCANCEL)
				return;
		
		DeleteAllRecord();
		UpdateListDataEx(m_strDelInfo,-1);
	}
	return;
	
}

//iSubItem == -1 删除所有  
void CIdentityCardQueryDlg::UpdateListDataEx(CString strID,int iSubItem)
{
	if(iSubItem == -1)
	{
		m_DataListCtrl.DeleteAllItems();
		return;
	}

	for (int i=m_DataListCtrl.GetItemCount()-1; i>=0; i--)
	{
		if (m_DataListCtrl.GetItemText(i,iSubItem) == strID)
		{
			m_DataListCtrl.DeleteItem(i);
		//	break;
		}
	}
}
void CIdentityCardQueryDlg::AddOneRecord(CString tablename,CString strID, CString strName,CString strSex,CString strAge,CString strPace)
{
	m_pRs.Open(tablename, CADORecordset::openTable);
	
	m_pRs.AddNew();
	m_pRs.SetFieldValue("ID", strID);
	m_pRs.SetFieldValue("姓名", strName);
	m_pRs.SetFieldValue("性别", strSex);
	m_pRs.SetFieldValue("年龄", strAge);
	m_pRs.SetFieldValue("籍贯", strPace);

	m_pRs.Update();
	m_pRs.Close();

}

//删除按id,保证唯一性
void CIdentityCardQueryDlg::DeleteOneRecordByID(CString strID)
{
	CString strQry = _T("");
	CString onetable = _T("");
	for (int i=0; i<m_accessTableArray.GetSize(); i++)
	{
		onetable = m_accessTableArray[i];
		strQry.Format(_T("select * FROM %s WHERE(ID = '%s')"),onetable,strID);
		
		BOOL flag = m_pRs.Open((LPCTSTR)strQry);
		if(!flag)
		{
		//	MessageBox(_T("数据库出错!"));
			continue;
		//	return ; 
		}
		int count = m_pRs.GetRecordCount();
		if (count <=0)
		{
			m_pRs.Close();
			continue;
		}
		m_pRs.Delete();
		m_pRs.Update();
		m_pRs.Close();	

		break;
	}
		
}
void CIdentityCardQueryDlg::DeleteOneRecordByName(CString strName)
{
	CString strQry = _T("");
	CString onetable = _T("");
	for (int i=0; i<m_accessTableArray.GetSize(); i++)
	{
		onetable = m_accessTableArray[i];
		strQry.Format(_T("select * FROM %s WHERE(姓名 = '%s')"),onetable,strName);
		
		BOOL flag = m_pRs.Open((LPCTSTR)strQry);
		if(!flag)
		{
			//	MessageBox(_T("数据库出错!"));
			continue;
			//	return ; 
		}
		int count = m_pRs.GetRecordCount();
		if (count <=0)
		{
			m_pRs.Close();
			continue;
		}

		if(!m_pRs.IsBOF())
		{				
			m_pRs.MoveFirst();				
		}
		
		while (!m_pRs.IsEof())
		{
			m_pRs.Delete();
			m_pRs.MoveNext();
		}
		m_pRs.Update();
		m_pRs.Close();	
		
//		break;
	}
	
}
void CIdentityCardQueryDlg::DeleteAllRecord()
{
	CString strQry = _T("");
	CString onetable = _T("");
	for (int i=0; i<m_accessTableArray.GetSize(); i++)
	{
		onetable = m_accessTableArray[i];
		strQry.Format(_T("select * FROM %s "),onetable);
		
		BOOL flag = m_pRs.Open((LPCTSTR)strQry);
		if(!flag)
		{
			//	MessageBox(_T("数据库出错!"));
			continue;
			//	return ; 
		}
		int count = m_pRs.GetRecordCount();
		if (count <=0)
		{
			m_pRs.Close();
			continue;
		}
		
		if(!m_pRs.IsBOF())
		{				
			m_pRs.MoveFirst();				
		}
		
		while (!m_pRs.IsEof())
		{
			m_pRs.Delete();
			m_pRs.MoveNext();
		}
		m_pRs.Update();
		m_pRs.Close();	
		
	}
}
void CIdentityCardQueryDlg::OnBtAdd() 
{
	if (!m_bConnect)
		return;

	UpdateData();

	if (!CheckID(m_strID,true))
	{
		MessageBox(_T("身份证输入有误"));
		return;
	}

	if (m_nAge<1 || m_nAge>150)
	{
		MessageBox(_T("年龄应在1-150之间"));
		return;
	}

	if (m_strName.IsEmpty() || m_strName.GetLength()>=49)
	{
		MessageBox(_T("姓名输入有误"));
		return;
	}

	if (m_strPace.IsEmpty() || m_strPace.GetLength()>=254)
	{
		MessageBox(_T("地址输入有误"));
		return;
	}

	CString strAge = _T(""),strSex = _T("");
	strAge.Format(_T("%d"),m_nAge);
	if (m_ComSexType.GetCurSel()==0)//boy
		strSex = _T("男");
	else
		strSex = _T("女");

	//如果数据库中已经有该ID,则给出提示,是否覆盖已有数据
	CString tablename = _T("");
//	m_comTableName.GetLBText(m_comTableName.GetCurSel(),tablename);
	GetDlgItem(IDC_TABLENAME_ADD)->GetWindowText(tablename);
//	tablename.TrimLeft();tablename.TrimRight();
//	if (tablename.IsEmpty())
	if (!CheckTableName(tablename))
	{
		MessageBox(_T("表名有误"));
		return;
	}

	CheckTableByName(tablename);
	int flag = QueryandChangeRecordByID(m_accessTableArray,m_strID,m_strName,strSex,strAge,m_strPace);
	if ( flag == 1)
	{
		//若修改了数据,注意此时列表是否有该ID,有则更新
		for (int i=0; i<m_DataListCtrl.GetItemCount(); i++)
		{
			if (m_DataListCtrl.GetItemText(i,0) == m_strID)
			{
				m_DataListCtrl.SetItemText(i,1,m_strName);
				m_DataListCtrl.SetItemText(i,2,strSex);
				m_DataListCtrl.SetItemText(i,3,strAge);
				m_DataListCtrl.SetItemText(i,4,m_strPace);

				break;
			}
		}
		return;
	}

	else if (flag == -1)
		AddOneRecord(tablename,m_strID,m_strName,strSex,strAge,m_strPace);	
}

bool CIdentityCardQueryDlg::CheckTableName(CString tablename)
{
	tablename.TrimLeft();tablename.TrimRight();

	if (tablename.IsEmpty()) return false;

	tablename.MakeUpper();
	for (int i='A'; i<='Z'; i++)
	{
		tablename.Remove((TCHAR)i);
	}
	for ( i='0'; i<='9'; i++)
	{
		tablename.Remove((TCHAR)i);
	}

	if (tablename.IsEmpty()) return true;
	else  return false;
}
//搜索所有的表
// 返回值:0---重复不修改 1---重复且修改 -1----不重复
int CIdentityCardQueryDlg::QueryandChangeRecordByID(CStringArray& tablename,CString strID,CString strName,
													CString strSex,CString strAge,CString strPace)
													 
{	
	int flag = -1;
	CString strQry = _T("");
	CString onetable = _T("");
	for (int i=0; i<tablename.GetSize(); i++)
	{
		onetable = tablename[i];
		strQry.Format(_T("select * FROM %s WHERE(ID = '%s')"),onetable,strID);	
		if(!m_pRs.Open((LPCTSTR)strQry))
		{
		//	return -1; 
			flag = -1;
			continue;
		}
		else if (m_pRs.GetRecordCount() <= 0)
		{
		//	return -1;
			flag = -1;
			continue;
		}
		else
		{
			if ( MessageBox(_T("该ID已存在,是否覆盖原有数据?"),_T("提示"),MB_OKCANCEL) != IDOK)
			{
				flag = 0;
				return flag;
		//		return 0;//不覆盖也返回真
			}
			
			m_pRs.Edit();	
			m_pRs.SetFieldValue("ID", strID);					
			m_pRs.SetFieldValue("姓名", m_strName);	
			m_pRs.SetFieldValue("性别", strSex);	
			m_pRs.SetFieldValue("年龄", strAge);	
			m_pRs.SetFieldValue("籍贯", strPace);	
			
			m_pRs.Update();		
			m_pRs.Close();
			
			flag = 1;
			return flag;
		}
	}
	return flag;
}

void CIdentityCardQueryDlg::OnSelchangetype() 
{
	// TODO: Add your control notification handler code here
	if (m_comType.GetCurSel() == 2)
	{
		GetDlgItem(IDC_EDIT_DATA)->EnableWindow(FALSE);
	}
	else
		GetDlgItem(IDC_EDIT_DATA)->EnableWindow(TRUE);
}

CString CIdentityCardQueryDlg::GetExePath()
{
	TCHAR chFileName[256];
	int len = ::GetModuleFileName(NULL, chFileName, 255);
	if (len == 0)
	{
		ASSERT(0);
		return _T("");
	}
	else
	{
		CString fileDir = _T("");
		chFileName[len] = _T('\0');
		fileDir = chFileName;
		int pos = fileDir.ReverseFind('\\');
		fileDir = fileDir.Left(pos+1);
		return fileDir;
	}
}

//添加表 TEXT字段属性,可根据属性限制字段大小
void CIdentityCardQueryDlg::OnBtAddtable() 
{
//	CString strSql = _T("CREATE TABLE new222(ID TEXT(50),姓名 TEXT(10),性别 TEXT(10),年龄 TEXT(10),籍贯 TEXT(255))");
//	.Execute(strSql);

	CStringArray tmparray;
	m_pDb.OpenSchemaX(tmparray);

//	count = m_pRs.GetFieldCount();
}

void CIdentityCardQueryDlg::InitAllTable()
{
//	CStringArray tmparray;
	m_pDb.OpenSchemaX(m_accessTableArray);
}

//根据表名确定表是否存在,不存在则创建新的表
void CIdentityCardQueryDlg::CheckTableByName(CString tablename)
{
	bool bIsExited = false;
	for (int i=0; i<m_accessTableArray.GetSize(); i++)
	{
		if (m_accessTableArray[i] == tablename)
		{
			bIsExited = true;
			break;
		}
		else
			continue;
	}

	if (!bIsExited)
	{
		CString strSql = _T("CREATE TABLE ") + tablename + _T("(ID TEXT(50),姓名 TEXT(10),性别 TEXT(10),年龄 TEXT(10),籍贯 TEXT(255))");
		m_pDb.Execute(strSql);

		//注意添加
		m_accessTableArray.Add(tablename);
		m_comTableName.AddString(tablename);
		m_comTableQuery.AddString(tablename);
	}
//	return false;
}

void CIdentityCardQueryDlg::OnCheckAll() 
{
	// TODO: Add your control notification handler code here
	UpdateData();
		m_comTableQuery.SelectAll(m_bSelectAll);
	
}
CString CIdentityCardQueryDlg::FormatTable(CStringArray& tablearray)
{
	CString strTable = _T("");
	CString tmpstr = _T("");

	if (tablearray.GetSize() <= 0)
		return strTable;
	else if (tablearray.GetSize() == 1)
	{
		strTable = tablearray[0];
		return strTable;
	}
	else
	{
		for (int i=0; i<tablearray.GetSize(); i++)
		{
			tmpstr = tablearray[i] + _T(",");
			strTable += tmpstr;
		}

		strTable.Delete(strTable.GetLength()-1);
		return strTable;
	}
}

void CIdentityCardQueryDlg::OnCancel() 
{
	// TODO: Add extra cleanup here
	
	CDialog::OnCancel();
}

void CIdentityCardQueryDlg::OnSelchangeComboDeltype() 
{
	// TODO: Add your control notification handler code here
	if (m_comDelType.GetCurSel() == 2 || m_comDelType.GetCurSel() == 3)
		GetDlgItem(IDC_EDIT_DELINFO)->EnableWindow(FALSE);
	else
		GetDlgItem(IDC_EDIT_DELINFO)->EnableWindow(TRUE);
}

void CIdentityCardQueryDlg::OnItemchangedListData(NMHDR* pNMHDR, LRESULT* pResult) 
{
	NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;
	// TODO: Add your control notification handler code here

	int nItem = static_cast<int> (pNMListView->iItem);
//	int nSubItem = pNMListView->iSubItem;

	CString strText = _T("");
	m_strID = m_DataListCtrl.GetItemText(nItem,0);//id
	m_strName = m_DataListCtrl.GetItemText(nItem,1);//name
	strText = m_DataListCtrl.GetItemText(nItem,2);//sex
	if (strText == _T("男"))
		m_ComSexType.SetCurSel(0);
	else
		m_ComSexType.SetCurSel(1);
	strText = m_DataListCtrl.GetItemText(nItem,3);//age
	m_nAge = atoi(strText);
	m_strPace = m_DataListCtrl.GetItemText(nItem,4);//pace

	UpdateData(FALSE);
	*pResult = 0;
}

⌨️ 快捷键说明

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