복붙노트

[SQL] 관리 및 MS Access에서 SQL 쿼리를 디버깅

SQL

관리 및 MS Access에서 SQL 쿼리를 디버깅

MS 액세스와 원시 SQL 쿼리를 관리 할 능력이 제한되어 있습니다 : 편집기에는 구문 강조, 그것은 당신이 할 수없는 주석 삽입을 긴 문자열로 원시 SQL을 포맷하지 않고, 매우 나쁘다.

복잡한 SQL 쿼리를 디버깅뿐만 아니라 통증 : 중 당신은 당신의 스키마가 변경 또는 종료 업 디버그 및 업데이트에 악몽 거대한 쿼리 할 때 관리하기가 어려워 많은 작은 쿼리로 분할해야합니다.

당신은 어떻게 MS Access에서 복잡한 SQL 쿼리를 관리하는 당신은 그들을 어떻게 디버깅합니까?

편집하다 순간, 난 그냥 Access에서 현명 원시 SQL 포맷에 대한 몇 가지 구문 색상 및 SQL 꽤 프린터에 대한 ++ 메모장을 사용하여 대부분입니다. 외부 저장소를 사용하면 유용하지만 항상 동기화 두 버전에 걸릴 위험이있다 유지하고 당신은 여전히 ​​Access에서 쿼리를 시도하기 전에 주석을 제거해야 ...

해결법

  1. ==============================

    1.디버깅을 위해, 나를 현명를 포맷 할 수있는 별도의 텍스트 편집기에서 I 편집을. 내가 변경해야 찾을 때, 나는 텍스트 편집기의 버전을 편집하고, 결코 Access의 버전을 편집하지, 다시 액세스에 붙여 넣습니다.

    디버깅을 위해, 나를 현명를 포맷 할 수있는 별도의 텍스트 편집기에서 I 편집을. 내가 변경해야 찾을 때, 나는 텍스트 편집기의 버전을 편집하고, 결코 Access의 버전을 편집하지, 다시 액세스에 붙여 넣습니다.

    아직도 주요 피타.

  2. ==============================

    2.나는 VBA에서 SQL에 고유 한 몇 가지 팁이있다.

    나는 VBA에서 SQL에 고유 한 몇 가지 팁이있다.

    문자열 변수와 SQL 코드를 넣습니다. 나는이 작업을 수행하는 데 사용 :

    DoCmd.RunSQL "SELECT ..."
    

    즉 관리가 어렵다. 대신이 작업을 수행합니다 :

    strSQL = "SELECT ..."
    DoCmd.RunSQL strSQL
    

    당신이 실행되고 그냥 무엇을 참조하지 않으면 종종 당신은 쿼리를 해결할 수 없습니다. 이를 위해, 단지 실행 전에 직접 실행 창에 귀하의 SQL 덤프 :

    strSQL = "SELECT ..."
    Debug.Print strSQL
    Stop
    DoCmd.RunSQL strSQL
    

    액세스 '표준 쿼리 빌더에 결과를 붙여 넣기 (당신은 SQL보기를 사용해야합니다). 지금 당신은 코드 처리 변수를 포함, 최종 버전을 테스트 할 수 있습니다.

    당신이 문자열로 긴 쿼리를 준비 할 때, 코드를 헤어 :

    strSQL = "SELECT wazzle FROM bamsploot" _
          & vbCrLf & "WHERE plumsnooker = 0"
    

    나는 처음에는 사용자에게 긴 메시지를 싸게 치장하고 싶어 할 때 vbCrLf를 사용하는 것을 배웠다. 나중에 나는 코딩하는 동안 SQL 더 읽기하게, 그것은을 Debug.Print의 출력을 향상 발견했다. (작은 기타 혜택 : 각 행의 끝에서 필요없는 공간에 새로운 줄 구문에 빌드..)

    (참고 : 당신이 당신이 SQL 라인의 오른쪽에 추가 의견을 추가 할 것입니다 생각 실망을 준비합니다..)

    로 여기에 다른 곳에서 말했다, 텍스트 편집기에 여행은 시간을 절약이다. 일부 텍스트 편집기는 공식 VBA 편집기보다 더 구문 강조를 제공합니다. (지옥, StackOverflow의 더 나은 않습니다.) 그것은 WHERE 절에 불필요한 테이블 참조 괄호 더미와 같은 액세스 cruft에의 삭제도 효율적입니다.

    워크 플로우 심각한 문제 해결 :

    VBA Debug.Print >       (capture query during code operation)
      query builder   >     (testing lab to find issues)
         Notepad++      >   (text editor for clean-up and review)
      query builder   >     (checking, troubleshooting) 
    VBA
    

    문제를 분리 할 때까지 물론, 문제의 촬영은 일반적으로 쿼리의 복잡성을 감소의 문제 (또는 적어도이 사라지게!). 그럼 당신은 당신이 원하는 걸작에 백업 구축 할 수 있습니다. 그것은 끈적 문제를 해결하기 위해 여러 사이클을 취할 수 있기 때문에이 작업이 반복적으로 흐름을 사용할 가능성이 있습니다.

  3. ==============================

    3.내가 액세스에서 꽤 통과 쿼리의 많은, 더 복잡한 SQL을 쓰기 때문에 마이크로 소프트 Access--에 대한 액세스 SQL Editor--에게 추가 기능을 썼다. 이-의 추가는 형식의 SQL를 저장할 수 있다는 장점이있다 (의견을!) 당신의 Access 응용 프로그램 자체 내에서. 쿼리가 새로운 Access 응용 프로그램에 복사 할 때 서식이 유지됩니다. 내장 된 당신의 서식 편집기 내리 쳤을 때, 원래의 쿼리를 보여줄 것이다 도구는 차이를 알려합니다.

    내가 액세스에서 꽤 통과 쿼리의 많은, 더 복잡한 SQL을 쓰기 때문에 마이크로 소프트 Access--에 대한 액세스 SQL Editor--에게 추가 기능을 썼다. 이-의 추가는 형식의 SQL를 저장할 수 있다는 장점이있다 (의견을!) 당신의 Access 응용 프로그램 자체 내에서. 쿼리가 새로운 Access 응용 프로그램에 복사 할 때 서식이 유지됩니다. 내장 된 당신의 서식 편집기 내리 쳤을 때, 원래의 쿼리를 보여줄 것이다 도구는 차이를 알려합니다.

    그것은 현재 디버깅하지 않는다; 충분한 관심이 있다면, 나는이 항아리를 추구하는 것입니다하지만 기능 세트를 당분간 의도적으로 작게 유지된다.

    그것은 당분간 무료 아니지만, 라이센스를 구입하는 것은 매우 저렴합니다. 당신이 그것을 감당할 수없는 경우에, 당신은 저에게 연락 할 수 있습니다. 여기에 무료 14 ​​일 평가판이있다.

    그것이 설치 한 후에는 추가 기능 메뉴 (에서 액세스 2010 그것의 데이터베이스 도구 -> 추가 기능)을 통해 액세스 할 수 있습니다.

  4. ==============================

    4.디버깅은 더 많은 도전이다. 하나의 열이 꺼져있는 경우, 그 수정에 매우 쉽다 보통이다. 그러나 나는 당신이 수행 할 필요가 더 복잡한 디버깅 작업이 있으리라 믿고있어.

    디버깅은 더 많은 도전이다. 하나의 열이 꺼져있는 경우, 그 수정에 매우 쉽다 보통이다. 그러나 나는 당신이 수행 할 필요가 더 복잡한 디버깅 작업이 있으리라 믿고있어.

    어리둥절 때, 나는 일반적으로 FROM 절과 디버깅을 시작합니다. 나는 모두에게 큰 쿼리를 구성하는 테이블 및 하위 쿼리를 다시 추적 및 확인이 제대로 정의 조인 확인하십시오.

    그럼 난 내 WHERE 절을 보십시요. 나는 테이블에 간단한 쿼리를 많이 실행하고 이미 확인했다고 하위 쿼리 또는 그 나는 이미 신뢰, 나는 큰 쿼리를 실행할 때, 나는 조건을 기대 얻고 있는지 확인 대신합니다. 나는 동시에 조건을 가입 한 번 확인합니다.

    나는 확실히 내가 정말 관련된 공식이 복잡 특히,보고 싶은 검색하고있어 수 있도록 내 열 정의를 두 번 확인합니다. 당신이 뭔가 열 정의에서 조정 된 하위 쿼리처럼 복잡 한 경우

    그리고 나는 확실히 's와 "UNION"' "DISTINCT는"필요한 중복을 제거하지 마십시오 UNION ALL없이이야 것을 만드는, 내가 제대로 데이터를 그룹화하고 있습니다 있는지 확인하십시오.

    나는 내가이 방법으로 분류 될 수없는 SQL 쿼리가 발생했습니다 생각하지 않습니다. 나는이 같은 조직적으로 항상 모르겠지만, 진짜 stumper을 분해 시작하는 좋은 방법입니다.

    당신이 당신의 쿼리를 쓸 때 내가 추천 할 수있는 것은 이것이다 : 생산 코드에 SELECT *를 사용하지 마십시오. 이런 식으로 모든 열을 선택하면 유지 보수 악몽이며, 당신의 스키마 변화를 기본 때 큰 문제로 이어집니다. 당신이 미래에 유지됩니다 것을 SQL 코드를 작성하는 경우 당신은 항상 각각의 모든 컬럼을 작성해야합니다. 나는 ' "SELECT *"그냥 치우는에 의해 자신의 시간과 걱정을 많이 저장 내 프로젝트에요.

    이것의 단점은 그 여분의 열을 쿼리 "* 선택"을 참조 쿼리에 자동으로 표시되지 것입니다. 그러나 당신은 당신의 쿼리와 관련되는 방법을 알고 있어야 서로 어쨌든, 당신은 여분의 열을 필요로하는 경우, 다시 가서 추가 할 수 있습니다.

    이 코드 저장소를 유지해야하므로 약간의 번거 로움이 있지만, 당신은 소프트웨어 버전 관리 한 경우, 번거 로움 가치가 그 이상입니다. 내가 Access 데이터베이스에 기록 된 SQL 코드를 버전 관리의 방법을 들어 본 적이 있지만 불행하게도, 난 그들을 사용한 적이 없으니까.

  5. ==============================

    5.당신은 MS Access에서 정말 복잡한 쿼리를하고 있다면, 나는 .SQL 파일에, 예를 들면 ... Access 데이터베이스 자체 곳 밖에 그 쿼리의 저장소를 유지 고려할 것입니다 당신이 할 수있는 그 다음 INTYPE 같은 에디터가 편집 구문 강조 기능을 제공합니다. 그것은 두 곳 모두에서 쿼리를 업데이트 할 필요가 있습니다,하지만 당신은 그것을 편리하게 서식이 제대로 강조 그것에 대한 "공식적인"자리를 가지고 찾는 끝낼 수 있습니다.

    당신은 MS Access에서 정말 복잡한 쿼리를하고 있다면, 나는 .SQL 파일에, 예를 들면 ... Access 데이터베이스 자체 곳 밖에 그 쿼리의 저장소를 유지 고려할 것입니다 당신이 할 수있는 그 다음 INTYPE 같은 에디터가 편집 구문 강조 기능을 제공합니다. 그것은 두 곳 모두에서 쿼리를 업데이트 할 필요가 있습니다,하지만 당신은 그것을 편리하게 서식이 제대로 강조 그것에 대한 "공식적인"자리를 가지고 찾는 끝낼 수 있습니다.

    또는, 가능한 모든에서, 또한 무료이며, 당신에게 당신은 SQL 관리 스튜디오 (무료)을 통해 원하는 기능을 제공 할 것입니다 SQL 서버 2005 익스프레스 에디션으로 전환합니다.

  6. ==============================

    6.Smandoli에서이 제안에 확장 :

    Smandoli에서이 제안에 확장 :

    NO:   DoCmd.RunSQL ("SELECT ...")
    YES:  strSQL = "SELECT ..."
          DoCmd.RunSQL (strSQL)
    

    당신이 (구문 색상 및 모든과) 자주 사용하는 텍스트 편집기로 편집, 외부 파일에 SQL 코드를 유지하려는 경우, 당신은이 의사 코드처럼 뭔가를 할 수 :

    // On initialization:
    global strSQL
    f = open("strSQL.sql")
    strSQL = read_all(f)
    close(f)
    
    // To to the select:
    DoCmd.RunSQL(strSQL)
    

    어쩌면 많은 투박한 - -이 조금 투박 할 수 있지만 편집 - 복사 - 붙여 넣기의 일관성 문제를 방지 할 수 있습니다.

    분명히이 직접 SQL 디버깅하지만, 읽을 수있는 방식으로 코드를 관리 해결하지 않는 것은 문제의 일부입니다.

  7. ==============================

    7.재귀와 마찬가지로, 난 내 쿼리를 작성하는 외부 편집기를 사용합니다. 나는 한 번에 여러 개의 스크립트를 유지하기위한 라이트 탐색기 확장자 ++ 메모장을 사용하고, 일회성 스크립트 Notepad2. (나는 불꽃 기반 편집자 종류 부분의입니다.)

    재귀와 마찬가지로, 난 내 쿼리를 작성하는 외부 편집기를 사용합니다. 나는 한 번에 여러 개의 스크립트를 유지하기위한 라이트 탐색기 확장자 ++ 메모장을 사용하고, 일회성 스크립트 Notepad2. (나는 불꽃 기반 편집자 종류 부분의입니다.)

    또 다른 옵션은 SQL Server Express에 함께 제공되는 무료 SQL Server 관리 Studio Express를 사용하는 것입니다. 나는 일반적으로 어쨌든 SQL 서버 백 엔드에 링크에 ODBC를 사용하기 때문에 일반적으로, 그것은 SQL 대신 Access를 사용하는 쿼리를 작성하는 데 사용할 : (EDIT 죄송합니다, EdgarVerona, 당신이 이미 언급 통지를하지 않았다!). 액세스 MDB의에 의해 사용되는 SQL Server 및 제트 SQL에 의해 사용되는 T-SQL의 구문의 차이가, 때로는 상당한 것을 조심하십시오.

  8. ==============================

    8.여기서 뭐 MS-액세스 호출 '쿼리'및 SQL 호출 '보기'또는 약에 대해 이야기하는 'MS-액세스 통과'SQL 쿼리입니다 쿼리? 누군가가 쉽게 길을 잃을 수있다! 내 솔루션은 다음과 같다

    여기서 뭐 MS-액세스 호출 '쿼리'및 SQL 호출 '보기'또는 약에 대해 이야기하는 'MS-액세스 통과'SQL 쿼리입니다 쿼리? 누군가가 쉽게 길을 잃을 수있다! 내 솔루션은 다음과 같다

    내가 쿼리 (중 레코드를 반환 여부)을 실행해야 할 때 그때 사용되는 내 VBA 코드의 작은 기능 getSQLQuery 있습니다 :

    Dim myQuery as string, _
        rsADO as ADODB.recorset
    
    rsADO = new ADODB.recordset
    myQuery = getSQLQuery(myId_Query)
    
    'if my query retunrs a recordset'
    set rsADO = myADOConnection.Execute myQuery
    'or, if no recordset is to be returned'
    myADOConnection.Execute myQuery
    

    보기를 들어, 서버 측에서 그들을 유지하고 클라이언트 측에서이를 참조하는 것도 가능하다

    set rsADO = myADOConnection.execute "dbo.myViewName"
    
  9. ==============================

    9.그럼 내 지식에 2 가지 옵션이 있습니다 :

    그럼 내 지식에 2 가지 옵션이 있습니다 :

  10. from https://stackoverflow.com/questions/418960/managing-and-debugging-sql-queries-in-ms-access by cc-by-sa and MIT license