从基于访问构建的数据库中提取数据

时间:2016-12-19 20:54:01

标签: database ms-access

如何使用访问权限打开数据库,而不是通过它运行的GUI?

嗨,我正在尝试从基于访问构建但不使用访问权限的数据库中提取数据。这是一款名为" Gemma"这是由Castle Personnel在1999年发布的。他们不再为他们的数据库提供支持,我们作为一家公司正在尝试迁移到不同的基于浏览器的在线数据库。

打开Gemma时,它不会通过Access打开,但有自己的GUI。当我打开数据库的位置时,它将保存为.mdb 有一天我正在玩这些文件,当我选择了一个数据库时,点击了shift。它打开了Access中的整个数据库,这显然让我可以访问所有数据。但是,这种方法似乎不再起作用了。

非常感谢任何帮助

3 个答案:

答案 0 :(得分:1)

只需启动Access的副本,然后打开相关数据库。如您所知,在大多数情况下按住Shift键可以工作(但可以禁用)。 所以请注意我建议首先打开Access(不是通过点击一个mdb文件启动访问,然后根据文件扩展名启动Access)。

如果以上操作不起作用(按住shift键),则只需创建一个空白的新数据库,然后从mdb导入所有对象。我推荐这个过程:

您不必编写代码(根据此处的其他帖子)

导入会删除所有启动设置(从而解决所有启动代码设置)。

从该应用程序导入表时,您可以(应该)使用较新版本的Access。

所以不要尝试打开该访问文件 - 启动Access并创建一个空白文件然后导入表。

答案 1 :(得分:0)

由于它只是后端内容,因此您无需担心表单或报告。您可以使用ODBC以编程方式打开数据库,读取tabledef,读取每个表中的字段,然后在空白数据库中创建表。类似的东西:

        angular.extend(self,{
            criteria: { 
              get agencies() {
                if (!self._agencies) { 
                  self._agencies = self.getAgencies();
                }
                return self._agencies;
              }
            },
            getAgencies: ...
        });

以类似的方式,您将重新创建所有关系,宏,查询和模块。然后,只需使用类似的代码将它们复制过来:

For Each tblRep In dbRep.TableDefs
Set rec1 = dbRep.OpenRecordset("SELECT MSysObjects.Name FROM MsysObjects WHERE ([Name] = '" & tblRep.Name & "') AND ((MSysObjects.Type)=4 or (MSysObjects.Type)=6)")

If rec1.EOF Then
  XF = 0
Else
  XF = 1
End If

    ' Ignore system tables and CMDB tables.
    If InStr(1, tblRep.Name, "MSys", vbTextCompare) = 0 And _
        InStr(1, tblRep.Name, "CMDB", vbTextCompare) = 0 And _
        XF = 0 Then

        '***** Table definition
        ' Create a table definition with the same name.
        Set tblNew = dbNew.CreateTableDef(tblRep.Name)

        ' Set properties.
        tblNew.ValidationRule = tblRep.ValidationRule
        tblNew.ValidationText = tblRep.ValidationText

        ' Loop through the collection of fields in the table.
        For Each fldRep In tblRep.Fields

            ' Ignore replication-related fields:
            ' Gen_XXX, s_ColLineage, s_Generation, s_GUID, s_Lineage
            If InStr(1, fldRep.Name, "s_", vbTextCompare) = 0 And _
                InStr(1, fldRep.Name, "Gen_", vbTextCompare) = 0 Then

                '***** Field definition
                Set fldNew = tblNew.CreateField(fldRep.Name, fldRep.Type, _
                    fldRep.Size)

                ' Set properties.
                On Error Resume Next
                fldNew.Attributes = fldRep.Attributes
                fldNew.AllowZeroLength = fldRep.AllowZeroLength
                fldNew.DefaultValue = fldRep.DefaultValue
                fldNew.Required = fldRep.Required
                fldNew.Size = fldRep.Size

                ' Append the field.
                tblNew.Fields.Append fldNew
                'On Error GoTo Err_NewShell
            End If
        Next fldRep

        '***** Index definition

        ' Loop through the collection of indexes.
        For Each idxRep In tblRep.Indexes

            ' Ignore replication-related indexes:
            ' s_Generation, s_GUID
            If InStr(1, idxRep.Name, "s_", vbTextCompare) = 0 Then

                ' Ignore indices set as part of Relation Objects
                If Not idxRep.Foreign Then

                    ' Create an index with the same name.
                    Set idxNew = tblNew.CreateIndex(idxRep.Name)

                    ' Set properties.
                    idxNew.Clustered = idxRep.Clustered
                    idxNew.IgnoreNulls = idxRep.IgnoreNulls
                    idxNew.Primary = idxRep.Primary
                    idxNew.Required = idxRep.Required
                    idxNew.Unique = idxRep.Unique

                    ' Loop through the collection of index fields.
                    For Each fldRep In idxRep.Fields
                        ' Create an index field with the same name.
                        Set fldNew = idxNew.CreateField(fldRep.Name)
                        ' Set properties.
                        fldNew.Attributes = fldRep.Attributes
                        ' Append the index field.
                        idxNew.Fields.Append fldNew
                    Next fldRep

                    ' Append the index to the table.
                    tblNew.Indexes.Append idxNew
                End If
            End If
        Next idxRep

        ' Append the table.
        dbNew.TableDefs.Append tblNew
    End If
Next tblRep

答案 2 :(得分:0)

创建空的Access数据库并将表从MDB文件链接到新数据库。您应该能够从链接表中执行查询和报告,或者可能备份和移动数据。

我强烈建议首先备份所有数据,然后再进行任何更改。