# access abfrage



## zwerg (20. März 2003)

Hallo zusammen

Ich habe ein Problem, und hoffe dass mir da jemand weiterhelfen kann. 
Ich habe eine Inventar-DB erstellt. Die Tabelle hat 24 Felder. Dazu hab ich ein Suchformular gemacht das auf eine Abfrage verweist. Die Ereignisprozedur sieht so aus:

Option Compare Database
Option Explicit

Private Sub Befehl0_Click()

    DoCmd.Close acForm, Me.Name

End Sub


Private Sub Befehl9_Click()

    DoCmd.OpenQuery "abfrage"

End Sub

Die Tabelle enthält Datensätze, die nicht in jedem Feld einen Eintrag haben. Ich will in meinem Suchformular nach bestimmten Einträgen in bestimmten Feldern suchen können, die Datensätze, die im abgefragten Feld leer sind, sollen aber nicht angezeigt werden.
Meine Abfrage sieht dann so aus:

Wie [forms]![testform]![hws] & "*" Und ist Nicht Null

Nun das Problem:
Ich kann diese Kriterien für 7 Felder meiner Tabelle eingeben und alles klappt wunderbar, wenn ich das selbe für die restlichen Felder mache, ist die Abfrage leer. 
Ich hab schon alles ganz neu gemacht, hab mit kopieren/einfügen geübt, ... Kann mir jemand helfen? 
Was mach ich falsch?
Wenn ich die Abfrage unterteile und vier daraus mache, die dann einzeln ablaufen, dann gehts, aber sobald alle Felder in der selben Abfrage sind, ist Schluss.

Ist die Felderanzahl begrenzt? Was kann ich noch machen? Oder wie kann ich das Problem anders lösen?

Vielen Dank für eure Hilfe


----------



## Thomas Darimont (20. März 2003)

Moin...

Leg mal einen Button auf deinem Formular an und kopier mal folgenden Code in die Klick-Prozeur rein...
Müsste so funktionieren... hab bei mir eine Beispieltabelle für dein Problem angelegt, mit der es wunderbar Funktioniert ...


```
Dim rs As New ADODB.Recordset

Dim sqlstring As String
Dim fld As Field

sqlstring = "Select * from MEINETABELLE"

With rs
    .ActiveConnection = CurrentProject.Connection
    .LockType = adLockOptimistic
    .CursorType = adOpenDynamic
    .Open sqlstring
End With

If rs.EOF <> True And rs.BOF <> True Then

rs.MoveFirst

While (rs.EOF <> True)

For Each fld In rs.Fields
    If fld.Name = "Spalte1" Then  'Spalte, die ich überprüfen will ob isNull = true...
        If IsNull(fld.Value) Then
            rs.Delete adAffectCurrent
            Exit For
        End If
    ElseIf fld.Name = "Spalte2" Then
        If IsNull(fld.Value) Then
            rs.Delete adAffectCurrent
            Exit For
        End If
    ElseIf fld.Name = "Spalte3" Then
        If IsNull(fld.Value) Then
        rs.Delete adAffectCurrent
        Exit For
        End If
    '...
    End If
Next fld
    
    rs.MoveNext
Wend
End If

rs.MoveFirst

MsgBox rs.GetString 'Ausgabe zur Kontrolle...
```


Gruss Tom


----------

