Skulle behöva filtrera ett recordset i VB men får inte riktigt till det. Det jag är ute efter är att få in (x = true/false OR x = null) AND (y = true/false OR y = null) AND (z = ...) osv Från MSDN: Jättebra tips! Dock är det så att jag har 7 olika parametrar att kolla så det blir lite för många kombinationer att få ihop. Funderar nu på att jobba med ett temporärt recordset o sen fylla det "riktiga" efter att ha gjort diverse kontroller (mha if-satser istället). Så nu ska jag bara klura ut hur jag gör det på ett bra sätt :)Filtrering av record set
Får då följande felmedd:
Run-time error '3001':
Arguments are of the wrong type, are out of acceptable range, or are inconflict with one another.
Har även testat att kolla (x <> not true/false) AND (y <> not true/false) osv men då fungerar inte NULL-kontrollen (dvs de rader som har värdet NULL filtrerars bort).
Finns det någon annan möjlighet el måste jag göra någon annan lönsing?
Tack tack i förhand!
/Jenny
Sv: Filtrering av record set
<info>
# There is no precedence between AND and OR. Clauses can be grouped within parentheses. However, you cannot group clauses joined by an OR and then join the group to another clause with an AND, like this:
(LastName = 'Smith' OR LastName = 'Jones') AND FirstName = 'John'
# Instead, you would construct this filter as
(LastName = 'Smith' AND FirstName = 'John') OR (LastName = 'Jones' AND FirstName = 'John')
</info>
Här kommer ett litet exempel:
Option Explicit
Private Sub Command1_Click()
Dim rs As ADODB.Recordset
Dim fields As Variant
Dim values As Variant
Dim x As Variant, y As Variant, z As Variant
Set rs = New ADODB.Recordset
rs.fields.Append "x", adBoolean, , adFldIsNullable
rs.fields.Append "y", adBoolean, , adFldIsNullable
rs.fields.Append "z", adBoolean, , adFldIsNullable
rs.Open
fields = Array("x", "y", "z")
values = Array(Null, False, True)
For Each x In values
For Each y In values
For Each z In values
rs.AddNew fields, Array(x, y, z)
Next
Next
Next
rs.MoveFirst
rs.Filter = "(X = True AND Y = False) OR " + _
"(X = True AND Y = Null) OR " + _
"(X = Null AND Y = False) OR " + _
"(X = Null AND Y = Null)"
ListRecordset rs
End Sub
Private Sub ListRecordset(rs As ADODB.Recordset)
Dim field As ADODB.field
Debug.Print "-------------------------------------------"
For Each field In rs.fields
Debug.Print field.Name,
Next
Debug.Print
Debug.Print "-------------------------------------------"
Do Until rs.EOF
For Each field In rs.fields
Debug.Print field.Value,
Next
Debug.Print
rs.MoveNext
Loop
End Sub
Sv:Filtrering av record set