Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 在SQL Server中创建外键时出错,但在Access 2013的本地数据库中没有_Sql Server_Vba_Ms Access_Ado - Fatal编程技术网

Sql server 在SQL Server中创建外键时出错,但在Access 2013的本地数据库中没有

Sql server 在SQL Server中创建外键时出错,但在Access 2013的本地数据库中没有,sql-server,vba,ms-access,ado,Sql Server,Vba,Ms Access,Ado,我尝试在表中创建一个外键,过程如下。 当我在Access 2013中工作并且连接是本地的时,一切都正常,但如果我尝试连接SQL Server中的同一个数据库,就会发生这种情况 错误-2147217792(匹配类型无效或不支持该值 (由供应商提供) 你知道错误的原因吗 Private m_objm_conn As ADODB.Connection Function CreaRelacionUnoAInfinito(StrNombreTablaUno As String, _

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

错误-2147217792(匹配类型无效或不支持该值 (由供应商提供)

你知道错误的原因吗

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
专用m_objm_conn作为ADODB.Connection
函数CreaRelacionUnoAInfinito(strnombretableuno作为字符串_
STRNOMBRETABLAINFINTO作为字符串_
StrNombreCampoUno作为字符串_
StrNombreCampoInfinito作为字符串_
可选BlnSQLServer(作为布尔值)作为布尔值
Dim cat作为新的ADOX。目录“El catálogo ADOX”
Dim kyPrimary作为新的ADOX.key'Clave foránea ADOX
将strnombrelacion变为字符串“El nombre de la relación a crear”
朦胧如弦
关于错误GoTo CrearelacionUnoinfinito_错误
strError=ConectarADO(BlnSQLServer:=BlnSQLServer_
BLN连接:=真)
“我不知道,他是康纳多
如果strError“”那么
退出功能
其他的
“Consigo el-catálogo
设置cat.ActiveConnection=m_连接
ÁNEA的定义
“Asigno el nombre de la relación
strnombrelacion=“FK_”&strnombbretablainfinito&“_”&strnombbretablauno
kyPrimary.Name=strnombrelacion
"自由之家"(蒂波·阿德基弗)
kyPrimary.Type=adKeyForeign
“我们的关系表”
kyPrimary.RelatedTable=strnombretableauno
“阿格雷戈·康普·英菲尼托·拉克莱夫圆柱酒店
kyPrimary.Columns.Append StrNombreCampoInfinito
“Le asigno al-cmpo负责人(StrNombreCampoInfinito)el campo relacionado(StrNombreCampoUno)
kyPrimary.Columns(StrNombreCampoInfinito).RelatedColumn=StrNombreCampoUno
“我没有艾琳娜达
kyPrimary.UpdateRule=adRICascade
“Agrego la relación creada a la tabla principal(StrNombreTablaInfinito)
cat.Tables(strnombretablefinito).Keys.kyPrimary
”他说
CreaRelacionUnoAInfinito=真
设置cat=Nothing
设置kyPrimary=Nothing
错误转到0
退出功能
如果结束
CreaRelacionUnoAInfinito\u错误:
MsgBox“Error”和Err.Number&(“&Err.Description&”)en el procediemento“&”_
“商业银行”和“商业银行”&“y”和_
StrNombreTablaInfinito&“
调试。打印“错误”和错误号(“&Err.Description&”)en el procediemento“&”_
“商业银行”和“商业银行”&“y”和_
StrNombreTablaInfinito&“
设置cat=Nothing
设置kyPrimary=Nothing
CreaRelacionUnoAInfinito=False
退出功能
端函数
函数ConectarADO(可选BlnSQLServer为布尔值_
可选bln连接为布尔值=真)为字符串
关于错误转到ConectarADO_错误
“是的,我是康涅狄格州
如果不连通,那么
'我看是一家房地产商conexion con SQL Server
如果是BlnSQLServer,那么
“ABRO UNA CONEXIÓN CON LA DB
设置m_conn=新的ADODB连接
m_conn.Open“Provider=sqloledb;”和_
“数据源=INGENIERO-PC\SQLEXPRESS;”和_
“初始目录=FOAGEST20;”和_
“用户Id=ADMIN;”&_
“密码=revanna”
“我看,这是一个地方性的国家
其他的
设置m_uconn=CurrentProject.Connection
如果结束
其他的
“这是一个有争议的问题
m_康涅狄格州关闭
设置m_conn=无
如果结束
ConectarADO=“”
错误转到0
退出功能
ConectarADO_错误:
ConectarADO=“Error”&Err.Number&(“&Err.Description&”)en functión ConectarADO,linea“&Erl&.”
MsgBox ConectarADO
端函数

哪一步引发错误?您好。cat.Tables(strnombretablefinito).Keys.kyPrimary中发生错误