2009-09

Datum: 03.09.2009

Ort: Vereinsheim SG Stuttgart-West

Thema: Access udn Ferienzeit

Teilnehmer:  Ingmar Stauß, Dirk Eberhard, Sylvia Häusler, Susanne Röhrich, Thomas Röhrich, Roman Schütz, Dagmar Lutz

Bericht:  Dagmar Lutz

Dieses Mal in nicht allzu grosser Runde, trotzdem wurde heftig gearbeitet. Ich hatte ein Problem mitgebracht bei dem ich nicht so recht weiterkam.

Für eine Literaturstellenverwaltungsdatenbank (schönes Wortkonstrukt :-)) sollte eine Suche nach Schlagwörtern mit UND-Verknüpfung realisiert werden. Mein Ansatz war eine Kreuztabellenabfrage, die längs und quer durchsucht werden muss. Es wurden von verschiedener Seite Bedenken geäussert, dass bei sehr vielen Schlagwörtern access an seine Grenzen stossen könnte. Es wurde eine gestufte Filterung vorschlagen und eine Lösung mit Abfragen über SQL-Strings aufzubauen und dann auszuwerten.

Als ich nach einer Zigarettenpause zurück kam, fand ich Dirk und Ingmar über mein Laptop gebeugt  und heftig auf der Tastatur klappern.

Zwei Stunden später hatten sie eine Lösung gebastelt und hier ein Eindruck davon:

Ganz herzlichen Dank an Dirk und Ingmar 🙂

 

    a = Me!list_schlag.ItemsSelected.Count
    i = 0

    If Me!list_schlag.ItemsSelected.Count = 0 Then
        MsgBox „Es wurde keine Auswahl getroffen“
    Else
   
        For Each vIGr In Me![list_schlag].ItemsSelected
            i = i + 1
            If i > 1 Then
                strSQLjoin = strSQLjoin & “ LEFT JOIN t_schlag_dok AS A_“ & i & “ ON A_“ & i – 1 & „.dok_id=A_“ & i & „.dok_id“ & „)“

            End If
               
            strSQLwhere = strSQLwhere & „A_“ & i & „.schlag_id=“ & Format$(Me![list_schlag].ItemData(vIGr)) & “ AND “
   
        Next vIGr
       
        strSQLwhere = Left(strSQLwhere, Len(strSQLwhere) – 5)
        strSQLjoin = strSQLjoin
       
        strSQL = „SELECT DISTINCT A_1.dok_id FROM “ & String(a – 1, „(„) & „t_schlag_dok AS A_1 “ & strSQLjoin & “ WHERE “ & strSQLwhere

   
    End If
   
    vSql = „“
    vSql = „SELECT t_dok_stamm.id_dok, t_dok_stamm.titel, t_dok_stamm.datumm, t_dok_stamm.pfad, t_dok_stamm.bemerkungen, t_autor.autor, t_quelle.quelle, t_dokart.dokart „

    vSql = vSql & „FROM (t_dokart RIGHT JOIN (t_autor RIGHT JOIN (t_quelle RIGHT JOIN t_dok_stamm ON t_quelle.id_quelle = t_dok_stamm.quelle_id) ON t_autor.id_autor =    t_dok_stamm.autor_id) ON t_dokart.id_dokart = t_dok_stamm.dokart_id) INNER JOIN (“ & strSQL & „) AS Abfrage1 ON t_dok_stamm.id_dok = Abfrage1.dok_id“

       
    Set rs = CurrentDb.OpenRecordset(vSql, dbOpenSnapshot)
   
   
    If Not rs.EOF Then
   
        Me!f_u_schlag_and.Visible = True
        Me!f_u_schlag_and.Form.RecordSource = vSql
    Else
        MsgBox „Es ist kein Datensatz vorhanden.“
    End If

   
    rs.Close
    Set rs = Nothing

Suchen
Kategorien