복붙노트

[SQL] 당신은 MS Access 2003에서 매개 변수가있는 쿼리를 작성하고 매개 변수를 채우기 위해 다른 쿼리 / 양식을 사용하고 결과 집합을 어떻게받을 수 있습니까

SQL

당신은 MS Access 2003에서 매개 변수가있는 쿼리를 작성하고 매개 변수를 채우기 위해 다른 쿼리 / 양식을 사용하고 결과 집합을 어떻게받을 수 있습니까

나는 MS Access 2003에서 매개 변수가있는 쿼리를 작성하고 해당 쿼리에 특정 폼 요소의 값을 공급 한 후 해당 결과 집합을 다시 얻을 수 있기를 좋아하고 그들과 함께 몇 가지 기본적인 계산을 할 것입니다. 나는 쿼리의 매개 변수는 폼 요소에 의해 채워 얻을하는 방법을 알아내는 짧은 올라오고 있어요. 내가 VBA를 사용하는 경우, 그 괜찮아요.

해결법

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

    1.이 매개 변수 (그들은 믿을하면 어디 있었는지, 그렇지 않으면 액세스 최신 버전의 결과는 예측할 수 없습니다)로 정의하는 것이 중요하지만 폼의 컨트롤에 대한 참조는, Access 쿼리에서 직접 사용할 수 있습니다.

    이 매개 변수 (그들은 믿을하면 어디 있었는지, 그렇지 않으면 액세스 최신 버전의 결과는 예측할 수 없습니다)로 정의하는 것이 중요하지만 폼의 컨트롤에 대한 참조는, Access 쿼리에서 직접 사용할 수 있습니다.

    당신을 MyForm의 성 제어하여 쿼리를 필터링하려는 경우 예를 들어, 당신이 당신의 기준으로 사용하십시오 :

    LastName = Forms!MyForm!LastName
    

    그럼 당신은 매개 변수로 폼 참조를 정의하는 것입니다. 결과 SQL은 다음과 같이 표시 될 수 있습니다

    PARAMETERS [[Forms]!MyForm![LastName]] Text ( 255 );
    SELECT tblCustomers.*
    FROM tblCustomers
    WHERE tblCustomers.LastName=[Forms]![MyForm]![LastName];
    

    이 목적을 위해 저장된 쿼리를해야하는 이유 그러나 나는 물어 것입니다. 당신은 결과에 뭐하는거야? 폼이나 보고서에 표시? 그렇다면, 당신은 양식 / 보고서의 레코드 원본에서이 작업을 수행 할 수 있으며이 매개 변수를 작성 지시에 진열하지 않고 다른 상황에서 사용할 수 있도록 매개 변수에 의해 훼손되지 않은 저장된 쿼리를 둡니다.

    당신이 코드에서 일을하는 경우 반면에, 그냥 즉석에서 SQL을 작성하여 WHERE 절을 구성하는 폼 컨트롤의 문자 값을 사용합니다.

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

    2.다음 코드 예제이다. 이 매개 변수 txtHospital를 사용하여 테이블을 업데이트합니다 :

    다음 코드 예제이다. 이 매개 변수 txtHospital를 사용하여 테이블을 업데이트합니다 :

    Set db = CurrentDb
    
    Set qdf = db.QueryDefs("AddHospital")
    qdf.Parameters!txtHospital = Trim(Me.HospName)
    qdf.ReturnsRecords = False
    
    qdf.Execute dbFailOnError
    
    intResult = qdf.RecordsAffected
    

    다음은 SQL의 예입니다 :

    PARAMETERS txtHospital Text(255); 
    
    INSERT INTO tblHospitals ( 
    [Hospital] )
    
    VALUES ( 
    [txtHospital] )
    
  3. ==============================

    3.이 문제를 해결하기 위해 세 가지 전통적인 방법이 있습니다 :

    이 문제를 해결하기 위해 세 가지 전통적인 방법이 있습니다 :

    [? ISO의 국가의 코드를 입력]! 나는 당신이 좋아하는 뭔가를 주입과 같은 양식의 필드 또는 참조를 위해 집결지 것이 나에게 단지 잘못된 생각 : [양식] [MyForm을] [성]!.

    우리가 데이터를 공급하고 다른 분야와 함께, 여러 장소에서 동일한 쿼리를 다시 사용하거나 쿼리를 실행할 때 데이터 항목을 빠뜨리지 않는 사용자에 의존 할 필요가 없음을 의미합니다. 내 기억으로는 더 많은 사용자 입력 매개 변수를 두 번 이상 동일한 값을 사용하는 것이 어려울 수 있습니다.

    일반적으로 나는이 즉시 쿼리를 내장 마지막 옵션을 선택하고 필요에 따라 쿼리 개체를 업데이트했습니다. 그러나, SQL 주입 공격의 유행 (실수 또는 고의로 내 사용자를 아는), 그리고 그것은 단지 구역질 있다고.

    내가 뒷조사를했고, 그래서 나는 여기에 다음을 발견 (http://forums.devarticles.com/microsoft-access-development-49/pass-parameters-from-vba-to-query-62367.html) :

    'Ed. Start - for completion of the example
    dim qryStartDate as date
    dim qryEndDate as date
    qryStartDate = #2001-01-01# 
    qryEndDate = #2010-01-01#   
    'Ed. End
    
    'QUOTEING "stallyon": To pass parameters to a query in VBA 
    '                     is really quite simple:
    
    'First we'll set some variables:
    Dim qdf As Querydef
    Dim rst As Recordset
    
    'then we'll open up the query:
    Set qdf = CurrentDB.QueryDefs(qryname)
    
    'Now we'll assign values to the query using the parameters option:
    qdf.Parameters(0) = qryStartDate
    qdf.Parameters(1) = qryEndDate
    
    'Now we'll convert the querydef to a recordset and run it
    Set rst = qdf.OpenRecordset
    
    'Run some code on the recordset
    'Close all objects
    rst.Close
    qdf.Close
    Set rst = Nothing
    Set qdf = Nothing
    

    (나는, 그것을 내가 나의 여행에서 수집 뭔가 나 자신을 테스트하지 않았기 때문에 모든에 한 번 I가 이렇게 싶었지만, 내 이전에 언급 잡든지 중 하나를 사용하여 종료 한 상태)

    편집하다 나는 마지막으로이를 사용하는 원인을했다. 여기에 실제 코드입니다.

    '...
    Dim qdf As DAO.QueryDef
    Dim prmOne As DAO.Parameter
    Dim prmTwo As DAO.Parameter
    Dim rst as recordset
        '...
        'open up the query:
        Set qdf = db.QueryDefs("my_two_param_query") 'params called param_one and 
                                                     'param_two
    
        'link your DAP.Parameters to the query
        Set prmOne = qdf.Parameters!param_one
        Set prmTwo = qdf.Parameters!param_two
    
        'set the values of the parameters
        prmOne = 1 
        prmTwo = 2
    
        Set rst = qdf.OpenRecordset(dbOpenDynaset, _
                                                dbSeeChanges)
        '... treat the recordset as normal
    
        'make sure you clean up after your self
        Set rst = Nothing
        Set prmOne = Nothing
        Set prmTwo = Nothing
        Set qdf = Nothing
    
  4. ==============================

    4.의 예를 들어 보자. 같은 매개 변수가있는 쿼리 외모 :

    의 예를 들어 보자. 같은 매개 변수가있는 쿼리 외모 :

    Select Tbl_Country.* From Tbl_Country WHERE id_Country = _
        [?enter ISO code of the country]
    

    당신은 당신이 당신의 컨트롤과 그 안에 어떤 데이터가 폼에서이 값합니다 ([? 입력 ... 국가를 하나)를 얻을 수 있도록하고 싶습니다. 음 ...이 가능할 수도 있지만, 일부 코드의 정상화가 필요합니다.

    하나 개의 솔루션은 id_Country의 값을 보유 할 컨트롤에 같은 fid_Country 같은 특정 로직의 이름을 따서 명명 양식 컨트롤을 가지고하는 것입니다. 귀하의 캔은 문자열로 쿼리를 :

    qr = "Select Tbl_Country.* From Tbl_Country WHERE id_Country = [fid_country]"
    

    당신이 당신의 형태로 모든 요청 된 데이터를 입력 한 후, 당신의 "조회"버튼을 누릅니다. 논리는 모든 컨트롤을 검색하고 결국 컨트롤의 값으로 매개 변수를 대체 쿼리에 있는지 확인합니다 :

    Dim ctl as Control
    For each ctl in Me.controls
        If instr(qr,"[" & ctl.name & "]") > 0 Then
             qr = replace(qr,"[" & ctl.name & "]",ctl.value)
        End if
    Next i
    

    이렇게, 당신은 매개 변수가 실제 데이터로 대체되었습니다 완전히 업데이트 쿼리를해야합니다. fid_country (문자열, GUID, 날짜 등)의 유형에 따라 최종 쿼리 등을 얻기 위해, 몇 가지 추가 따옴표를 추가하거나하지 않을 수 :

    qr = "Select Tbl_Country.* From Tbl_Country WHERE id_Country = ""GB"""
    

    당신이 레코드를 여는 데 사용할 수있는 완전히 액세스 호환 쿼리는 무엇입니까 :

    Set rsQuery = currentDb.openRecordset(qr)
    

    난 당신이 여기에 다있다 생각합니다.

    당신의 목표는 developp Access 응용 프로그램에있을 때이 주제는 매우 중요하다. 당신은 발사 쿼리뿐만 아니라 필터 연속 형태 및 보고서 매개 변수를 관리 (단지 엑셀은 "자동 필터"옵션으로 수행 방식에)뿐만 아니라, 자신의 GUI에서 제공하는 사용자에게 쿼리 데이터에 대한 표준적인 방법이있다. 행운을 빕니다!

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

    5.쉬운 방법은 여기에 마이크로 소프트의 setParameter를 '정보 페이지입니다

    쉬운 방법은 여기에 마이크로 소프트의 setParameter를 '정보 페이지입니다

    DoCmd.SetParameter "frontMthOffset", -3
    DoCmd.SetParameter "endMthOffset", -2
    DoCmd.OpenQuery "QryShowDifference_ValuesChangedBetweenSELECTEDMonths"
    

    여기서 Access 쿼리의 SQL은 [frontMthOffset] 실제로 SQL에 포함되어 있습니다. 예를 들면

    "select blah from mytable where dateoffset=[frontMthOffset]"
    

    그것은 모든 단지 작품!

  6. from https://stackoverflow.com/questions/95277/how-do-you-create-a-parameterized-query-in-ms-access-2003-and-use-other-queries by cc-by-sa and MIT license