在SQL Server中创建外键时出错,但是在Access 2013中的本地数据库中却没有此错误

问题描述 投票:0回答:1

我正在尝试使用以下过程在表中创建外键。当我在Access 2013中工作并且连接是本地的时,一切正常,但是如果我尝试在SQL Server中连接同一数据库,则会发生

错误-2147217792(MatchType无效或不支持该值由提供者)

您对错误原因有任何了解吗?

Private m_objm_conn As ADODB.Connection

Function CreaRelacionUnoAInfinito(StrNombreTablaUno As String, _
                                        StrNombreTablaInfinito As String, _
                                        StrNombreCampoUno As String, _
                                        StrNombreCampoInfinito As String, _
                                        Optional BlnSQLServer As Boolean) As Boolean

        Dim cat As New ADOX.Catalog         'El catálogo ADOX
        Dim kyPrimary As New ADOX.key       'Clave foránea ADOX
        Dim StrNombreRelacion As String     'El nombre de la relación a crear

        Dim strError As String

        On Error GoTo CreaRelacionUnoAInfinito_Error

        strError = ConectarADO(BlnSQLServer:=BlnSQLServer, _
                                BlnConectar:=True)

        'Si no he podido conectar con ADO
        If strError <> "" Then

            Exit Function

        Else

            'Consigo el catálogo
            Set cat.ActiveConnection = m_conn

            'DEFINO LA CLAVE FORÁNEA

            'Asigno el nombre de la relación
            StrNombreRelacion = "FK_" & StrNombreTablaInfinito & "_" & StrNombreTablaUno
            kyPrimary.Name = StrNombreRelacion

            'Le digo que es foránea (tipo adKeyForeign)
            kyPrimary.Type = adKeyForeign

            'Le digo la tabla uno relacionada
            kyPrimary.RelatedTable = StrNombreTablaUno

            'Agrego columna de campo infinito a la clave
            kyPrimary.Columns.Append StrNombreCampoInfinito

            'Le asigno al cmpo principal (StrNombreCampoInfinito) el campo relacionado (StrNombreCampoUno)
            kyPrimary.Columns(StrNombreCampoInfinito).RelatedColumn = StrNombreCampoUno

            'Le digo que no elimine nada
            kyPrimary.UpdateRule = adRICascade

            'Agrego la relación creada a la tabla principal (StrNombreTablaInfinito)
            cat.Tables(StrNombreTablaInfinito).Keys.Append kyPrimary

            'He terminado
            CreaRelacionUnoAInfinito = True

            Set cat = Nothing
            Set kyPrimary = Nothing

            On Error GoTo 0
            Exit Function

        End If

    CreaRelacionUnoAInfinito_Error:

        MsgBox "Error " & Err.Number & " (" & Err.Description & ") en el procedimiento " & _
                "CreaRelacionUnoAInfinito al relacionar las tablas " & StrNombreTablaUno & " y " & _
                StrNombreTablaInfinito & "."

        Debug.Print "Error " & Err.Number & " (" & Err.Description & ") en el procedimiento " & _
                "CreaRelacionUnoAInfinito al relacionar las tablas " & StrNombreTablaUno & " y " & _
                StrNombreTablaInfinito & "."

        Set cat = Nothing
        Set kyPrimary = Nothing

        CreaRelacionUnoAInfinito = False
        Exit Function

    End Function

Function ConectarADO(Optional BlnSQLServer As Boolean, _
                        Optional BlnConectar As Boolean = True) As String

    On Error GoTo ConectarADO_Error

        'Si voy a conectar
        If BlnConectar Then

            'Si voy a establecer conexion con SQL Server
            If BlnSQLServer Then

                'ABRO UNA CONEXIÓN CON LA DB
                Set m_conn = New ADODB.Connection

                m_conn.Open "Provider=sqloledb;" & _
                    "Data Source=INGENIERO-PC\SQLEXPRESS;" & _
                    "Initial Catalog=FOAGEST20;" & _
                    "User Id=ADMIN;" & _
                    "Password=revanna"

            'Si voy a conectar con la DB local
            Else

                Set m_conn = CurrentProject.Connection

            End If

        Else

            'CIERRO UNA CONEXIÓN CON LA DB

            m_conn.Close
            Set m_conn = Nothing

        End If

        ConectarADO = ""

    On Error GoTo 0
    Exit Function

ConectarADO_Error:

    ConectarADO = "Error " & Err.Number & " (" & Err.Description & ") en función ConectarADO, linea " & Erl & "."
    MsgBox ConectarADO

End Function
sql-server vba ms-access ado
1个回答
-2
投票

可能是排序规则不匹配。

© www.soinside.com 2019 - 2024. All rights reserved.