彻底隐藏ACCESS文件所有的基本表包括链接表及系统表函数

因为系统的安全着想,所以想彻底隐藏所有的重要的表.之前在网上看到相关的文章,一种方法是将表的名称前面加一个前缀"USYS",将用户自己的表变成系统表,以起到隐藏的目的.但是,如果有心人将工具菜单的选项中的系统对象勾选,则还是会被显示出来.

另外一种方法是用代码隐藏表.在网上看到例子,只是我实际运行时,发现不能隐藏链接表.

以下这段代码可以隐藏系统中所有的表和链接表.而且不能通过一般办法使其恢复显示.如果要恢复,只需要将下段代码改改就行.

这段代码在执行时我将系统表排除在外了,如果不排除系统表的话,则会连系统表一起给隐藏掉了.

 

Function chediyincangbiao()     '彻底隐蔽所有的表格包括链接表及系统表等

On Error GoTo Err_Command0_Click
Dim db As Database
Dim i As Integer
    Set db = DBEngine.Workspaces(0).Databases(0)
   
    db.TableDefs.Refresh
    For i = 0 To db.TableDefs.Count - 1
    '此项操作应避开系统表,以免将系统表属性改而造成问题.
      If db.TableDefs(i).name = "msysaccessobjects" or db.TableDefs(i).name = "MSYSACCESSXML" _
      or db.TableDefs(i).name = "MSYSACES" or db.TableDefs(i).name = "MSYSOBJECTS" _
      or db.TableDefs(i).name = "MSYSQUERIES" or db.TableDefs(i).name = "MSYSRELATIONSHIPS" Then
     
    Else
       CurrentDb.TableDefs(db.TableDefs(i).name).Attributes = 1
    End If
    Next i
    Set db = Nothing
MsgBox "当前数据库中的所有表格都已被隐藏."

Exit_Command0_Click:
    Exit Function

Err_Command0_Click:
    MsgBox Err.Description
    Resume Exit_Command0_Click

End Function

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: MFC(Microsoft Foundation Classes)是微软提供的一套C++类库,用于开发Windows应用程序。要使用MFC来读取所有Excel内容,可以通过使用COM技术与Excel进行交互来实现。 首先,需要链接到Excel的COM组件,然后创建一个Excel应用程序对象。接下来,打开Excel文件,并获取工作簿和工作对象。通过遍历工作中的所有单元格,可以逐个读取单元格的数据。 以下是一个简单的示例代码: ```cpp #include "afx.h" #include "afxdisp.h" void ReadExcelData() { // 初始化COM库 CoInitialize(NULL); try { // 创建Excel应用程序对象 CApplication excelApp; // 打开Excel文件 _WorkbookPtr workbook = excelApp.Workbooks->Open(L"文件路径"); // 获取第一个工作 _WorksheetPtr worksheet = workbook->Worksheets->Item[1]; // 获取工作的行数和列数 RangePtr usedRange = worksheet->UsedRange; long rowCount = usedRange->Rows->Count; long columnCount = usedRange->Columns->Count; // 遍历所有单元格并读取数据 for (long row = 1; row <= rowCount; ++row) { for (long column = 1; column <= columnCount; ++column) { RangePtr cell = worksheet->Cells->Item[row][column]; _variant_t cellValue = cell->Value; // 处理单元格数据,这里可以根据需要进行操作 // 输出单元格数据 CString strCellValue(cellValue); TRACE(_T("%s\t"), strCellValue); } TRACE(_T("\n")); } // 关闭Excel文件 workbook->Close(); // 退出Excel应用程序 excelApp.Quit(); } catch (_com_error& e) { // 处理错误 AfxMessageBox(e.ErrorMessage()); } // 释放COM资源 CoUninitialize(); } ``` 以上代码通过COM接口与Excel进行交互,打开指定的Excel文件,并逐个读取工作中的每个单元格的数据。 需要注意的是,使用MFC读取Excel需要在项目中添加对"afxdisp.h"的引用,并在程序中使用`_com_error`来处理异常情况。 希望以上回答能对您有所帮助。 ### 回答2: 在MFC中,我们可以使用OLEDB来读取所有Excel内容。首先,我们需要在项目中添加OLEDB库。 1. 创建一个新的MFC应用程序项目。 2. 打开资源视图,在资源视图中右键单击“资源文件”并选择“导入”。 3. 选择Excel文件并导入,这将生成一个新的OLEDB数据源。 4. 打开你想要读取数据的类的.h文件并添加以下代码: ```cpp #include <atlbase.h> #include <atlconv.h> #import "C:\Program Files\Common Files\System\ado\msado15.dll" no_namespace rename("EOF", "adoEOF") class CMyExcelReader { public: CMyExcelReader(); ~CMyExcelReader(); bool OpenExcelFile(LPCTSTR lpszFileName); void CloseExcelFile(); CString GetCellData(int nRow, int nColumn); private: _ConnectionPtr m_pConnection; _RecordsetPtr m_pRecordset; }; ``` 5. 打开.cpp文件并添加以下代码: ```cpp CMyExcelReader::CMyExcelReader() { CoInitialize(NULL); } CMyExcelReader::~CMyExcelReader() { CoUninitialize(); } bool CMyExcelReader::OpenExcelFile(LPCTSTR lpszFileName) { HRESULT hr = m_pConnection.CreateInstance(__uuidof(Connection)); CString strConnectionString; strConnectionString.Format(_T("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=%s;Extended Properties=\"Excel 12.0;HDR=NO;IMEX=1\";"), lpszFileName); hr = m_pConnection->Open((_bstr_t)strConnectionString, "", "", adConnectUnspecified); if (SUCCEEDED(hr)) { m_pRecordset = m_pConnection->Execute(_T("SELECT * FROM [Sheet1$]"), NULL, adCmdText); return true; } return false; } void CMyExcelReader::CloseExcelFile() { if (m_pRecordset != NULL) { m_pRecordset->Close(); m_pConnection->Close(); } } CString CMyExcelReader::GetCellData(int nRow, int nColumn) { CString strResult; m_pRecordset->MoveFirst(); m_pRecordset->Move(nRow); _variant_t vtValue = m_pRecordset->Fields->GetItem((long)nColumn)->GetValue(); strResult = (LPCWSTR)(_bstr_t)vtValue; return strResult; } ``` 6. 在你的应用程序中,你可以这样使用这个类: ```cpp CMyExcelReader myReader; if (myReader.OpenExcelFile(_T("你的Excel文件路径"))) { CString strData = myReader.GetCellData(1, 1); // 读取第一行第一列的数据 // 处理数据 myReader.CloseExcelFile(); } ``` 这样,你就可以使用MFC读取所有Excel内容了。请确保你的本地计算机上安装了Microsoft Access数据库引擎。 ### 回答3: MFC是微软基于C++开发的一套工具,可以用于Windows平台上的软件开发。如果想要通过MFC读取Excel文件中的所有内容,可以使用Microsoft Excel的OLE Automation功能。 首先,需要在MFC应用程序中添加Microsoft Excel的类型库。可以通过以下步骤完成: 1. 打开Visual Studio的资源视图。 2. 在资源视图中,找到应用程序资源,右键点击并选择“添加”->“添加类”。 3. 在“添加类”对话框中,选择“从类型库导入”,然后选择“Microsoft Excel xx.x Object Library”(xx.x代Excel的版本号)。 4. 点击“添加”,然后在类向导中选择需要的类和接口。 接下来,可以使用MFC的COleVariant类和Excel的对象模型来读取Excel的内容。下面是一个简单示例的代码,用于读取Excel文件中的所有单元格内容: ```cpp #include "stdafx.h" #include <afxdisp.h> void ReadExcelContent() { // 启动Excel应用程序 CoInitialize(NULL); _Application excelApp; excelApp.CreateDispatch(L"Excel.Application"); // 打开Excel文件 _Workbook workbook; _Worksheet worksheet; COleVariant covOptional((long)DISP_E_PARAMNOTFOUND, VT_ERROR); workbook.AttachDispatch(excelApp.get_Workbooks().Open(L"D:\\example.xls", covOptional, covOptional, covOptional, covOptional, covOptional, covOptional, covOptional, covOptional, covOptional, covOptional, covOptional, covOptional, covOptional)); worksheet.AttachDispatch(workbook.get_Worksheets().get_Item(COleVariant((short)1))); // 获取工作的行数和列数 long rowCount = worksheet.get_UsedRange().get_Rows().get_Count(); long colCount = worksheet.get_UsedRange().get_Columns().get_Count(); // 遍历并读取所有单元格内容 for (long row = 1; row <= rowCount; row++) { for (long col = 1; col <= colCount; col++) { COleVariant cellValue; cellValue.AttachDispatch(worksheet.get_Cells().get_Item(COleVariant(row), COleVariant(col)).get_Value()); // 将单元格内容转换为字符串并输出 CString strCellValue(cellValue); TRACE(_T("%s\t"), strCellValue); cellValue.DetachDispatch(); } TRACE(_T("\n")); } worksheet.ReleaseDispatch(); workbook.ReleaseDispatch(); excelApp.Quit(); excelApp.ReleaseDispatch(); CoUninitialize(); } ``` 以上代码的思路是,首先通过CoInitialize函数进行OLE初始化,然后创建Excel应用程序的Dispatch接口对象。接着,通过AttachDispatch函数打开Excel文件,获取工作对象,然后通过get_UsedRange函数获取工作的行数和列数。最后,使用双层循环和get_Cells函数,遍历并读取每个单元格的内容,并通过COleVariant和CString进行类型转换。 在代码的最后,通过ReleaseDispatch和Quit函数释放Excel对象,然后通过CoUninitialize函数释放OLE相关资源。 上述代码仅是一个简单示例,实际使用需要根据具体需求进行修改和处理错误情况。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值