나눔터  
  HOME > 나눔터 > 묻고답하기 > 액세스
액세스
액세스에 대한 질문과 답변을 올려주세요. 단, 취지에 맞지 않는 글은 운영자가 삭제합니다.
 "000 님, 도와주세요", "부탁 드립니다.", "급합니다!" 등과 같이 막연한 제목을 달지 말아주세요.
[필독] 빠르고 정확한 답변을 얻는 16가지 Tip !
[필독] 저작권법 개정에 따른 이용안내

작성자:  

 열심맨 (ojk)

추천:  1
파일:     조회:  2196
제목:   두 mdb를 비교하여 테이블 칼럼등 같게 만들기-문의 드립니다.
     
  엑세스 2010 버전입니다.

사용자팁에 보면 2개의 mdb파일을 비교하여 스키마를 자동으로 만들어 주는 팁이 있습니다.

잘 작동은 되는데 한가지 버그(?)가 있어 문의 드립니다.

<버그내용>
기존테이블에 추가로 만들어 지는 필드(컬럼)는 속성값중 필수항목에 무조건 "예" 라고 만들어 집니다. (원본mdb는 해당 필드(컬럼)는 속성값이 "아니오" 입니다.)

어딜 고쳐야 하나요? 도움이 절실히 필요합니다. ㅠㅠ

아래는 박병섭님의 -> "두 mdb를 비교하여 테이블 칼럼등 같게 만들기"중
필드추가 생성 부분 소스 입니다.

----------------------------
 Private Sub Append_Col(tbl_Name As String, fld_Name As String, new_Table As Boolean)
     
     Dim def_Val As Variant
     
     'Column 필드 추가
    newDB.Tables(tbl_Name).Columns.Append fld_Name, orgDB.Tables(tbl_Name).Columns(fld_Name).Type, orgDB.Tables(tbl_Name).Columns(fld_Name).DefinedSize
     
     '자동 증분 설정
    
     On Error Resume Next
     
     If orgDB.Tables(tbl_Name).Columns(fld_Name).Properties("Autoincrement") = True Then
         newDB.Tables(tbl_Name).Columns(fld_Name).Properties("Autoincrement") = True
     End If
     
     '프로퍼티값 복사
    For j = 0 To 5
         newDB.Tables(tbl_Name).Columns(fld_Name).Properties(j) = orgDB.Tables(tbl_Name).Columns(fld_Name).Properties(j)
     Next
     
     If new_Table = False Then
        
        '기본 입력값으로 기존 테이블값 업데이트
        def_Val = orgDB.Tables(tbl_Name).Columns(fld_Name).Properties("Default")
         
         If Not (def_Val = True Or def_Val = False) Then
             If IsNumeric(def_Val) Then
                 sql = "UPDATE " & tbl_Name & " SET " & fld_Name & " = " & def_Val & ";"
             Else
                 sql = "UPDATE " & tbl_Name & " SET " & fld_Name & " = '" & def_Val & "';"
             End If
             
             
             db.ExecuteCommand (sql)
         End If
        
     End If
     
 End Sub
--------------------------------- 
 
[불량 게시물 신고]  
황동준이부분이 adox의 버그인듯 합니다.일단은
프로퍼티 복사하는 For-Next 문 이후에 아래 코드로 강제 수정 해보세요.
이게 됐다 안됐다 하는데 좀더 연구해 봐야 할 듯 합니다.

newDB.Tables(tbl_Name).Columns(fld_Name).Properties("Jet OLEDB:Allow Zero Length") = True

참고로 아래는 프로퍼티(숫자)의 속성 이름 입니다
0:Autoincrement
1:Default
2:Description
3:Nullable
4:Fixed Length
5:Seed
6:Increment
7:Jet OLEDB:Column Validation Text
8:Jet OLEDB:Column Validation Rule
9:Jet OLEDB:IISAM Not Last Column
10:Jet OLEDB:AutoGenerate
11:Jet OLEDB:One BLOB per Page
12:Jet OLEDB:Compressed UNICODE Strings
13:Jet OLEDB:Allow Zero Length
14:Jet OLEDB:Hyperlink
01-15 (18:05)
삭제 ■신고
열심맨아~ 감사합니다. 정말 정말 고맙습니다
알려주신대로 해보겠습니다~
복 많이 받는 하루되세요~~^^
01-16 (07:32)
삭제 ■신고
열심맨알려 주신대로 해보았으나 필수속성값이 계속 [예]로 적용이 됩니다. ㅠㅠ01-16 (11:35)
삭제 ■신고
열심맨프로퍼티(숫자)의 속성 이름
0번부터 14번까지 다 넣어서 해보겠습니다...
01-16 (12:12)
삭제 ■신고
열심맨황동준 선생님~
Jet OLEDB:Allow Zero Length <- 이것은 [빈문자열 허용] 인것 같습니다.
필수항목은 다른것 인가 봅니다.
01-16 (15:47)
삭제 ■신고
열심맨제가 보기에 필수속성은 이것인것 같아서 -> Nullable 
아래처럼 해보았데 마찬가지 결과 입니다. ㅠㅠㅠ

newDB.Tables(tbl_Name).Columns(fld_Name).Properties("Nullable") = False 나 True  --- 실패
01-16 (17:01)
삭제 ■신고
열심맨그리고 저는 됐다, 안됐다도 아니고 무조건 안되네요...01-16 (17:09)
삭제 ■신고
열심맨newDB.Tables(tbl_Name).Columns(fld_Name).Properties("Required")  = False 나 True  --- 실패01-16 (17:26)
삭제 ■신고
황동준newDB.Tables(tbl_Name).Columns(fld_Name).Attributes = adColNullable

이렇게도 한번 해보세요. 저는 왜 됐다 안됐다 하는지 모르겠네요 ㅠㅠ
01-16 (17:36)
삭제 ■신고
황동준여기참고했습니다https://stackoverflow.com/questions/7585509/how-do-you-set-the-required-property-when-adding-a-column-in-access-using-adox01-16 (17:40)
삭제 ■신고
열심맨실패입니다. 쉽지 안네요...ㅠㅠ01-16 (18:13)
삭제 ■신고
열심맨황동준 선생님~
혹시 테스트로 하시는 파일 올려 주실수 있나요?
저도 [됐다, 안됐다] 라도 해보게요... ^^
01-16 (18:15)
삭제 ■신고
열심맨저는 회사에서 쓰는 프로그램이라서 올릴수가 없습니다.01-16 (18:16)
삭제 ■신고
열심맨Microsoft ADOX 프로그래머 참고서(종합).pdf
위 설명서를 보니
컬럼에 필수입력을 [예],[아니오]로 만드는 방법은 없네요.
ADOX 에서는 지원을 하지 안는것 같습니다.
일단은, 포기(?) 해야 겠네요...
황동준 선생님~ 답변 감사했습니다.
즐거운 하루되세요~^^
01-20 (09:31)
삭제 ■신고
        
  

작성일 : 2020-01-14(16:03)
최종수정일 : 2020-01-14(16:22)