2013-03-07 4 views
3

임 테이블에서 빈 필드를 찾을 SQL 문을 MS Access에서 만들려고합니다. 예를 들어 환자의 성이 누락되었다고 가정 해 보겠습니다.이 쿼리는이를 받아 들여야합니다.필드가 NULL 인 경우 테스트 ms 액세스

어떻게해야합니까? 나는 첫 번째 레코드 위해 그것을 할 방법을 결정 할 수 있어요하지만, 전체 테이블 어려운

Dim Rst As recordSet 
Dim f As Field 

'Current Record set 
Set Rst = CurrentDb.OpenRecordset("tblWebMeetingData") 

'Holds current fields data 
Dim fieldData 

'With Rst 
    'Do Until Rst.EOF 
     For Each f In Rst.Fields 
      If IsNull(f.Value) Then 
       MsgBox ("Field Name: " & f.Name) 
      End If 
     Next 
    'Loop 
'End With 

Rst.Close 

답변

2

더 우아하게 증명 :

Dim i As String 
i = "tblWebMeetingData" 
Dim j As Integer 
Dim rst As Recordset 

' For each Field in the table 
For j = 0 To CurrentDb.TableDefs(i).Fields.Count - 1 
    ' Return the number of lines that are null 
    Set rst = CurrentDb.OpenRecordset("SELECT count(*) FROM " & CurrentDb.TableDefs(i).Name & " WHERE " & CurrentDb.TableDefs(i).Fields(j).Name & " IS NULL") 
    rst.MoveFirst 
    ' Check if it's more than one 
    If rst.Fields(0).Value > 0 Then 
     MsgBox CurrentDb.TableDefs(i).Fields(j).Name 
    End If 
Next 
+1

이것은 효과가 있었지만 일부 필드 이름에 공백이 있기 때문에 []를 추가해야했습니다! 후속의 – Katana24

+0

종류 그러나 나가 일어난 정확한 행을 찾아 내기에 관하여 나는 어떻게 갈 ㅂ니까? – Katana24

+0

'count (*)'대신에 키를 사용할 수 있습니다. null 인 모든 필드의 키를 리턴합니다. 그런 다음 모든 결과를 반복하려면 Do until rst.EOF를 추가해야합니다. – user2088176

2

이 코드는 당신이 원하는 일을하는 것처럼 나에게 보이는 Loop 전에 MoveNext을 사용하는 경우 이 버전에서는 몇 가지 사소한 변경을했습니다.

Dim Rst As DAO.recordSet 
Dim f As DAO.Field 
Dim db As DAO.Database 

'Current Record set 
Set db = CurrentDb 
Set Rst = db.OpenRecordset("tblWebMeetingData", dbOpenTable, dbOpenSnapshot) 

With Rst 
    Do While Not .EOF 
     For Each f In .Fields 
      If IsNull(f.Value) Then 
       MsgBox "Field Name: " & f.Name 
      End If 
     Next 
     .MoveNext 
    Loop 
End With 

Rst.Close 

그러나, 질문에 당신은 당신이 "테이블에 빈 필드를 찾습니다 MS Access에서 SQL 문을 생성" 하려는 말했다. 그러나 쿼리 대신에 DAO.Recordset을 검사하는 VBA 코드를 보여주었습니다. 나는 네가 정말로 원하는 것이 무엇인지 확신하지 못한다.

+0

아, 죄송합니다. 나쁜 말씨 - 저는 쿼리와 관련하여 SQL 코드를 의미했습니다. – Katana24

1

왜 그냥 :

Public Sub CheckNull(FieldName as String) 
    Dim rs as DAO.RecordSet 

    Set rs = CurrentDB.OpenRecordset("SELECT IDField FROM tblMyTable WHERE " & FieldName & " Is Null") 

    If rs.eof then exit sub 

    Do until rs.Eof 
     debug.print rs!IDField 
     rs.movenext 
    Loop 
End Sub 

이 코드 조회에서 필드 이름 다음 null이며, 모든 기록은 당신이 문자열로 필드 이름을 전달하는 직접 실행 창에 결과를 인쇄해야합니다.

관련 문제