Also, ich hab hier mal meine GUI die so ganz gut Funktioniert
KLICK
Dort ist zu sehen, dass ich versuche, durch Verschachtelung eine Suchabfrage zu machen.
Dabei gehe ich so vor, dass ich pro SuchFilter-Zeile ein SQL-SELECT mache und das dann mit UNION("Oder") bzw. INTERSECT("Und") mit dem nächsten verbinde (also ganz normale Mengenlehre) Sodass sowas in etwa diesem Schema entspricht:
(Select0) INTERSECT ((Select1) UNION (Select2)) INTERSECT (Select3) INTERSECT (Select4)
Die Klammerung von Select1 und 2 soll durch die Begriff "[Ebene runter]" bzw "[Ebene hoch]" geschehen.
Das klappt auch bisher - jedoch nur das "[Ebene runter]" - also das zurückgehen in die höhere Ebene gelingt mir nicht. Anstatt des Schemas weiter oben kommt folgendes:
(Select0) INTERSECT ((Select1) UNION (Select2) INTERSECT (Select3) INTERSECT (Select4))
Die Klammerung geschieht also mit allen Nachfolgenden.
Hier ist mein Code für die Funktion (in VB.NET - denke mal, das ist kein Prob. für euch

)
Code:
Private Function filterSearch(ByVal index As Int16, Optional ByVal level As String = "same")
'index gibt die aktuelle Zeile in der Tabelle an
'level gibt weiter ob eine Verschachtelung beginnt (oder endet(?))
Dim sql As String = ""
'Aktuelle Zeile wird durch index aus der Tabelle/DataGridView dgvSearchEditor aufgerufen
Dim searchParam As DataGridViewRow = dgvSearchEditor.Rows.Item(index)
'Logische Verknüpfung (Und/Oder)
Dim logic = searchParam.Cells.Item(0).Value
'Eigenheit des DataGridView eine neue Zeile zu erstellen wird abgefangen
Dim nextRowNew = dgvSearchEditor.Rows.Item(index + 1).IsNewRow
If searchParam.IsNewRow Then
Return ""
Else
Select Case searchParam.Cells.Item(1).Value
Case "Tags"
sql = "Tags " & index
Case "Postleitzahl"
sql = "Plz " & index
Case "Seminare-Tags"
sql = "S-Tags " & index
Case "[Ebene runter]"
sql = filterSearch(index + 1, "down")
Case "[Ebene hoch]"
sql = filterSearch(index + 1)
level = "up"
Case Else
End Select
Select Case level
Case "same"
Select Case logic
Case "Und"
If nextRowNew Then
Return " INTERSECT (" & sql & ")"
Else
Return " INTERSECT (" & sql & ")" & vbCrLf & filterSearch(index + 1)
End If
Case "Oder"
If nextRowNew Then
Return " UNION (" & sql & ")"
Else
Return " UNION (" & sql & ")" & vbCrLf & filterSearch(index + 1)
End If
Case Else
Return ""
Throw New ApplicationException("Keine logische Verknüpfung in Filter in Zeile " & index + 1)
End Select
Case "down"
If nextRowNew Then
Return "(" & sql & ")"
Else
Return "(" & sql & ")" & filterSearch(index + 1)
End If
Case "up"
Return ""
End Select
End If
End Function