Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ms-access/4.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迁移帮助使用“创建表”;dbo。”;_Sql Server_Ms Access - Fatal编程技术网

Sql server SQL Server迁移帮助使用“创建表”;dbo。”;

Sql server SQL Server迁移帮助使用“创建表”;dbo。”;,sql-server,ms-access,Sql Server,Ms Access,我运行了SQL Server迁移帮助,仅将我的后端表从Access 2003数据库迁移到SQL Server 2008 Express。现在,当我通过ODBC连接到SQL Server时,我所有的表都被命名为“dbo.tablename”。我现有的所有查询和表单都不使用这些名称。解决这个问题的最佳方法是什么 是否需要更改架构名称?我将使用什么SQL语句来处理此问题?我做了两件不同的事情来解决上述问题中详细介绍的问题。首先,我创建了一个例程来重命名这些表。后来,我决定放弃这一点,并编写了一个不同的

我运行了SQL Server迁移帮助,仅将我的后端表从Access 2003数据库迁移到SQL Server 2008 Express。现在,当我通过ODBC连接到SQL Server时,我所有的表都被命名为“dbo.tablename”。我现有的所有查询和表单都不使用这些名称。解决这个问题的最佳方法是什么


是否需要更改架构名称?我将使用什么SQL语句来处理此问题?

我做了两件不同的事情来解决上述问题中详细介绍的问题。首先,我创建了一个例程来重命名这些表。后来,我决定放弃这一点,并编写了一个不同的例程(如下所列),在数据库启动时处理表的链接

Public Sub subChangeLinkedTableNames()

    Dim dbCurr As DAO.Database
    Dim tdfCurr As DAO.TableDef

    Set dbCurr = CurrentDb()

    For Each tdfCurr In dbCurr.TableDefs
        If Len(tdfCurr.Connect) > 0 Then
            If Left(tdfCurr.Name, 4) = "dbo_" Then
                tdfCurr.Name = Replace(tdfCurr.Name, "dbo_", "")
            End If
        End If
    Next


    Set tdfCurr = Nothing
    Set dbCurr = Nothing

End Sub
上面的代码运行良好,但最终我决定编写一个例程,在每次打开Access数据库时自动重新链接表。此例程遍历要链接的表列表,并为每个表调用此sub。请注意,我正在通过在名为sLocalTableName的变量/参数中指定希望表具有的名称来解决表命名问题:

Private Sub LinkODBCTable(sSourceTableName As String, sLocalTableName As String, sIndexFields As String, sConString As String)
    Dim dbCurrent As DAO.Database
    Dim tdfCurrent As DAO.TableDef
    Set dbCurrent = DBEngine.Workspaces(0).Databases(0)

    On Error Resume Next
    'Let's not accidentally delete a local table of the same name
    If Len(dbCurrent.TableDefs(sLocalTableName).Connect) > 0 Then
        dbCurrent.TableDefs.Delete sLocalTableName
    End If
    Select Case Err.Number
        Case 0
            'Do Nothing
        Case Else
            Err.Clear
        'Case 3011
            'Table does not exist
    End Select

    Set tdfCurrent = dbCurrent.CreateTableDef(sLocalTableName)
    tdfCurrent.Connect = sConString
    tdfCurrent.SourceTableName = sSourceTableName
    dbCurrent.TableDefs.Append tdfCurrent
    If Err.Number <> 0 Then
        'Sometimes 3010 occurs here and I don't know why. A compact and repair always seems to fix it.
        MsgBox "Error in LinkODBCTable" & vbCrLf & vbCrLf & Err.Number & " " & Err.description
        Err.Clear
    End If

    If sIndexFields <> "" Then
        'sIndexFields should be field names, each enclosed in brackets, comma separated
        'Most of the time it will just be one field
        'This is to tell Access which field(s) is the Primary Key
        dbCurrent.Execute "CREATE INDEX __UniqueIndex ON [" & sLocalTableName & "] (" & sIndexFields & ")", dbFailOnError
        If Err.Number <> 0 Then
            If Err.Number = 3283 Then
                'Primary Key Already Exists
            Else
                MsgBox "Error in LinkODBCTable" & vbCrLf & vbCrLf & Err.Number & " " & Err.description
            End If
            Err.Clear
        End If
    End If

    Set tdfCurrent = Nothing
    Set dbCurrent = Nothing
End Sub
私有子链接ODBCTable(sSourceTableName作为字符串,sLocalTableName作为字符串,sIndexFields作为字符串,sConString作为字符串)
Dim dbCurrent作为DAO.Database
Dim TDFCCurrent作为DAO.TableDef
设置dbCurrent=DBEngine.Workspaces(0).数据库(0)
出错时继续下一步
'不要意外删除同名的本地表
如果Len(dbCurrent.TableDefs(sLocalTableName.Connect)>0,则
dbCurrent.TableDefs.Delete sLocalTableName
如果结束
选择案例错误编号
案例0
“什么也不做
其他情况
呃,明白了
“案件3011
'表不存在
结束选择
设置TDFCCurrent=dbCurrent.CreateTableDef(sLocalTableName)
tdfCurrent.Connect=sConString
TDFCCurrent.SourceTableName=sSourceTableName
dbCurrent.TableDefs.Append TDFCCurrent
如果错误号为0,则
有时3010发生在这里,我不知道为什么。一辆小型车和一辆修理车似乎总能把它修好。
MsgBox“LinkODBCTable中的错误”&vbCrLf&vbCrLf&Err.Number&“&Err.description
呃,明白了
如果结束
如果sIndexFields为“”,则
'sIndexFields应该是字段名,每个字段都用括号括起来,用逗号分隔
大多数情况下,这只是一个领域
'这是为了告诉Access哪个字段是主键
dbCurrent.执行“在[”&sLocalTableName&“](“&sIndexFields&”)上创建索引\uuuUniqueIndex”,dbFailOneError
如果错误号为0,则
如果错误编号=3283,则
'主键已存在
其他的
MsgBox“LinkODBCTable中的错误”&vbCrLf&vbCrLf&Err.Number&“&Err.description
如果结束
呃,明白了
如果结束
如果结束
设置TDFCCurrent=Nothing
设置dbCurrent=Nothing
端接头

我做了两件不同的事情来解决上述问题中详述的问题。首先,我创建了一个例程来重命名这些表。后来,我决定放弃这一点,并编写了一个不同的例程(如下所列),在数据库启动时处理表的链接

Public Sub subChangeLinkedTableNames()

    Dim dbCurr As DAO.Database
    Dim tdfCurr As DAO.TableDef

    Set dbCurr = CurrentDb()

    For Each tdfCurr In dbCurr.TableDefs
        If Len(tdfCurr.Connect) > 0 Then
            If Left(tdfCurr.Name, 4) = "dbo_" Then
                tdfCurr.Name = Replace(tdfCurr.Name, "dbo_", "")
            End If
        End If
    Next


    Set tdfCurr = Nothing
    Set dbCurr = Nothing

End Sub
上面的代码运行良好,但最终我决定编写一个例程,在每次打开Access数据库时自动重新链接表。此例程遍历要链接的表列表,并为每个表调用此sub。请注意,我正在通过在名为sLocalTableName的变量/参数中指定希望表具有的名称来解决表命名问题:

Private Sub LinkODBCTable(sSourceTableName As String, sLocalTableName As String, sIndexFields As String, sConString As String)
    Dim dbCurrent As DAO.Database
    Dim tdfCurrent As DAO.TableDef
    Set dbCurrent = DBEngine.Workspaces(0).Databases(0)

    On Error Resume Next
    'Let's not accidentally delete a local table of the same name
    If Len(dbCurrent.TableDefs(sLocalTableName).Connect) > 0 Then
        dbCurrent.TableDefs.Delete sLocalTableName
    End If
    Select Case Err.Number
        Case 0
            'Do Nothing
        Case Else
            Err.Clear
        'Case 3011
            'Table does not exist
    End Select

    Set tdfCurrent = dbCurrent.CreateTableDef(sLocalTableName)
    tdfCurrent.Connect = sConString
    tdfCurrent.SourceTableName = sSourceTableName
    dbCurrent.TableDefs.Append tdfCurrent
    If Err.Number <> 0 Then
        'Sometimes 3010 occurs here and I don't know why. A compact and repair always seems to fix it.
        MsgBox "Error in LinkODBCTable" & vbCrLf & vbCrLf & Err.Number & " " & Err.description
        Err.Clear
    End If

    If sIndexFields <> "" Then
        'sIndexFields should be field names, each enclosed in brackets, comma separated
        'Most of the time it will just be one field
        'This is to tell Access which field(s) is the Primary Key
        dbCurrent.Execute "CREATE INDEX __UniqueIndex ON [" & sLocalTableName & "] (" & sIndexFields & ")", dbFailOnError
        If Err.Number <> 0 Then
            If Err.Number = 3283 Then
                'Primary Key Already Exists
            Else
                MsgBox "Error in LinkODBCTable" & vbCrLf & vbCrLf & Err.Number & " " & Err.description
            End If
            Err.Clear
        End If
    End If

    Set tdfCurrent = Nothing
    Set dbCurrent = Nothing
End Sub
私有子链接ODBCTable(sSourceTableName作为字符串,sLocalTableName作为字符串,sIndexFields作为字符串,sConString作为字符串)
Dim dbCurrent作为DAO.Database
Dim TDFCCurrent作为DAO.TableDef
设置dbCurrent=DBEngine.Workspaces(0).数据库(0)
出错时继续下一步
'不要意外删除同名的本地表
如果Len(dbCurrent.TableDefs(sLocalTableName.Connect)>0,则
dbCurrent.TableDefs.Delete sLocalTableName
如果结束
选择案例错误编号
案例0
“什么也不做
其他情况
呃,明白了
“案件3011
'表不存在
结束选择
设置TDFCCurrent=dbCurrent.CreateTableDef(sLocalTableName)
tdfCurrent.Connect=sConString
TDFCCurrent.SourceTableName=sSourceTableName
dbCurrent.TableDefs.Append TDFCCurrent
如果错误号为0,则
有时3010发生在这里,我不知道为什么。一辆小型车和一辆修理车似乎总能把它修好。
MsgBox“LinkODBCTable中的错误”&vbCrLf&vbCrLf&Err.Number&“&Err.description
呃,明白了
如果结束
如果sIndexFields为“”,则
'sIndexFields应该是字段名,每个字段都用括号括起来,用逗号分隔
大多数情况下,这只是一个领域
'这是为了告诉Access哪个字段是主键
dbCurrent.执行“在[”&sLocalTableName&“](“&sIndexFields&”)上创建索引\uuuUniqueIndex”,dbFailOneError
如果错误号为0,则
如果错误编号=3283,则
'主键已存在
其他的
MsgBox“LinkODBCTable中的错误”&vbCrLf&vbCrLf&Err.Number&“&Err.description
如果结束
呃,明白了
如果结束
如果结束
设置TDFCCurrent=Nothing
设置dbCurrent=Nothing
端接头

在查询中根本不需要重命名表。这也是我的想法,但我在Access中使用绑定表单,并使用DSN通过ODBC进行链接,因此我实际上无法控制链接表的名称。您不“控制链接表的名称”是什么意思?不,您不能控制SQL Server表的名称,但可以完全控制Access前端中链接表的名称。而默认名称为wh