📄 adooperation.cpp
字号:
return TRUE;
}
/*********************************************************************
函数说明: 读取当前记录指定域的值,并返回该值
函数参数: 字段名 、 数据类型 、 指向返回值的指针
*********************************************************************/
BOOL CADOOperation::GetItemContentStr(CString strField, DWORD dwType, void *Variable)
{
ASSERT(!strField.IsEmpty()); // 字段名不能为空
_variant_t variant;
try
{
if (dwType != ADO_TYPE_BITMAP_HANDLE && dwType != ADO_TYPE_TEXT)
{
variant = GetSubItemField(strField); // 读出指定字段的值
ChangeTypeTo(variant, dwType, Variable, 0); // 转换为需要的类型
return TRUE;
}
// 位图类型的文件类型的处理方式与其他类型不同,要注意
if (dwType == ADO_TYPE_BITMAP_HANDLE || dwType == ADO_TYPE_TEXT)
{
long lBits;
lBits = m_pRecordset->GetFields()->GetItem(_bstr_t(strField))->ActualSize; // 得到内容大小
if (lBits <= 0)
{
return TRUE;
}
variant = m_pRecordset->GetFields()->GetItem(_bstr_t(strField))->GetChunk(lBits); // 读出内容
ChangeTypeTo(variant, dwType, Variable, lBits);
}
}
catch (_com_error e)
{
ShowError(e.Description());
return FALSE;
}
return TRUE;
}
/*********************************************************************
函数说明: 添加
函数参数: void
*********************************************************************/
HRESULT CADOOperation::AddNew()
{
return m_pRecordset->AddNew();
}
/*********************************************************************
函数说明: 更新
函数参数: void
*********************************************************************/
BOOL CADOOperation::UpdateData()
{
try
{
m_pRecordset->Update();
}
catch(_com_error e)
{
ShowError(e.Description());
return FALSE;
}
return TRUE;
}
/*********************************************************************
函数说明: 关闭由 OpenRecordset 结果记录集
函数参数: void
*********************************************************************/
void CADOOperation::CloseRecorset()
{
try
{
if(adStateOpen == m_pRecordset->GetState())
{
m_pRecordset->Close();
}
}
catch(_com_error e)
{
return ;
}
}
/*********************************************************************
函数说明: 判断是否有数据
函数参数: void
*********************************************************************/
BOOL CADOOperation::IsLastRow()
{
if(m_pRecordset->adoEOF)
{
return TRUE;
}
return FALSE;
}
/*********************************************************************
函数说明:
函数参数:
*********************************************************************/
BOOL CADOOperation::ExportToWord(CString &strFile)
{
Fields *fields = NULL;
long lCount = 0; // 表头元素个数
m_pRecordset->get_Fields(&fields);
lCount = fields->Count; // 得到表头元素个数
// 以下为 word 应用对象的初始化过程
_Application_Word application; // 创建一个 Word 应用对象
_Document_Word document; // 文档对象
Documents_Word documents; // 文档集对象
Tables_Word tables;
Range_Word range;
_Document_Word saveDoc;
Selection_Word selection;
COleVariant colevariant;
// 关键部分
CComVariant FileFormat(0);
CComVariant LockComments(FALSE);
CComVariant Password(_T(""));
CComVariant AddToRecentFiles(true);
CComVariant WritePassword("");
CComVariant ReadOnlyRecommended(false);
CComVariant EmbedTrueTypeFonts(false);
CComVariant SaveNativePictureFormat(false);
CComVariant SaveFormsData(false);
CComVariant SaveAsAOCELetter(false);
CComVariant FileName(""); //保存的位置
CComVariant Template(_T(""));
CComVariant NewTemplate(false);
CComVariant DocumentType(0);
CComVariant Visible(true);
application.CreateDispatch("Word.Application");
documents.AttachDispatch(application.GetDocuments());
document.AttachDispatch(documents.Add(&Template, //无模板
&NewTemplate, //不是新建模板
&DocumentType,//无类型
&Visible)); //初始不可见
range.AttachDispatch(document.GetContent()); // 把边界附加到文档中
tables.AttachDispatch(document.GetTables()); // 把表类附加到文档中
tables.Add(range, GetRecordCount(), //记录数
lCount, colevariant, colevariant); //添加表格
selection.AttachDispatch(application.GetSelection()); // 把光标附加到应用程序上
CString strText;
BSTR bstr;
_variant_t varField[20];
for(long num = 0; num < lCount; num++)
{
strText.Format("%d", num);
(fields->Item[(long)num])->get_Name(&bstr); // 得到字段名
varField[num] = bstr;
selection.TypeText((char*)(_bstr_t)bstr); //插入数据
// 向右移动一个位置
selection.MoveRight((COleVariant)"1", (COleVariant)"1", (COleVariant)"0");
}
if(!m_pRecordset->adoBOF) // 判断当前数据表是否有数据
{
m_pRecordset->MoveFirst();
}
else
{
goto end;
}
while(!m_pRecordset->adoEOF)
{
for(long num = 0; num < (m_pRecordset->GetFields())->GetCount(); num++)
{
strText.Format("%d", num);
//把对应表头的相关信息输入到Word的表中
selection.TypeText((char *)(_bstr_t)m_pRecordset->GetCollect(varField[num]));
selection.MoveRight((COleVariant)"1", (COleVariant)"1", (COleVariant)"0"); //移动光标
}
m_pRecordset->MoveNext();
}
//保存代码,以下为向 Word 写数据的过程
saveDoc = application.GetActiveDocument(); //得到ActiveDocument
if(strFile.IsEmpty())
{
FileName = GetProgramPath();
// FileName = "C:\\DataBaseTable.doc"; // 默认的保存位置
}
else
{
FileName = strFile;
}
saveDoc.SaveAs(&FileName, &FileFormat, &LockComments, &Password,
&AddToRecentFiles, &WritePassword, &ReadOnlyRecommended,
&EmbedTrueTypeFonts, &SaveNativePictureFormat,
&SaveFormsData,&SaveAsAOCELetter);
//设置Word窗口可见并释放应用程序的资源
application.SetVisible(TRUE);
end:
tables.ReleaseDispatch();
selection.ReleaseDispatch();
documents.ReleaseDispatch();
document.ReleaseDispatch();
application.ReleaseDispatch();
return TRUE;
}
/*********************************************************************
函数说明:
函数参数:
*********************************************************************/
DWORD CADOOperation::GetRecordCount()
{
DWORD dwCount = 1;
if (m_pRecordset->adoEOF)
{
return 0;
}
m_pRecordset->MoveFirst();
do
{
dwCount++;
m_pRecordset->MoveNext();
}
while (!m_pRecordset->adoEOF);
return dwCount;
}
/*********************************************************************
函数说明: 当前所选记录集在表里的位置
函数参数: 通过编号和身份证号来确定
*********************************************************************/
DWORD CADOOperation::GetCurrentRecordIndex(int nID, CString strIDCard)
{
DWORD dwCurIndex = 1;
try
{
_variant_t RecordsAffected;
m_pRecordset =m_pConnection->Execute("SELECT * FROM Employee_BasicInfor_Table",
&RecordsAffected, adCmdText);
m_pRecordset->MoveFirst();
long lID = (long)nID;
_variant_t vCount;
while(!m_pRecordset->adoEOF)
{
vCount = m_pRecordset->GetCollect("employee_ID");
long lIDCom = vCount.lVal;
vCount = m_pRecordset->GetCollect("employee_IDCard");
CString strIDCardCom =(LPCSTR)_bstr_t(vCount);
if(nID == lID && strIDCard == strIDCardCom)
{
return dwCurIndex;
}
dwCurIndex++;
m_pRecordset->MoveNext();
}
m_pRecordset->MoveFirst();
return 0;
}
catch(_com_error e)
{
ShowError(e.Description());
return FALSE;
}
}
/*********************************************************************
函数说明: 移动到第一条记录
函数参数: void
*********************************************************************/
HRESULT CADOOperation::MoveFirst()
{
return m_pRecordset->MoveFirst();
}
/*********************************************************************
函数说明: 移动到下一条
函数参数: void
*********************************************************************/
HRESULT CADOOperation::MoveNext()
{
return m_pRecordset->MoveNext();
}
/*********************************************************************
函数说明: 移动到最后一条记录
函数参数:
*********************************************************************/
HRESULT CADOOperation::MoveLast()
{
return m_pRecordset->MoveLast();
}
/*********************************************************************
函数说明:
函数参数:
*********************************************************************/
BOOL CADOOperation::MoveTo(DWORD dwIndex)
{
try
{
m_pRecordset->Move(dwIndex);
m_CurrentRecord = dwIndex;
}
catch (_com_error e)
{
ShowError(e.Description());
return FALSE;
}
return TRUE;
}
/*********************************************************************
函数说明:
函数参数:
*********************************************************************/
void CADOOperation::SetClientDC(HDC hDC)
{
m_hDC = hDC;
}
/*********************************************************************
函数说明: 获得程序所在绝对路径
函数参数:
*********************************************************************/
CString CADOOperation::GetProgramPath()
{
CString sPath;
CString strFile;
int nPos = 0;
GetModuleFileName(NULL,sPath.GetBufferSetLength (MAX_PATH+1),MAX_PATH);
sPath.ReleaseBuffer ();
nPos=sPath.ReverseFind ('\\');
sPath=sPath.Left (nPos);
strFile = sPath + "\\人事管理导出报表.doc";
return strFile;
}
/*********************************************************************
函数说明: 获取当前最大的编号
函数参数:
*********************************************************************/
int CADOOperation::GetMaxID()
{
_variant_t RecordsAffected;
m_pRecordset = m_pConnection->Execute("SELECT MAX(employee_ID) FROM Employee_BasicInfor_Table",
&RecordsAffected, adCmdText);
_variant_t vIndex = (long)0;
_variant_t vCount = m_pRecordset->GetCollect(vIndex);
return vCount.lVal;
}
/*********************************************************************
函数说明: 获取记录集 指定字段的值,当 bGetAll 为 TRUE 时,strFields 参数无效
函数参数: 指定的字段集、字段个数、返回的字段值集合、是否获取全部字段
*********************************************************************/
void CADOOperation::GetFieldsValue(CString strFields[], int nLen, CString strRetValue[], BOOL bGetAll)
{
_variant_t varIndex;
_variant_t strVal;
CString strInfo;
if (m_pRecordset->adoEOF) // 判断当前是否有记录,没有则返回
{
return;
}
if (bGetAll) // 全部查询
{
for (int j = 0; j < nLen; j++)
{
varIndex = _variant_t((long)(j));
strVal= m_pRecordset->GetCollect(&varIndex);
strInfo.Format("%s", (const char *)_bstr_t(strVal));
strRetValue[j] = strInfo;
}
}
else
{
for (int j = 0; j < nLen; j++)
{
strRetValue[j] = (const char *)_bstr_t(m_pRecordset->GetCollect(_variant_t(strFields[j])));
}
}
}
/*********************************************************************
函数说明: 获取记录集 指定字段的值
函数参数:
*********************************************************************/
void CADOOperation::GetFieldsToShow(CString strFields[], int nLen, CListCtrl* CListShow)
{
int i = 0;
CListShow->DeleteAllItems();
if (m_pRecordset->adoEOF)
{
return;
}
do
{
for (int j = 0; j < nLen; j++)
{
CString *strTemp = new CString[nLen];
strTemp[j] = (const char *)_bstr_t(m_pRecordset->GetCollect(_variant_t(strFields[j])));
if (j == 0)
{
CListShow->InsertItem(i, strTemp[j]);
}
else
{
CListShow->SetItemText(i, j, strTemp[j]);
}
}
m_pRecordset->MoveNext();
i++;
}
while (!m_pRecordset->adoEOF);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -