Neuigkeiten:

Ist euer Problem gelöst, dann bitte den Knopf "Thema gelöst" drücken!

Mobiles Hauptmenü

Abfrage verlangt Parametereingabe (Nach Variablenübergabe)

Begonnen von joerg_w, Oktober 06, 2010, 14:32:41

⏪ vorheriges - nächstes ⏩

joerg_w

Zitat von: DF6GL am Oktober 07, 2010, 11:15:18
Hallo,

bei den Laufzeitfehlern fehlt aber doch der gesamte Select-Teil.. ?



Ja. Laufzeitfehler entsteht bei der Personenliste. Un da erscheint auch kein SELECT im Direktfenster.


Ich versuche jetzt mal die Status-Sache zu verbessern und das hier:

strSQL = srtrSQL & "WHERE T_Leistungsstunden.Person IN (" & sAuswahlPerson & ")"

*aaaaarggghhh*
bitte auf strSQL umbessern!


zu ändern. Ich bin im Moment noch auf dem alten Code. Soll ich den neuen einbauen?

database

Uuups,

ZitatDas Feld "Status" gehört zur Tabelle T_Vorgang

Die ist aber noch nicht in der SQL der Abfrage enthalten, also richtig reinjoinen und die Zuweisung an strSQL dann berichtigen / aktualisieren,

danach probieren wir am Besten mit dem neuen Code weiter!

joerg_w

Ok, ich versuch's erstmal selbst hinzubekommen ;) Ich druck mir den KRam jetzt erstmal aus und versuch zu kapieren, wie die Abfrage zusammengesetzt wird. Ich melde mich mit Erfolg/Misserfolg wieder ;)

Gruß

Jörg

EDIT: Personen geht jetzt ;)

database

Hallo,

erzeuge die Abfrage im graphischen Abfrageeditor, wechsle dann in die SQL-Ansicht und kopiere die SQL von dort raus (OHNE WHERE und ORDER BY) - ist die einfachste Methode

joerg_w

Ok, hab ich so gemacht.

Das hier ist da, was mir der grafische Editor gebastelt hat:

SELECT A_Auswertung_j.Firma, T_Leistungsstunden.VorgangsNr, A_Auswertung_j.Beschreibung, T_Leistungsstunden.Person, T_Leistungsstunden.Stunden, T_Vorgang.[A-Status], T_Leistungsstunden.Datum
FROM T_Vorgang INNER JOIN (T_Leistungsstunden INNER JOIN A_Auswertung_j ON T_Leistungsstunden.VorgangsNr = A_Auswertung_j.VorgangsNr) ON T_Vorgang.VorgangsNr = T_Leistungsstunden.VorgangsNr
ORDER BY A_Auswertung_j.Firma, T_Leistungsstunden.VorgangsNr;


Das hier ist mein Verusch das Ganze umzubauen, der mir am nächsten dran erscheint:

strSQL = "SELECT A_Auswertung_j.Firma, T_Leistungsstunden.VorgangsNr, A_Auswertung_j.Beschreibung, T_Leistungsstunden.Person, " & _
                    "T_Leistungsstunden.Stunden, T_Vorgang.[A-Status], T_Leistungsstunden.Datum " & _
                    "FROM T_Vorgang INNER JOIN (T_Leistungsstunden INNER JOIN A_Auswertung_j ON T_Leistungsstunden.VorgangsNr = A_Auswertung_j.VorgangsNr) ON T_Vorgang.VorgangsNr = T_Leistungsstunden.VorgangsNr"


Im Moment bekomme ich Laufzeitfehler für alle drei Listen. Beispiel Person:

ZitatLaufzeitfehler '3075':

Syntaxfehler (fehlender Operator) in Abfrageausdruck 'T.Vorgang.VorgangsNr = T_Leistungsstunden.VorgangsNrWHERE T_Leistungsstunden.Person IN ('Jörg') ORDER BY A_Auswertung_j.Firma, T_Leistungsstunden.VorgangsNr'.

Das hier steht im Direktfenster:

ZitatSELECT A_Auswertung_j.Firma, T_Leistungsstunden.VorgangsNr, A_Auswertung_j.Beschreibung, T_Leistungsstunden.Person, T_Leistungsstunden.Stunden, T_Vorgang.[A-Status], T_Leistungsstunden.Datum FROM T_Vorgang INNER JOIN (T_Leistungsstunden INNER JOIN A_Auswertung_j ON T_Leistungsstunden.VorgangsNr = A_Auswertung_j.VorgangsNr) ON T_Vorgang.VorgangsNr = T_Leistungsstunden.VorgangsNrWHERE T_Leistungsstunden.Person IN ('Jörg') ORDER BY A_Auswertung_j.Firma, T_Leistungsstunden.VorgangsNr;

Jörg
[/quote]

database

ja,
auf den ersten Blick nicht so schlimm, da fehlen lediglich Leerzeichen!


strSQL = "SELECT A_Auswertung_j.Firma, T_Leistungsstunden.VorgangsNr, A_Auswertung_j.Beschreibung, T_Leistungsstunden.Person, " & _
                   "T_Leistungsstunden.Stunden, T_Vorgang.[A-Status], T_Leistungsstunden.Datum " & _
                   "FROM T_Vorgang INNER JOIN (T_Leistungsstunden INNER JOIN A_Auswertung_j ON T_Leistungsstunden.VorgangsNr = A_Auswertung_j.VorgangsNr) ON T_Vorgang.VorgangsNr = T_Leistungsstunden.VorgangsNr "



Setze hier nach Vorgangsnummer (ganz am Ende vom String) ein Leerzeichen rein, dann wird WHERE mit Abstand im String stehen und das passt dann

T_Leistungsstunden.VorgangsNrWHERE T_Leistungsstunden.Person

So machts nämlich Probleme

Auf einen neuen Versuch :)

joerg_w

Jaaaaaaaaaa  ;D

Es klappt :) Tausend Dank!!!!

Im Moment klappen alle drei Felder. Damit kann ich die wichtigsten Auswertungen per Klick vornehmen (In welchem Projekt hat wer wie viel gearbeitet  oder: Zeige z.B. alle abgeschlossenen Projekte für die und die Mitarbeiter).

Jetzt läuft's gerade auf mit dem alten Code. Die Frage an die Experten: Besser auf den neuen Vorschlag wechseln oder beim alten bleiben (Never touch a running system ;) )?

Jörg

PS: Die einzige Erweiterung, die ich evtl. noch machen würde, wäre die Abfrage auf bestimmte Zeiträume einzugrenzen. Muss aber so gar nicht heute sein ;).

database

Hallo Jörg - schön, dass es nun endlich klappt.

Freilich kannst du ohne größere Probleme den neuen Code auch testen.
Wenn du ganz vorsichtig sein willst, leg dir eine Kopie der aktuellen Version an und teste die neue Variante da - da kannst du nichts verwurschtln.
Wenn dann funktioniert kopierst du ganz einfach die gesamte Prozedur in deine aktuelle Datei.

Ach ja - ein DRINGENDER Hinweis an der Stelle ....  Sichern ist nicht feig, sondern macht Sinn!

In diesem Sinne viel Spaß und Erfolg noch,
bis zum nächsten Mal

Grüße
Peter

p.s. Bitte auch diesen Beitrag in deinem Startbeitrag auf 'Gelöst' stellen - DANKE!

joerg_w

Für alle mit ähnlichem Problem: Hier der funktionierende Code:

Private Sub Befehl2_Click()
    Dim sAuswahlPerson As String
    Dim sAuswahlVorgang As String
    Dim sAuswahlStatus As String
    Dim strSQL As String
    Dim itm As Variant
    Dim chkWhere As Boolean

    'SQL-Grundgerüst zusammenstellen

   strSQL = "SELECT A_Auswertung_j.Firma, T_Leistungsstunden.VorgangsNr, A_Auswertung_j.Beschreibung, T_Leistungsstunden.Person, " & _
                    "T_Leistungsstunden.Stunden, T_Vorgang.[A-Status], T_Leistungsstunden.Datum " & _
                    "FROM T_Vorgang INNER JOIN (T_Leistungsstunden INNER JOIN A_Auswertung_j ON T_Leistungsstunden.VorgangsNr = A_Auswertung_j.VorgangsNr) ON T_Vorgang.VorgangsNr =     T_Leistungsstunden.VorgangsNr "


    'Die Listenfelder einzeln auf Auswahlen abfragen - beginnen mit Personen
    For Each itm In Me!Liste0.ItemsSelected
        itm = Me!Liste0.ItemData(itm)
        sAuswahlPerson = sAuswahlPerson & "'" & itm & "',"
    Next itm

    'Liste aufbereiten
    If Len(sAuswahlPerson) > 0 Then
        'Letztes Komma wieder abziehen
        sAuswahlPerson = Left(sAuswahlPerson, Len(sAuswahlPerson) - 1)
    End If
    '################################################
    'Liste mit Vorgängen
    For Each itm In Me!Liste9.ItemsSelected
        itm = Me!Liste9.ItemData(itm)
        sAuswahlVorgang = sAuswahlVorgang & "'" & itm & "',"
    Next itm

    'Liste aufbereiten
    If Len(sAuswahlVorgang) > 0 Then
        'Letztes Komma wieder abziehen
        sAuswahlVorgang = Left(sAuswahlVorgang, Len(sAuswahlVorgang) - 1)
    End If
    '################################################
    'Liste mit Stati
    For Each itm In Me!Liste13.ItemsSelected
        itm = Me!Liste13.ItemData(itm)
        sAuswahlStatus = sAuswahlStatus & "'" & itm & "',"
    Next itm

    'Liste aufbereiten
    If Len(sAuswahlStatus) > 0 Then
        'Letztes Komma wieder abziehen
        sAuswahlStatus = Left(sAuswahlStatus, Len(sAuswahlStatus) - 1)
    End If
   
    '################################################################
    'Festlegen der WHERE-Klausel
    'für die ausgewählten Personen
    If Len(sAuswahlPerson) > 0 Then
        strSQL = strSQL & "WHERE T_Leistungsstunden.Person IN (" & sAuswahlPerson & ")"
        chkWhere = True
    End If
   
    If Len(sAuswahlVorgang) > 0 Then
        If chkWhere = True Then    'für ausgewählte Personen UND Vorgänge
            strSQL = strSQL & " AND T_Leistungsstunden.VorgangsNr IN (" & sAuswahlVorgang & ")"
        Else
            'für ausgewählte Projekte
            strSQL = strSQL & "WHERE T_Leistungsstunden.VorgangsNr IN (" & sAuswahlVorgang & ")"
            chkWhere = True
        End If
    End If

    If Len(sAuswahlStatus) > 0 Then
        If chkWhere = True Then 'für ausgewählte Personen UND / ODER Vorgänge UND Stati
            strSQL = strSQL & " AND T_Vorgang.[A-Status] IN (" & sAuswahlStatus & ")"
        Else
            'für ausgewählte Stati
            strSQL = strSQL & "WHERE T_Vorgang.[A-Status] IN (" & sAuswahlStatus & ")"
            chkWhere = True
        End If
    End If
    '#################################################################
    'Anfügen der Sortieranweisung

    strSQL = strSQL & " ORDER BY A_Auswertung_j.Firma, T_Leistungsstunden.VorgangsNr;"

    'SQL-String kontrollieren
    Debug.Print strSQL

    CurrentDb.Querydefs!A_Auswertung_gesamt.SQL = strSQL
   

End Sub