Ms access 从Access转换为SQL后端(多值字段)

Ms access 从Access转换为SQL后端(多值字段),ms-access,Ms Access,因此,我正在将访问后端转换为SQL。我尝试了几种不同的工具(SSMA、升迁向导和一个简单的导入)。到目前为止,我发现SSMA工具和导入似乎工作得最好,省去了我大部分必要的工作。然而,我遇到了一个我不知道如何克服的问题 两个字段允许多个值(带有复选框的下拉列表)。在转换这些信息的过程中,它不仅不会传递所有信息,而且还会从另一个字段获取信息(并且不会传递这些信息) 我曾尝试强制access只接受第一个值(并一起删除多个值),但它不允许我这样做 有什么想法吗?这应该可以让你开始了。它会将在“多重选择”

因此,我正在将访问后端转换为SQL。我尝试了几种不同的工具(SSMA、升迁向导和一个简单的导入)。到目前为止,我发现SSMA工具和导入似乎工作得最好,省去了我大部分必要的工作。然而,我遇到了一个我不知道如何克服的问题

两个字段允许多个值(带有复选框的下拉列表)。在转换这些信息的过程中,它不仅不会传递所有信息,而且还会从另一个字段获取信息(并且不会传递这些信息)

我曾尝试强制access只接受第一个值(并一起删除多个值),但它不允许我这样做


有什么想法吗?

这应该可以让你开始了。它会将在“多重选择”字段中选择的所有值转换为它们自己的表。您需要在三个表之间建立关系,以便在事后创建真正的多对多关系

Sub ExtractMultiValueFields()

    Dim JoinTable As New DAO.TableDef
    JoinTable.Name = "JoinTable"
    With JoinTable

        .Fields.Append .CreateField("MainTableId", dbInteger)
        .Fields.Append .CreateField("JoinToValue", dbText)
    End With

    Dim joinRs As DAO.Recordset

     CurrentDb.TableDefs.Append JoinTable

    Set joinRs = CurrentDb.OpenRecordset("JoinTable")

    Dim rs As DAO.Recordset
    Dim childrs As DAO.Recordset
    Set rs = CurrentDb.OpenRecordset("select * from table1")
    Do While Not rs.EOF
        Debug.Print rs("ID")
        Set childrs = rs("col1").Value
        Do While Not childrs.EOF
            Debug.Print childrs("value")    'always "value"
            joinRs.AddNew
                joinRs("MainTableId") = rs("ID")
                joinRs("JoinToValue") = childrs("value")
            joinRs.Update
            childrs.MoveNext
        Loop
        rs.MoveNext
    Loop

End Sub

这应该让你开始。它会将在“多重选择”字段中选择的所有值转换为它们自己的表。您需要在三个表之间建立关系,以便在事后创建真正的多对多关系

Sub ExtractMultiValueFields()

    Dim JoinTable As New DAO.TableDef
    JoinTable.Name = "JoinTable"
    With JoinTable

        .Fields.Append .CreateField("MainTableId", dbInteger)
        .Fields.Append .CreateField("JoinToValue", dbText)
    End With

    Dim joinRs As DAO.Recordset

     CurrentDb.TableDefs.Append JoinTable

    Set joinRs = CurrentDb.OpenRecordset("JoinTable")

    Dim rs As DAO.Recordset
    Dim childrs As DAO.Recordset
    Set rs = CurrentDb.OpenRecordset("select * from table1")
    Do While Not rs.EOF
        Debug.Print rs("ID")
        Set childrs = rs("col1").Value
        Do While Not childrs.EOF
            Debug.Print childrs("value")    'always "value"
            joinRs.AddNew
                joinRs("MainTableId") = rs("ID")
                joinRs("JoinToValue") = childrs("value")
            joinRs.Update
            childrs.MoveNext
        Loop
        rs.MoveNext
    Loop

End Sub

多值字段用于与Sharepoint兼容。您可能需要将它们转换为1对多表结构。你好,Brad,谢谢您的回复。你认为什么是转化他们的最好方式?布拉德,我感谢你的帮助。然而,不幸的是,我没有取得任何进展。跳过迁移部分,提出了一个“向前”的解决方案,我的理解是我应该使用连接表,可能需要进行一些编码来识别多个选择。你有什么我可以在实践中看到的例子吗?我下车后给你举个例子。为了与Sharepoint兼容,atmmultivalue字段被淹没了。您可能需要将它们转换为1对多表结构。你好,Brad,谢谢您的回复。你认为什么是转化他们的最好方式?布拉德,我感谢你的帮助。然而,不幸的是,我没有取得任何进展。跳过迁移部分,提出了一个“向前”的解决方案,我的理解是我应该使用连接表,可能需要进行一些编码来识别多个选择。你有什么我可以在实践中看到的例子吗?我下车后给你举个例子。一种被淹没的自动取款机