📄 adodatabase.cpp
字号:
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 + -