[SQL] 당신은 MS Access 2003에서 매개 변수가있는 쿼리를 작성하고 매개 변수를 채우기 위해 다른 쿼리 / 양식을 사용하고 결과 집합을 어떻게받을 수 있습니까
SQL당신은 MS Access 2003에서 매개 변수가있는 쿼리를 작성하고 매개 변수를 채우기 위해 다른 쿼리 / 양식을 사용하고 결과 집합을 어떻게받을 수 있습니까
나는 MS Access 2003에서 매개 변수가있는 쿼리를 작성하고 해당 쿼리에 특정 폼 요소의 값을 공급 한 후 해당 결과 집합을 다시 얻을 수 있기를 좋아하고 그들과 함께 몇 가지 기본적인 계산을 할 것입니다. 나는 쿼리의 매개 변수는 폼 요소에 의해 채워 얻을하는 방법을 알아내는 짧은 올라오고 있어요. 내가 VBA를 사용하는 경우, 그 괜찮아요.
해결법
-
==============================
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.다음 코드 예제이다. 이 매개 변수 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.이 문제를 해결하기 위해 세 가지 전통적인 방법이 있습니다 :
이 문제를 해결하기 위해 세 가지 전통적인 방법이 있습니다 :
[? 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.의 예를 들어 보자. 같은 매개 변수가있는 쿼리 외모 :
의 예를 들어 보자. 같은 매개 변수가있는 쿼리 외모 :
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.쉬운 방법은 여기에 마이크로 소프트의 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]"
그것은 모든 단지 작품!
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
'SQL' 카테고리의 다른 글
[SQL] SQL Server 2008의 쉼표에 의해 분할 기능 (0) | 2020.06.17 |
---|---|
[SQL] 어떤 SQL 매개 변수 당신을 보호합니까에서? (0) | 2020.06.17 |
[SQL] WM_CONCAT 함수의 SQL 서버 당량 [중복] (0) | 2020.06.17 |
[SQL] REGEXP_SUBSTR 오라클의 구분 기호로 공간과 문자로 분할 문자열 (0) | 2020.06.17 |
[SQL] 실행 계획에서 XML을 파쇄 (0) | 2020.06.17 |