복붙노트

[SQL] SQL에서 (엑셀) 쿼리에 매개 변수를 전달하는 방법

SQL

SQL에서 (엑셀) 쿼리에 매개 변수를 전달하는 방법

나는 SQL로 Excel을 "연결"그것은 좋은 일했다 - 나는 어떤 SQL 스크립트를 작성하고 그것은 큰 일했습니다. 내가하고 싶은 모든 쿼리에 매개 변수를 전달하는 것입니다. 언제나처럼 나는 SQL 쿼리에 매개 변수 (필터 조건)을 통과 할 수 있도록하려면 새로 고침합니다. "연결 속성"에서 매개 변수 버튼을 사용할 수 없습니다. 그래서 매개 변수 쿼리를 만들 수 없습니다. 캔 누구의 도움 나?

해결법

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

    1.그것은 당신이 연결하려는되는 데이터베이스, 당신은 연결, 당신이 사용하고 있는지 Excel 버전을 생성하는 방법에 따라 달라집니다. (또한, 대부분의 아마, 컴퓨터에 관련 ODBC 드라이버의 버전.)

    그것은 당신이 연결하려는되는 데이터베이스, 당신은 연결, 당신이 사용하고 있는지 Excel 버전을 생성하는 방법에 따라 달라집니다. (또한, 대부분의 아마, 컴퓨터에 관련 ODBC 드라이버의 버전.)

    다음 예는 내 로컬 컴퓨터에 모두 SQL 서버 2008 및 Excel 2007을 사용하고 있습니다.

    내가 (다른 소스에서 외부 데이터 가져 오기 섹션에서 리본의 데이터 탭,,) 데이터 연결 마법사를 사용하는 경우, 당신이했던 것과 같은 일을 보았다 : 매개 변수 버튼이 비활성화이었고,에 매개 변수를 추가 쿼리, FIELD2가 =?, Excel이 매개 변수의 값이 지정되지 않은 것을 불평을 야기하고, 변경 내용이 저장되지 않은 테이블에서 선택 필드 같은.

    나는 마이크로 소프트 쿼리 (데이터 연결 마법사와 같은 곳)를 사용하는 경우, 나는, 매개 변수를 만들어 그들에 대한 표시 이름을 지정하고 값을 쿼리가 실행 된 각 시간을 입력 할 수 있었다. 그 연결에 대한 연결 속성을 가져 오는 매개 변수 ... 버튼이 활성화되어, 내가 원하는 생각대로 매개 변수를 수정하여 사용할 수 있습니다.

    또한 Access 데이터베이스이 작업을 수행 할 수 있었다. 이 쿼리의 다른 유형의 데이터베이스를 치는 매개 변수화 된 쿼리를 작성하는 데 사용할 수있는 합리적인 것 같다,하지만 난 쉽게 바로 지금을 테스트 할 수 없습니다.

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

    2.이 게시물이 대답은 아마도 OP에 거의 사용 될 것 오래된 충분하다,하지만 난 내 연구 결과로 업데이트 것이라고 생각, 그래서 나는이 같은 질문에 대답하려고 영원히 보냈다.

    이 게시물이 대답은 아마도 OP에 거의 사용 될 것 오래된 충분하다,하지만 난 내 연구 결과로 업데이트 것이라고 생각, 그래서 나는이 같은 질문에 대답하려고 영원히 보냈다.

    이 답변은 이미 엑셀 문서의 장소에서 작업 SQL 쿼리를 가지고 있다고 가정합니다. 그 어느 것도 기존의 OLE DB 쿼리에 대한 작업에 보이지 않는다 제외하고, 하나에 매개 변수가있는 쿼리를 추가하는 방법을 설명하는 방법을 웹에서이 작업을 수행하는 방법을 보여주는 튜토리얼을 많이하고 많이 있습니다.

    그래서, 당신이 경우에, 나처럼, 작업 쿼리와 기존 Excel 문서를 건네있어,하지만 사용자가 데이터베이스 필드 중 하나를 기반으로 결과를 필터링 할 수 싶어하고 있다면, 나 같은입니다 둘 다 엑셀도 는 SQL 전문가, 이것은 당신을 도울 수 있습니다.

    이 질문에 대부분의 웹 응답은 추가해야한다는 말을 보인다는 "?" 쿼리에서 Excel에서 사용자 정의 매개 변수를 묻는 메시지를 표시하거나 프롬프트 또는 매개 변수가 있어야한다 [괄호]의 셀 참조를 배치 할 수 있습니다. 이것은 ODBC 쿼리를 위해 작동 할 수 있지만, 이전 인스턴스에서 "어떤 하나 이상의 필수 매개 변수가 지정된 값"및 "잘못된 열 이름 'XXXX'"또는 "알 수없는 개체를 반환하지는 OLE DB에 대한 작동하지 않는 것 뒤의 두에서 'XXXX' ". 영구적이 경우에 회색으로 보인다 마찬가지로, 신화 "매개 변수 ..."또는 "쿼리 편집 ..."버튼을 사용하면 옵션을 선택하지 않습니다. (참고로, 나는 엑셀 2010 사용하고 있지만, 엑셀 97-2003 통합 문서 (* .XLS))

    우리가 할 수있는 일, 그러나, 프로그래밍 우리의 쿼리 텍스트를 업데이트하는 간단한 루틴 매개 변수 셀과 버튼을 추가합니다.

    당신이 빈 셀에 프롬프트 옆의 버튼 (현상 제> 삽입 -> 버튼 (양식 컨트롤) 매개 변수를 넣을 수있는 우선, 외부 데이터 테이블 (또는 어디든지) 위의 행을 추가 - 당신은 개발자 탭을 활성화해야 하지만 그렇게 같이) 다른 곳에서 작업을 수행하는 방법을 찾을 수 있습니다 :

    다음으로, 외부 데이터 (파란색) 영역의 셀을 선택한 다음 열기 데이터 -> 모두 새로 고침 (드롭 다운) -> 연결 속성은 ... 쿼리 볼 수 있습니다. 다음 섹션의 코드는 이미 쿼리의 매개 변수 형태 (연결 속성 -> 정의 -> 명령 텍스트)가 있다고 가정합니다 "WHERE (DB_TABLE_NAME.Field_Name = '검색어 매개 변수 기본')"(괄호를 포함하여). 분명히 "DB_TABLE_NAME.Field_Name"(존재하는 경우 데이터베이스 테이블 이름, 데이터베이스 값 필드 (열) 이름 및 문서를 열 때 검색 할 몇 가지 기본 값을 기반으로, 코드에서 다른 될 필요가있다 "쿼리 매개 변수는 기본" 당신은) 자동 새로 고침 설정이 있습니다. 당신이 대화 상자의 맨 위에있는 쿼리의 "연결 이름"과 함께, 다음 절에서 그것을 필요로 "DB_TABLE_NAME.Field_Name"값을 적어 둡니다.

    닫기 연결 속성과는 VBA 편집기를 열려면 Alt + F11를 누르십시오. 당신이 이미에 있지 않은 경우, 바로 "프로젝트"창에서 버튼을 포함하는 시트의 이름을 클릭하고 "코드보기"를 선택합니다. (작은 / 큰 따옴표가 아슬 아슬하고 필요로 복사 권장) 코드 창에 다음 코드를 붙여 넣습니다.

    Sub RefreshQuery()
     Dim queryPreText As String
     Dim queryPostText As String
     Dim valueToFilter As String
     Dim paramPosition As Integer
     valueToFilter = "DB_TABLE_NAME.Field_Name ="
    
     With ActiveWorkbook.Connections("Connection name").OLEDBConnection
         queryPreText = .CommandText
         paramPosition = InStr(queryPreText, valueToFilter) + Len(valueToFilter) - 1
         queryPreText = Left(queryPreText, paramPosition)
         queryPostText = .CommandText
         queryPostText = Right(queryPostText, Len(queryPostText) - paramPosition)
         queryPostText = Right(queryPostText, Len(queryPostText) - InStr(queryPostText, ")") + 1)
         .CommandText = queryPreText & " '" & Range("Cell reference").Value & "'" & queryPostText
     End With
     ActiveWorkbook.Connections("Connection name").Refresh
    End Sub
    

    당신의 가치와 (두 위치에서) "DB_TABLE_NAME.Field_Name"와 "연결 이름"을 장착합니다 (따옴표와 공간과 기호의 필요성을 동일 포함한다).

    당신의 매개 변수가 갈 것이다 셀 (처음부터 빈 셀)과 함께 "셀 참조를"교체 - 나는 "B1"을 넣어, 그래서 광산은, 첫 번째 행의 두 번째 셀이었다 (다시 따옴표가 필요합니다).

    저장하고는 VBA 편집기를 닫습니다.

    해당 셀에 매개 변수를 입력합니다.

    바로 그때, 매크로로 RefreshQuery 서브를 할당하여 버튼을 클릭하여 버튼을 클릭합니다. 쿼리는 업데이트하고 올바른 데이터를 표시해야합니다!

    노트: 전체 필터 매개 변수 이름 ( "DB_TABLE_NAME.Field_Name를 =") 사용, 그렇지 않으면 그냥 기호는 충분한 것 같다, 그리고 렌 () 계산은 불필요한 것, 당신이 조인 쿼리에서 등호 기호의 다른 발생이있는 경우에만 필요합니다. 당신의 매개 변수도 테이블을 조인하는 데 사용되는 필드에 포함되어있는 경우에는 변경해야합니다 "paramPosition = InStr이 (queryPreText, valueToFilter) + 렌 (valueToFilter를) - 1"코드 라인을 paramPosition = InStr을 "을 ( 오른쪽 (.CommandText, 렌 (.CommandText은) - InStrRev (.CommandText, "")), valueToFilter) + 렌 (valueToFilter) - 1 + InStr이 (.CommandText는 "WHERE") "그래서 그것은 단지 valueToFilter을 찾습니다 있음 후 "WHERE".

    이 답변은 내가 쿼리 업데이트에 대한 기본 코드를 발견 datapig의 "BaconBits"의 도움으로 작성되었습니다.

  3. from https://stackoverflow.com/questions/5434768/how-to-pass-parameters-to-query-in-sql-excel by cc-by-sa and MIT license