2016-09-21 1 views
0

UI라는 콤보 상자를 작성하려고하는데 사용자가 콤보 상자 "cmbFilter"에서 차원 매개 변수를 선택한 다음 텍스트 상자에 +/- 공차를 추가합니다. "txtTererance". 목록에서 부품 번호를 선택한 후에는 해당 매개 변수의 tolorence 범위에있는 유사한 부품 번호에 대한 결과를 반환해야합니다. 테이블의 필드 이름은 차원 매개 변수이며 폼로드 코드의 콤보 박스에 대한 .AddItem입니다.SQL 쿼리에서 필드 선택기로 양식 컨트롤 사용

예. 부품 번호 1 OD가 5이므로 검색 매개 변수로 "OD"를 선택한 다음 +/- 1로 공차를 설정합니다. 결과는 부품 번호 2에 OD가 6이지만 부품 번호 3에 OD 7이 있어야합니다 .

enter image description here

내가 상관없이 내가 조작이나 구문 오류를 얻을이 코드의 구문으로 변경 어떤 쿼리하지만 에 listboxs 행 원본을 설정할 수 없다. 그래서 나는 폼 컨트롤 권한을 참조하지 않는 Im, 또는 내 논리가 맞지 않다고 가정한다.

액세스 할 때 SQL 디자인보기에서 다음 코드를 피곤했습니다. 나는 또한 액세스 여전히 VBA 행운의 SQL 코드를 작성하는 것을 시도했다

SELECT Part_Matrix.Part_Number, Part_Matrix.Customer, Part_Matrix.Large_OD, Part_Matrix.Vent_Opening, & _ 
    Part_Matrix.BPT, Part_Matrix.MFT, Part_Matrix.PD, Part_Matrix.Hat_ID, Part_Matrix.Microfinish, & _ 
    Part_Matrix.Turn_Operations, Part_Matrix.Stud_Holes, Part_Matrix.SH_Dimensions, Part_Matrix.Manufacturer_Holes, & _ 
    Part_Matrix.MH_Dimensions, Part_Matrix.Other_Holes, Part_Matrix.Other_Dimension 
    FROM Part_Matrix 
    WHERE [Forms]![UI]![cmbFilter] 
    BETWEEN (((SELECT [Forms]![UI]![cmbFilter] FROM Part_Matrix WHERE Part_Number = [Forms]![UI]![lbSelected]) - [Forms]![UI]![txtTolerance]) 
    AND ((SELECT [Forms]![UI]![cmbFilter] FROM Part_Matrix WHERE Part_Number = [Forms]![UI]![lbSelected]) + [Forms]![UI]![txtTolerance])) 
ORDER BY [Forms]![UI]![cmbFilter] DESC; 

SQL은 아래 코드는 내가 위에서는 이제 동일한 논리를 알고, 단순한 텍스트였다.

Private Sub btnSearch_Click() 
Dim SQL As String 
If txtTolerance = "" Then 
    MsgBox ("No Tolerance Entered") 
    Exit Sub 
ElseIf cmbFilter = "" Then 
    MsgBox ("No Filter Criteria Entered") 
    Exit Sub 
Else 

    SQL = "SELECT Part_Matrix.[Part_Number], " & Me.cmbFilter & " " & _ 
    "FROM Part_Matrix" & _ 
    "ORDER BY " & Me.cmbFilter & " DESC;" 

    Debug.Print SQL 
    DoCmd.RunSQL SQL 
    lbFilterResults.RowSource = SQL 
    lbFilterResults.Requery 
End If 
End Sub 
+0

'... FROM Part_MatrixORDER BY ...'당신은 검색어의 단어 사이에 공백을 넣어야합니다. –

+0

당신은 vba에서 이야기하고 있습니까? 또는 쿼리? – holi4683

+0

VBA에서 SQL 변수의 값 : Part_Matrix와 ORDER 사이에 공백을 두지 않았습니다. –

답변

2

즉 문 사이에서 원하는 값을 반환하는 대신 SELECT의을 DLookup을 사용하여,이보십시오. dlookup은 콤보 상자에서 선택한 필드의 값을 반환해야한다고 생각합니다. 또한 동일한 양식의 코드를 실행 중이라고 가정하고 양식 "UI"를 제거하는 것을 단순화했습니다. 이게 나중에 작동하는지 알려주세요.

intTarget = dlookup(me!CmbFilter, "PartMatrix", "Part_Number = " & me!LbSelected) 
intLower = intTarget - me!txtTolerance 
intUpper = intTarget + me!txtTolerance 

    strSQL = "SELECT * FROM Part_Matrix WHERE " & me!cmbFilter & " " & _ 
      "BETWEEN " & intLower & " AND " & intUpper 
+0

나는 어디에서 이런 일이 일어나는가하지만 '쿼리 표현식에서 구문 오류 (연산자가 누락 됨)'[Part_Number] = 01.N221.10' 01.N221.10이 lbSelected 인 것을 좋아합니다. – holi4683

+0

Ahh, intTarget = DLookup (Forms! [UI]! cmbFilter, "Part_Matrix", "Part_Matrix.Part_Number = '"& Me! lbSelected.Value & "'")'. 당신은 처음에는'& " '"와'''를 놓쳤습니다. 도와 줘서 고마워! – holi4683

+0

아아, 두려워한 문자열 대 숫자 ID. 다행히 다행 이네요. – geeFlo

0

BETWEEN 문에서 테이블의 [Large_OD] 필드를 참조하고 'S '폼은 참조하지 마십시오.

WHERE Large_OD 
    BETWEEN (((SELECT Large_OD FROM Part_Matrix WHERE Part_Number = [Forms]![UI]![lbSelected]) - [Forms]![UI]![txtTolerance]) 
    AND ((SELECT Large_OD FROM Part_Matrix WHERE Part_Number = [Forms]![UI]![lbSelected]) + [Forms]![UI]![txtTolerance])) 
ORDER BY " & Me.cmbFilter & " DESC; 
+0

감사합니다 techspider. 이것에 익숙하지 않고 그런 식으로 코드를 차단하는 방법을 몰랐습니다. – geeFlo

+0

사용자가 항상 Large_OD가 아닌 검색 매개 변수를 변경합니다. 핵심은 콤보 상자에서 필드 이름을 선택하면 검색 매개 변수 인 'WHERE "선택된 검색 매개 변수"라는 것입니다. 내가 준 사례는 Large_OD였습니다. 그것은 Small_OD, BPT, theres 13 가지 옵션이 될 수 있습니다. – holi4683

+0

나는 지금 그것을 얻는다라고 생각한다. 방금 게시 한 다른 답변을 참조하십시오. – geeFlo