Я пытаюсь создать внешний ключ в таблице с процедурой, как показано ниже. Когда я работаю в Access 2013 и соединение локальное, все в порядке, но если я пытаюсь соединиться с той же базой данных на SQL сервере, возникает
ошибка -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