2012-08-07 1 views
1

다시. 이 코드는 하나의 항목 만 선택하면 잘 작동하지만 두 개 이상의 항목을 선택하면 다음 코드 줄에서 "쿼리 오류 문법 오류 (쉼표)"오류가 발생합니다. intCountNull = DCount ("*", " "strCriteria &은" "여기 다중 선택 목록 상자에서 계산 하시겠습니까?

내 코드) :

Private Sub Command29_Click() 
Dim strCriteria As String 
Dim intCountNull As Integer 
Dim varItem As Variant 

'On Error GoTo Err_Command29_Click 

Me.Fields_Values.RowSource = "" 

For Each varItem In Me!List101.ItemsSelected 
strCriteria = strCriteria & "," & Me!List101.ItemData(varItem) 
Next varItem 

strCriteria = Right(strCriteria, Len(strCriteria) - 1) 

intCountNull = DCount("*", "Scrubbed", strCriteria & " Is Null") 
Fields_Values.RowSource = intCountNull & " null values found in " & strCriteria 

Exit_Command29_Click: 
    Exit Sub 
'Err_Command29_Click: 
    'MsgBox "Please select a field" 

최종 하위

+0

무엇을 원하십니까? 그리고 각각의 기준 또는 각각에 대해? 또는 카운트를 분리해도됩니까? strCriteria를 작성하고 필요한 줄을 제공하도록 코드를 조정해야합니다. – Fionnuala

+0

나는 선택한 각 항목에 대해 별도의 줄이 필요하고 별도의 계산이 필요합니다. – JenPhyllisB

+0

그래서이'Fields_Values.RowSource'가 어떻게 작동하는 걸까요? – Fionnuala

답변

0

... 더 이상의 항목이 나는 오류 선택"null의 하찮은 구문 오류 (쉼표) 쿼리 식에 "다음 코드 줄에 : intCountNull = DCount("*", "Scrubbed", strCriteria & " Is Null")

그건 의미가 있습니다. 목록 상자 선택 항목이 "field1", "field3"및 "field4"인 경우 DCount()이 오류 # 3075를 반환합니다. "쿼리 표현식에서 구문 오류 (쉼표) 'field1, field3, field4가 NULL입니다.'"

DCount() 표현 이 SELECT 문처럼 평가 될 것입니다 :

SELECT Count(*) 
FROM Scrubbed 
WHERE field1,field3,field4 Is Null 

그리고 DB 엔진은 확실히 그 WHERE 절에 대해 불평 할 것이다. 필드 이름 목록을 제공하고 목록 Is Null을 요청할 수는 없습니다. 각각의 필드가 Is Null인지 여부를 개별적으로 질문해야합니다.

왜 그런 오류가 발생했는지에 대한 설명입니다. 그러나, 나는 당신이 당신의 접근 방식을 바꿀 필요가 있다고 생각합니다.

선택한 항목을 반복하면서 Fields_Values에 대한 RowSource 값 목록 문자열을 작성하십시오. (Fields_Values에 대한 행 원본 유형 속성으로 값 목록이 있는지 확인하십시오.) 다음은 내가 원하는 것으로 보이는 테스트 샘플입니다. 사용자가도 Command29List101하지 않는 한 포함 선택한 항목을 클릭하도록 허용해야하는 이유

Private Sub Command29_Click() 
    Dim strCriteria As String 
    Dim intCountNull As Integer 
    Dim varItem As Variant 
    Dim strRowSource As String 

    Me.Fields_Values.RowSource = "" 
    For Each varItem In Me!List101.ItemsSelected 
     strCriteria = "[" & Me!List101.ItemData(varItem) & _ 
      "] Is Null" 
     intCountNull = DCount("*", "Scrubbed", strCriteria) 
     'Debug.Print strCriteria, intCountNull ' 
     strRowSource = strRowSource & ";" & intCountNull & _ 
      " null values found in " & _ 
      Me!List101.ItemData(varItem) 
    Next varItem 

    'Debug.Print strRowSource ' 
    If Len(strRowSource) > 0 Then 
     strRowSource = Mid(strRowSource, 2) 
     Me.Fields_Values.RowSource = strRowSource 
    End If 
    'Debug.Print strRowSource ' 
End Sub 

또한 내가 볼 수 없습니다. 선택이 이루어질 때까지 Command29을 비활성화하는 것이 좋습니다.

Private Sub Form_Load() 
    Me.Command29.Enabled = False 
End Sub 

Private Sub List101_AfterUpdate() 
    Me.Command29.Enabled = (Me.List101.ItemsSelected.Count > 0) 
End Sub 

마지막으로, 나는 당신이 자신에게 당신의 컨트롤에게 의미있는 이름을 부여하여 부탁을 제안거야 ... Command29cmdShowNullCounts 수와 List101lstFieldNames을 수 있습니다. 의미있는 이름은 수십 가지 컨트롤을 다룰 때 특히 유용합니다. 또한 몇 달 후에 양식 디자인을 다시 방문해야 할 때 도움이 될 것입니다. 미래에 인계해야하는 사람은 예의 바르게 평가할 것입니다.

+1

RowSourceType을 설정해야합니다. – Fionnuala

+0

HansUp의이 코드는 완벽하게 작동했습니다. 도와 줘서 고마워. – JenPhyllisB