Access VBA에서 ODBC가 PostgreSQL을 연결할 때 ODBC 오류 3146과 격투하는 이야기

목적
현재 업무 단위는 Access를 위주로 데이터 통계를 진행하고 있다.
최근 AWS에 시스템을 구축해 RDS를 사용했다.따라서 Access를 통해 ODBC에 연결하여 데이터를 처리할 수 있는 기회가 늘어났습니다.이 작업장에는 Access VBA가 구축한 기존 개발 기준이 있어 ODBC 연결을 자동으로 처리하는 모듈을 통해 연결되지만, 모듈이 작동하지 않아 ODBC 오류가 계속 토출되고 있다.
이 보도는 그 문제에 대한 보고와 같다.
작업 환경
· 데이터베이스 엔진(※ 1): Aurora PostgreSQL(엔진 버전 12.7)
· Microsoft Access 2003, Microsoft Access 2016
・OS:Windows1064 bit
・ODBC 드라이버(※ 2): PostgreSQL 유니코드(버전 13.02.00)
※ 1 내 환경에서는 페달 서버를 통해 사용하지만, 기존 해설을 통해 연결할 수 있습니다.
※ 2 Microsoft Access 2003을 주로 사용하기 때문에 ODBC 드라이버는 32비트를 사용합니다.
이벤트
할 수 있는 일
· 무료 소프트웨어 A5M2 등을 통해 DB 참조
・새로 만들기&표 링크&ODBC 데이터베이스()에서 시스템 DSN 또는 파일 DSN을 사용하는 링크 만들기
할 수 없는 일
· TableDef 대상을 통해 ODBC에 자동 연결
ODBC 오류
"3146 ODBC - 호출에 장애가 발생했습니다."아무리 수정해도 프로그램이 나올 거야.TableDef의 사용법은 투덜거리기만 하면 나오는 정통품인데도 어디가 나쁜지 전혀 모른다.TableDef에 연결된 기술 보도를 조사한 뒤 마이크로소프트가 공개한 AttachDSNLessTable라는 이름으로 DSN을 사용하지 않는 ODBC 연결 방법을 소개했다.언뜻 보기에는 TableDef와 기존 모듈의 사용 방법이 같기 때문이다
전체 AttachDSNLessTable를 복제해 보았지만 3146개의 오류가 발생했습니다.
오류 처리
3146 오류 처리는 아무래도 문장마다 원인이 다르기 때문에 더 많은 정보가 필요하다.영어 페이지가 지겨워졌을 때, 나는 아래의 페이지를 찾았다.
https://answers.microsoft.com/en-us/msoffice/forum/all/run-time-error-3146-odbc-call-failed/30fce3c6-0e05-463f-b115-41357c95a5ad
주로 전문가들은 이걸 프로그램에 넣으면 더 자세한 오류를 볼 수 있다고 답했다.이 대답이야말로 문제 해결의 광명이다.
Public Sub DumpErrorsCollection()
    Dim e               As Error
    Debug.Print Time$, "Dumping " & DBEngine.Errors.Count & " error records:"
    For Each e In DBEngine.Errors
        Debug.Print e.number, e.Description, e.source
    Next e
End Sub
바로 잘못된 곳에 넣으면 다음과 같은 출력을 얻을 수 있습니다.
16:28:43      Dumping 2 error records:
 11           The specified table does not exist        ODBC.TableDefs
 3146         ODBC--呼び出しが失敗しました。            DAO.TableDefs
응?「The specified table does not exist」?
책상이 존재하지 않습니다????
비밀을 폭로하다
먼저 Access 새 폼 > ODBC 데이터베이스 () 에서 시스템 DSN 또는 파일 DSN으로 폼을 만들 때, 다음 그림과 같이 폼 이름 앞에 "public."을 사용합니다를 입력합니다.(좋다는 거야? 익숙하지 않아서...(--;) )

그런 다음 OK에서 링크를 만들면 "public 테이블 이름"이라는 이름으로 링크가 만들어집니다.

나는 VBA에서 Table Def에게 표 이름을 건네줄 때'public 표 이름'으로 그에게 건네주었다.사전에 수동으로 테스트를 했기 때문에 퍼블릭이 사람들에게 깊은 인상을 남겼기 때문에 나는 퍼블릭 표 이름으로 보낸 것이 틀림없다고 착각했다.다음에 이 모드를 제거한 표 이름으로 실행 모듈을 실행하면 문제 없이 링크를 만들 수 있는지 확인합니다.
재수사하면 여러 번 열람한 이하 기사라도 끼워 넣은 패턴의 처리를 볼 수 있어...
https://fnya.cocolog-nifty.com/blog/2015/04/access-postgres.html
감상
VBA의 개발과 관련된 지 2년이 지났는데 저는 매우 실제적인 체험이라고 생각합니다.익숙하지 않은 ODBC 접속도 있지만 데이터베이스에 대한 이해, 용어, 지식에 초점을 맞출 수 있다.
나는 Dump Errors Collection () 이라는 디버깅 방법을 배울 수 있다는 것이 가장 큰 수확이라고 생각한다.나는 원 보도의 대답을 연격하고 싶다.
어떤 기술 기사 게시판에는 나와 같은 엑세스, VBA, 포스트가 수동으로 링크를 만들 수 있지만 Table Def로 자동으로 만들 수 없는 댓글이 올라와 있어 나 혼자만 이 문제에 빠진 것은 아니라고 생각한다.
다음 일로 걸려 넘어지면 이 기사가 무슨 도움이 되는지 검색해 봤으면 좋겠다.
・ODBC 오류에 대한 대응 및 상세 분석
· TableDef 사용 후 ODBC 오류 3146 반환

좋은 웹페이지 즐겨찾기