2015-01-28 3 views
0

SQL 명령어 사용 :.는 MS Access에서 제약 조건을 삭제할 수 없습니다

ALTER TABLE [세션] DROP 제약 [SessionAttendance]

내가 예외 오류 메시지 "이 참조를 찾을 수 없습니다 얻을을 "

제약 조건이 존재하며이 사용자 테이블에 대한 제약 조건의 시스템 테이블에 표시됩니다. 이 제약 조건을 어떻게 떨어 뜨릴 수 있습니까?

데이터베이스는 MS-ACCESS 2003 형식입니다. 응용 프로그램은 JET 4.0을 사용합니다. 스키마 업데이트가 필요한 수백 개의 인스턴스가 있습니다. SQL을 생성하는 유틸리티 프로그램이 있지만 DROP CONSTRAINT 작업을 시도 할 때 넘어집니다.

+0

당신이 TABLE [출석] DROP 제약 [SessionAttendance]'대신 ALTER'시도해 봤어? –

+0

감사합니다. 그게 효과가 있었어. 외래 테이블 (Attendance)에서 제약 조건을 삭제할 때 문이 성공했습니다. 분명히 제약 조건을 기본 테이블에 추가 할 수 있지만 외부 테이블에서 삭제해야합니다. –

답변

1

의견 제안에 Gord Thompson이 암시 한 내용이 답으로 표시됩니다.

관계의 잘못된 테이블에 ALTER 문이 적용되고있었습니다.

제약 조건은 원래 출석 테이블에 추가되었습니다. 그러나 "GetOleDbSchemaTable"메소드를 사용하여 나열 할 때 Sessions 테이블의 속성으로 표시됩니다. 다음 코드 발췌 당

:

Structure Relation 
    Public Name As String 
    Public PrimaryTableName As String 
    Public PrimaryField As String 
    Public PrimaryIndex As String 
    Public ForeignTable As String 
    Public ForeignField As String 
    Public OnUpdate As String 
    Public OnDelete As String 

    Public Overrides Function ToString() As String 
     Dim msg As String = String.Format("Name:{0} PT:{1} PF:{2} PI:{3} FT:{4} FF:{5}", _ 
       Name, PrimaryTableName, PrimaryField, PrimaryIndex, ForeignTable, ForeignField) 
     Return msg 
    End Function 
End Structure 

Private Function ListRelations(tableName As String) As List(Of Relation) 
    Dim relations As New List(Of Relation) 
    Dim MySchemaTable As DataTable 

    Dim dbConn As New OleDbConnection(connectionString) 
    dbConn.Open() 

    MySchemaTable = dbConn.GetOleDbSchemaTable(OleDbSchemaGuid.Foreign_Keys, _ 
       New Object() {Nothing, Nothing, tableName}) 

    Dim result As Boolean = False 

    'List the table name from each row in the schema table. 
    For Each row As DataRow In MySchemaTable.Rows 
     Dim r As New Relation 
     r.Name = row("FK_NAME") 

     r.PrimaryTableName = row("PK_TABLE_NAME") 
     r.PrimaryField = row("PK_COLUMN_NAME") 
     r.PrimaryIndex = row("PK_NAME") 
     r.ForeignTable = row("FK_TABLE_NAME") 
     r.ForeignField = row("FK_COLUMN_NAME") 
     r.OnUpdate = row("UPDATE_RULE") 
     r.OnDelete = row("DELETE_RULE") 
     Console.WriteLine(r.ToString) 
     relations.Add(r) 
    Next 

    MySchemaTable.Dispose() 
    dbConn.Close() 
    dbConn.Dispose() 

    Return relations 
End Function 
+0

이 질문에 대한 답변을 제공하지 않습니다. 비평하거나 저자의 설명을 요청하려면 게시물 아래에 의견을 남기십시오. 자신의 게시물에 언제나 댓글을 달 수 있으며 충분한 [평판] (http://stackoverflow.com/help/whats-reputation)을 갖게되면 [모든 게시물에 댓글을 달 수] 있어야합니다 (http://stackoverflow.com/help/privileges/comment). – Jasper

+0

코멘트 작성자의 이의 제기 답변에 추가 된 추가 정보. 답변에 대한 크레딧은 Gord Thompson과 코멘트 작성자 "Hal"에게 가야합니다. –

관련 문제