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

📄 adodatabase.cpp

📁 随着计算机信息技术的飞速发展
💻 CPP
📖 第 1 页 / 共 2 页
字号:
	if(IsRight==FALSE)
	{
		sErrMsg=_T("修改记录不成功!");//,_T("修改记录"),MB_ICONERROR);
		return FALSE;
	}
	return TRUE;
}

//  设置记录的数据
BOOL CADODataBase::SetValue()    
{
	int nVaule=m_values.GetSize();
	if(nVaule==0)
		return TRUE;
	Fields  *pFields;      //   字段的对象指针
	Field   *pField;       //   某个字段的对象指针
	Field20 *Field20;      //   ADO2.0 某个字段的对象指针
	VARIANT value;
	_variant_t vaEmpty;
	ISTRUE(pRec->get_Fields(&pFields));//获得字段的对象指针
	::VariantInit(&value);
	long nItem;
	ISTRUE(pFields->get_Count(&nItem));//获得字段的数量
	int nCount;
	if(nVaule>nItem)
		nCount=nItem;
	else
		nCount=nVaule;

	CString szValue;
	for(int i=0;i<nCount;i++)
	{
		szValue=m_values.GetAt(i);
		if(szValue==_T(""))
			continue;
		if(nAdoVer==3)     //ADO 3.0版本
		{
			ISTRUE(pFields->get_Item(_variant_t((long)i),&pField));
			ISTRUE(pField->put_Value(_variant_t(szValue)));
		}
		else               //ADO 2.0版本
		{
			ISTRUE(pFields->get_Item(_variant_t((long)i),(struct Field**)&Field20));
			ISTRUE(Field20->put_Value(_variant_t(szValue)));
		}
	}
	ISTRUE(pRec->Update(vaEmpty,vaEmpty));
//	m_values.RemoveAll();
	return TRUE;
}

//*****  删除第 nIndex 条记录  ***//
BOOL CADODataBase::DelRecord(int nIndex)
{
	if(nIndex<0)
	{
	    AfxMessageBox(_T("删除记录时,指定记录序号超界!"),MB_ICONINFORMATION);
		return FALSE;
	}
	long nCount=GetRecordNumber();
	if(nIndex>=nCount)
	{
	    sErrMsg=_T("删除记录时,指定记录序号超界!");//,MB_ICONINFORMATION);
		return FALSE;
	}
	if(!Move(nIndex))
		return FALSE;
	_variant_t vaEmpty;
	pRec->Delete(1);
	MoveFirst();
	pRec->Update(vaEmpty,vaEmpty);
	return TRUE;
}
//DEL BOOL CADODataBase::ChangeOrder(int nIdex1,int nIdex2)
//DEL {
//DEL 	if(nIdex1<0||nIdex1>=(int)GetRecordNumber())
//DEL 	{
//DEL 	    AfxMessageBox(_T("交换记录时,指定记录序号超界!"),MB_ICONINFORMATION);
//DEL 		return FALSE;
//DEL 	}
//DEL 	if(nIdex2<0||nIdex2>=(int)GetRecordNumber())
//DEL 	{
//DEL 	    AfxMessageBox(_T("交换记录时,指定记录序号超界!"),MB_ICONINFORMATION);
//DEL 		return FALSE;
//DEL 	}
//DEL 	CArray<CString,CString> record;
//DEL 	ReadRecord(nIdex1);
//DEL 	int num=m_values.GetSize();
//DEL //	if(num==0)
//DEL 	CString str;
//DEL 	for(int i=0;i<num;i++)
//DEL 	{
//DEL 		str=m_values.GetAt(i);
//DEL 		record.SetAt(i,str);
//DEL 	}
//DEL 	AfxMessageBox(_T("在交换记录"));
//DEL 	m_values.RemoveAll();
//DEL     ReadRecord(nIdex2);
//DEL 	MotifyRecord(nIdex1);
//DEL     m_values.RemoveAll();
//DEL     for(i=0;i<num;i++)
//DEL 	{
//DEL 		str=record.GetAt(i);
//DEL 		m_values.SetAt(i,str);
//DEL 	}
//DEL     MotifyRecord(nIdex2);
//DEL 	m_values.RemoveAll();
//DEL 	record.RemoveAll();
//DEL 	return TRUE;
//DEL }

//*****  当前指针指向第一个记录   *****//
BOOL CADODataBase::MoveFirst()
{
	hr=pRec->MoveFirst();
	if(hr!=S_OK)
		return FALSE;
	dwIndex=0;
	return TRUE;
}

//*****  当前指针指向最后一个记录   ******//
BOOL CADODataBase::MoveLast()
{
	hr=pRec->MoveLast();
	if(hr!=S_OK)
		return FALSE;
	dwIndex=GetRecordNumber()-1;
	return TRUE;
}

//*****  当前指针移动到后一个记录   *****///
BOOL CADODataBase::MoveNext()
{
	hr=pRec->MoveNext();
	if(hr!=S_OK)
		return FALSE;
	dwIndex++;
	return TRUE;
}

//*****  当前指针移动到前一个记录  ***//
BOOL CADODataBase::MovePrevious()
{
	hr=pRec->MovePrevious();
	if(hr!=S_OK)
		return FALSE;
	dwIndex--;
	return TRUE;
}

//*****  当前指针移动到  第 nIndex 条记录  ***//
BOOL CADODataBase::Move(int nIndex)
{
	if(nIndex>=(int)GetRecordNumber()||nIndex<0)
	{
	    AfxMessageBox(_T("移动指针时,指定记录序号超界!"),MB_ICONINFORMATION);
		return FALSE;
	}
	if(nIndex>(int)dwIndex)
		for(int i=dwIndex;i<nIndex;i++)
			hr=pRec->MoveNext();
	if(nIndex<(int)dwIndex)
		for(int i=dwIndex;i>nIndex;i--)
			hr=pRec->MovePrevious();
	if(hr!=S_OK)
		return FALSE;
	dwIndex=nIndex;
	return TRUE;
}

//*****  获取记录条目数  ***//
DWORD CADODataBase::GetRecordNumber()
{
	long dwCount=0;
	pRec->get_RecordCount(&dwCount);
	return dwCount;
}

//获得数据库表的名称
BOOL CADODataBase::GetTableLst(CString sDBName)
{
	CString  sql;
	sql.Format(_T("SELECT tablename FROM MSystables WHERE tablename NOT LIKE 'MSys*'"));/**/
	hr=pRec->Open(_variant_t(sql.GetBuffer(0)),_variant_t(sDBName.GetBuffer(0)), adOpenDynamic,adLockOptimistic,1);   //  建立与数据库的关联
	if(hr!=S_OK)	
	{	
		sErrMsg.Format(_T("打开数据库“%s”不成功!"),sDBName);
		return FALSE;
	}
	long n;
	pRec->get_RecordCount( &n );   //  获得记录数目
//	sql.Format(_T("n=%d"),n);
//	AfxMessageBox(sql);
	CStringArray asTableName;
	asTableName.RemoveAll();
	for(int i=0; i<n; i++)
	{
		ReadRecord(i);            //  读取每条记录
		asTableName.Add(m_values.GetAt(0));
//		AfxMessageBox(m_values.GetAt(0));
	}
	m_values.RemoveAll();
	for(i=0; i<n; i++)
	{
		m_values.Add(asTableName.GetAt(i));
	}
	asTableName.FreeExtra();
//	AfxMessageBox(_T("123"));
	return TRUE;
}

//删除数据库sDBName中的表sTableName
BOOL CADODataBase::DeleteTable(CString sTableName, CString sDBName)
{
	CString sql;
	sql.Format(_T("DROP TABLE %s"),sTableName);
	hr=pRec->Open(_variant_t(sql.GetBuffer(0)),_variant_t(sDBName.GetBuffer(0)),adOpenDynamic,adLockOptimistic,1);
	if(hr!=S_OK)
	{
		sErrMsg.Format(_T("打开数据库“%s”的表“%s”不成功,请检查路径是否正确或表是否存在!"),sDBName,sTableName);
		return FALSE;
	}
	return TRUE;
}

//获取字段名称
BOOL CADODataBase::GetFieldName()
{
	m_values.RemoveAll();
	Fields *pFields;
	Field *pField;
	Field20 *Field20;
	long FldCnt;
	pRec->get_Fields(&pFields);
	pFields->get_Count(&FldCnt);
	BSTR  pVal;
	CString str;
	for(int i=0;i<FldCnt;i++)
	{
		if(nAdoVer==3)  //ADOCE 2.0  版本
		{
			ISTRUE(pFields->get_Item(_variant_t((long)i),&pField));
			ISTRUE(pField->get_Name(&pVal)); //ADOCE30
		}
		else  //ADOCE 2.0  版本
		{
			ISTRUE(pFields->get_Item(_variant_t((long)i),(struct Field**)&Field20));
			ISTRUE(Field20->get_Name(&pVal)); //ADOCE20
		}
		str.Format(_T("%s"),(LPCSTR)pVal);
		m_values.Add(str);
	}
	return TRUE;
}

//获取字段类型
BOOL CADODataBase::GetFieldType()
{
	m_values.RemoveAll();
	Fields *pFields;
	Field *pField;
	Field20 *Field20;
	long FldCnt;
	pRec->get_Fields(&pFields);
	pFields->get_Count(&FldCnt);
	DataTypeEnum pVal;
	CString str;
	for(int i=0;i<FldCnt;i++)
	{
		if(nAdoVer==3)  //ADOCE 2.0  版本
		{
			ISTRUE(pFields->get_Item(_variant_t((long)i),&pField));
			ISTRUE(pField->get_Type(&pVal)); //ADOCE30
		}
		else  //ADOCE 2.0  版本
		{
			ISTRUE(pFields->get_Item(_variant_t((long)i),(struct Field**)&Field20));
			ISTRUE(Field20->get_Type(&pVal)); //ADOCE20
		}
		str=EnumToType(pVal);
		m_values.Add(str);
	}
	return TRUE;
}

//字段类型转换(类型编码====〉类型名称)
CString CADODataBase::EnumToType(int nEnum)
{
	CString sFieldType;
	switch(nEnum)
	{
	case 2:
		sFieldType=_T("SmallInt");
		break;
	case 3:
		sFieldType=_T("integer");
		break;
	case 5:
		sFieldType=_T("Double/float");
		break;
	case 7:
		sFieldType=_T("Date/Time");
		break;
	case 11:
		sFieldType=_T("Boolean/Bit");
		break;
	case 18:
		sFieldType=_T("UnsignedSmallInt");
		break;
	case 19:
		sFieldType=_T("UnsignedInt");
		break;
	case 202:
		sFieldType=_T("WChar/Text");
		break;
	case 203:
		sFieldType=_T("LongWChar/Memo");
		break;
	case 205:
		sFieldType=_T("LongBinary/OLE Object");
		break;
	case 204:
		sFieldType=_T("Binary");
		break;
//	case 20:
//		sFieldType=_T("BigInt");
//		break;
//	case 128:
//		sFieldType=_T("Binary");
//		break;
//	case 8:
//		sFieldType=_T("BSTR");
//		break;
//	case 129:
//		sFieldType=_T("Char");
//		break;
//	case 6:
//		sFieldType=_T("Currency");
//		break;
	default:
		sFieldType=_T("未知");
		break;
	}
	return sFieldType;
}

⌨️ 快捷键说明

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