如何在从表单中读取数据时阻止打开MS Access数据库

时间:2009-01-09 08:56:34

标签: vb.net ms-access

要使用vb.net从MS-Access表单计算Activex控件,我将使用连接作为以下内容..

oDBEngine = oAccess.DBEngine oDB = oDBEngine.OpenDatabase(Name:= strFullFileName,Options:= False,ReadOnly:= False,Connect:=“”)

并在设计模式中打开表单,因为有一个用户输入提示表单,如果我们在默认视图中打开它,则阻止我们进一步运行该应用程序。

oAccess.DoCmd.OpenForm(FormName:= objForms.Name,View:= AcFormView.acDesign)

现在的问题是:

DataBase打开,并且在运行应用程序时打开所有表单。无论如何我们只是在阅读表格时阻止打开数据库和表单。

谢谢。

2 个答案:

答案 0 :(得分:2)

听起来像一个未分离的应用程序(单个MDB文件中的表和表单等),并且它被多个用户共享。这是一个灾难性的场景。有关所有详细信息,请参阅Splitting your Microsoft Access MDB into a front end and back end

一旦拆分,您就可以处理单个副本,然后将更新分发给用户。关键是,自2000版以来,任何用户打开Access MDB(而不是数据)的设计都无法编辑。

答案 1 :(得分:1)

它可能适合使用新的空数据库并以编程方式导入表单。可以从MSysObjects获取表单列表(表单类型为-32768)。

例如:

SELECT MsysObjects.Name
FROM MsysObjects IN 'C:\docs\LTD.mdb'
WHERE MsysObjects.Type=-32768

编辑评论 此代码将放在BLANK Access数据库中。

strSQL = "SELECT MsysObjects.Name " _
& "FROM MsysObjects IN 'C:\docs\LTD.mdb' " _
& "WHERE MsysObjects.Type = -32768"

Set rs = CurrentDb.OpenRecordset(strSQL)

Do While Not rs.EOF
    DoCmd.TransferDatabase acImport, "Microsoft Access", _
    "C:\docs\LTD.mdb", acForm, rs![Name], rs![Name]

    'Do what ever you wish with form, then '

    DoCmd.DeleteObject acForm, rs![Name]

    rs.MoveNext
Loop