3

テーブル内の空白のフィールドを検索する SQL ステートメントを MS Access で作成しようとしています。たとえば、患者の姓が欠落しているとします。このクエリはこれを取得する必要があります。

どうすればこれを行うことができますか?最初のレコードでそれを行う方法を決定することはできますが、テーブル全体では困難であることが証明されています

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
4

3 に答える 3

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
于 2013-03-07T22:06:49.197 に答える
2

MoveNextbeforeを使用すると、コードが希望どおりに動作するように見えますLoop。このバージョンでは、他にもいくつかの小さな変更を加えています。

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

ただし、質問では、「テーブル内の空白のフィールドを検索する SQL ステートメントを MS Access で作成したい」と述べました。しかし、クエリの代わりに、DAO.Recordset. あなたが本当に何を望んでいるのかわからない。

于 2013-03-07T22:09:11.907 に答える
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

これにより、 FieldNameが Nullであるすべてのレコードをコードで検索し、FieldName を文字列として渡す即時ウィンドウに結果を出力する必要があります。

于 2013-03-08T14:20:57.367 に答える