Neuigkeiten:

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

Mobiles Hauptmenü

Werte aus Parameterabfragefeld übernehmen

Begonnen von Beate1953, Oktober 10, 2013, 11:14:16

⏪ vorheriges - nächstes ⏩

Beate1953

Hallo,

Das Feld heißt in Abfrage und Bericht E-Check und ist vom Typ String; die möglichen per Kombinationsfeld auswählbaren Einträge heißen: Ja, Ja*, Nein und Nein*.

Das mit dem LIKE werde ich ausprobieren.

Ich habe inzwischen alle möglichen Änderungen an meinen Objekten ausprobiert und habe herausgefunden, dass DomAnzahl funktioniert, sobald ich in der Abfrage im Feld Datum das Kriterium ZWISCHEN [Anfangsdatum:] UND [Enddatum:] lösche. Da dieses Kriterium in allen meinen neuen Abfragen unverzichtbar ist, bräuchte ich eine Möglichkeit, wie ich dieses Filterkriterium auf andere Weise zur Anwendung bringe - vielleicht im Bericht?


Viele Grüße
Beate1953

DF6GL

Hallo,

Zitatbtw: Solche Parameter-Abfragen sind eher unzweckmäßig denn vernünftig brauchbar, gelinde gesagt..
:'(




ZitatDa dieses Kriterium in allen meinen neuen Abfragen unverzichtbar ist, bräuchte ich eine Möglichkeit, wie ich dieses Filterkriterium auf andere Weise zur Anwendung bringe


z. B. mittels dynamischen (per VBA) zusammengesetzten SQL-String...

oder als Übergabekriterium in der Openreport-Methode in einer Prozedur.

Beate1953

Hallo,

also ich habe die Recordsource jetzt per VBA zusammengesetzt:


Private Sub Report_Open(Cancel As Integer)
........
SQLstr = "SELECT Posten.Barcode, Posten.[Bezeichnung (Typ, genaue Bezeichnung)], Gerätegruppen.Bezeichnung, "
SQLstr = SQLstr & "Abteilungen.Ort, [E-Check].[E-Check], [E-Check].Datum, [E-Check].Bemerkung "
SQLstr = SQLstr & "FROM (Gerätegruppen INNER JOIN Posten ON Gerätegruppen.[GerätegruppeID] = Posten.[Gerätegruppe]) "
SQLstr = SQLstr & "INNER JOIN (Abteilungen INNER JOIN [E-Check] ON Abteilungen.[ID] = [E-Check].[Ort]) "
SQLstr = SQLstr & "ON Posten.[Barcode] = [E-Check].[Barcode] "
SQLstr = SQLstr & "WHERE ((([E-Check].Datum) Between " & Anfdat & " AND " & Enddat & "));"

MsgBox ("Abfrage: " & SQLstr)

Me.RecordSource = SQLstr
MsgBox ("SQLstr Übernommen")

End Sub

Access zeigt bei der MsgBox("Abfrage: " & SQLstr) die korrekte Syntax an (mit 2x Klammer zu ganz am Ende).
Access läuft problemlos bis einschließlich der Anzeige "SQLstr Übernommen". Danach kommt eine Fehlermeldung:

Syntaxfehler in Zahl in Abfrageausdruck '((([E-Check].Datum) Between 1.1.12 AND 31.12.12)'

Hier irritiert mich das "Zahl" sowie der Umstand, daß am Schluß nur 1x Klammer zu steht. Ich vermute auch, dass vielleicht mit der Übergabe des Datums etwas nicht stimmt.

Anfdat und Enddat sind vom Typ variant und übernehmen das Datum aus einem normalen Textfeld per Anfdat = Me.Anfangsdatum.Value

SQLstr ist vom Datentyp String.

Ich hoffe, Ihr könnt mir wieder einmal helfen.
Vielen Dank im Voraus
Beate1953

DF6GL

Hallo,


so:


SQLstr = SQLstr & "WHERE ((([E-Check].Datum) Between " & Format(nz(Anfdat,Date),"\#yyyy-mm-dd\#") & " AND " &  Format(nz(Enddat,Date),"\#yyyy-mm-dd\#")  & "));"

Beate1953

Hallo,

vielen, vielen Dank für diesen String (auf den ich selbst nie und nimmer gekommen wäre), jetzt klappt die Datumsfilterung und die Sortierungen.  Allerdings zeigt das Feld mit dem DomAnzahl immer noch #Fehler an.

Ich bin drauf und dran, dieses Feld ganz zu löschen.

Vorher noch ein letzter Versuch: Kennt jemand eine andere Möglichkeit, im Berichtskopf die Anzahl der Datensätze anzuzeigen, die innerhalb eines definierten Zeitraumes gemessen wurden und im Feld E-Check (Text) ein Ja oder Ja* eingetragen haben (Außer mit DomAnzahl!).

Viele Grüße
Beate1953

DF6GL

Hallo,

willst Du die Anzahl Datensätze anzeigen, die der Bericht aktuell anzeigt?

dann sollte es doch so gehen im Steuerelementinhalt eines Textfeldes:

=Anzahl(*)

Bei Dlookup muss halt das entspr. Kriterium eingesetzt werden:



Nachfrage:
Was hat es eigentlich mit diesem:

ZitatDas Feld heißt in Abfrage und Bericht E-Check und ist vom Typ String; die möglichen per Kombinationsfeld auswählbaren Einträge heißen: Ja, Ja*, Nein und Nein*


auf sich?

Ist das Kombifeld ein Nachschlagefeld in der Tabelle und wie sieht der Herkunftstyp da aus?

Sind

Ja, Ja*, Nein und Nein*
Einträge im Feld  "[E-Check]"  ?



btw:  Verzichte DRINGEND und ÜBERALL auf Sonder- und Leerzeichen in Objektnamen!  (Hier das Minus-Zeichen in "E-Check")

Beate1953

Hallo,

das Kombinationsfeld habe ich per Assistent erstellt und die Option angeklickt "Ich will eigene Werte eingeben", dann habe ich als mögliche Werte Ja, Ja*, Nein und Nein* eingegeben. Und einen dieser vier Einträge enthält jeweils das Feld "E-Check".

Mit DLookup habe ich noch keine Erfahrungen; aber nach Nachlesen habe ich den Eindruck, dass DLookup ein Feld des ersten Datensatzes zurückgibt, der dem Kriterium entspricht??? Ich möchte aber die Anzahl der DS die dem Kriterium entsprechen.

Ich habe einmal als Datenquelle für das Textfeld folgendes eingegeben:
=DLookup("[E-Check]", "GesBerichtMitAuftraggeberNeu", "[E-Check]='Ja'")
als Antwort bekam ich eine ellenlange Fehlermeldung und mein Eintrag wurde komplett gelöscht.

Übrigens: GesBerichtMitAuftraggeberNeu ist eine Abfrage (ich weiß, der Name ist blöd, aber aus den Anfängen noch übrig).

Ich bitte um weitere Hilfe
Vielen Dank im Voraus
Beate1953

bahasu

Hi,

Anzahl =DCount("[E-Check]", "GesBerichtMitAuftraggeberNeu", "[E-Check]='Ja'")

Harald
Servus

DF6GL

Hallo,



wobei im STEUERELEMENTINHALT eines Textfeldes dieses stehen sollte:

=DCount("[E-Check]";"GesBerichtMitAuftraggeberNeu";"[E-Check]='Ja'")

und die Frage nach diesen seltsamen Einträgen noch nicht beantwortet ist....




(Eine Variable mit Namen "Anzahl" ist auch mit Vorsicht zu geniessen   ;) 

bahasu

Hi Franz,

Zitat von: DF6GL am Oktober 15, 2013, 22:06:30
(Eine Variable mit Namen "Anzahl" ist auch mit Vorsicht zu geniessen   ;) 

Sorry für die unglückliche Bezeichnung: Ich hatte den Begriff nicht als Variable gebraucht, sondern nur, um auf das Ergebnis (= Anzahl) hinzuweisen (weiter oben stand ja, dass es im Textfeld eingetragen ist).

Harald
Servus

Beate1953

Hallo,

leider wandelt Access DCount sofort in DomAnzahl um und ich habe wieder das Problem mit #Fehler (siehe oben).

Ich habe in der Zwischenzeit gelesen, dass man die Domänenfunktionen auch durch Gruppierungsabfragen ersetzen kann (Microsoft Access-Handbuch Seite 373/374).

Ich habe also folgende Gruppierungsabfrage erstellt:

SELECT QRYAlleGeraeteImZeitraumGemessen.Expr1004, Count(QRYAlleGeraeteImZeitraumGemessen.[E-Check]) AS [AnzahlvonE-Check]
FROM QRYAlleGeraeteImZeitraumGemessen
GROUP BY QRYAlleGeraeteImZeitraumGemessen.Expr1004;

Expr1004 ist ebenfalls das Feld E-Check.

Damit erreiche ich einen Teilerfolg, jetzt zeigt er mir folgendes an:

Expr1004    Anzahl von Expr1004
   Ja                   374
   Ja*                   27
   Nein                 12
   Nein*               15

Nun brauche ich noch die Summe der Anzahlen von Ja und Ja* (also 401) und das dann in den Bericht.

Vielen Dank im Voraus für Eure Hilfe
Beate1953
I

DF6GL

Hallo,

die Umwandlung ins Deutsche braucht nicht leid zu tun..  das ist normal bei deutscher Access-Version.

Allerdings kochst Du jetzt zusammengerührten  Eintopf...

-- Welchen DATENTYP hat E-Check in der Tabelle?
-- Wird für dieses Feld ein Nachschlagefeld verwendet? Wenn Ja, wie heißt die Datensatzherkunft dieses Nachschlagefeldes in der Tabelle?
-- Poste den SQL-String der Abfrage "QRYAlleGeraeteImZeitraumGemessen".


=DCount("*";"GesBerichtMitAuftraggeberNeu";"[E-Check] like 'J*'")

=DCount("*";"GesBerichtMitAuftraggeberNeu";"[E-Check] like 'N*'")


sollte eigentlich für "JA", respektive "Nein" funktionieren...   (unter der Annahme, dass E-CHECK den Datentyp TEXT in der Tabelle hat).

Weiterhin funktioniert

=Anzahl(*)

im Steuerelement eines Berichts-Textfeldes, um die von der Berichtsabfrage gelieferte Datensatz-Anzahl anzuzeigen.

Es ist immer noch unklar und damit die Frage unbeantwortet, was die Sternchen im E-Check-Feld bedeuten sollen....

Beate1953

Hallo,

das Feld E-Check hat den Datentyp Text. Es ist in der Tabelle nicht als Nachschlagefeld angelegt. Erst im Formular, in dem Die Werte eingegeben werden, sind für das Kombifeld per Formular-Assistent (Option: Ich will die Werte selbst eingeben) die Werte Ja, Ja*, Nein und Nein* eingegeben worden.

Die Sternchen kennzeichnen, dass bei diesen DS im Feld Bemerkung noch eine Bemerkung existiert. Ich weiß, es war unglücklich, dafür ausgerechnet ein Sternchen zu verwenden.

Der SQL-Code der Abfrage QRYAlleGeraeteImZeitraumGemessen lautet:

SELECT Posten.Barcode, Posten.[Bezeichnung (Typ, genaue Bezeichnung)], Gerätegruppen.Bezeichnung, Abteilungen.Ort, [E-Check].[E-Check], [E-Check].Datum, [Anfangsdatum:] AS Anfdat, [Enddatum:] AS Enddat
FROM (Gerätegruppen INNER JOIN Posten ON Gerätegruppen.[GerätegruppeID] = Posten.[Gerätegruppe]) INNER JOIN (Abteilungen INNER JOIN [E-Check] ON Abteilungen.[ID] = [E-Check].[Ort]) ON Posten.[Barcode] = [E-Check].[Barcode]
WHERE ((([E-Check].Datum) Between [Anfangsdatum:] And [Enddatum:]));


Das mit dem DCount funktioniert bei mir einfach nicht - immer#Fehler.

Kann vielleicht mal jemand von Euch eine kleine Datenbank anlegen und prüfen, ob DCount bei Ihm funktioniert oder nicht? Wäre sehr nett!!!

Tabelle Posten:  Feld Barcode (Long; Primärschlüssel),
                        Feld Bezeichnung

DF6GL

Hallo,

das kann auch nicht mit diesen unglückseligen Parametern funktionieren!

Wie früher schon erzählt....


Weiterhin:  wer solche Feldnamen verwendet: 

Bezeichnung (Typ, genaue Bezeichnung)

gehört mit dem nassen Lappen erschlagen...   ;) ;)


Die Parameter gehören aus der Abfrage entfernt (auch schon gesagt) und im Kriterium der DCount-Funktion eingebaut werden.

=DCount("*";"GesBerichtMitAuftraggeberNeu";"[E-Check] like 'J*' And Datum Between " & Format([Anfdat];"\#yyyy-mm-dd\#") & " AND " &  Format([Enddat];"\#yyyy-mm-dd\#") )


Wobei "AnfDat" und "EndDat" Textfelder im Bericht sein müssen, die die Datumsangaben enthalten.



Vermutlich ist aber ein ganz anderer Lösungsweg (bei Verwendung eines Berichtes) sinnvoll:


Bericht erstellen auf Basis einer Abfrage OHNE Kriterien und OHNE Sortierungen/Gruppierungen.

Im Bericht die Gruppierungen und Sortierungen definieren.
Im Bericht Summen oder Zählungen durch Nutzen der Laufenden Summe-Eigenschaften berechnen.



Beate1953

Hallo,

das mit dem DCount klappt immer noch nicht, obwohl alle Kriterien aus der Abfrage entfernt sind.

Ich habe jetzt aber wieder ein Problem mit dem SQLstr für die RecordSource. Ich verwende folgenden Select-Befehl:

SQLstr = "SELECT Posten.Barcode, Posten.[Bezeichnung (Typ, genaue Bezeichnung)], Gerätegruppen.Bezeichnung, "
SQLstr = SQLstr & "Abteilungen.Ort, [E-Check].[E-Check], [E-Check].Datum, [E-Check].Bemerkung "
SQLstr = SQLstr & "FROM (Gerätegruppen INNER JOIN Posten ON Gerätegruppen.[GerätegruppeID] = Posten.[Gerätegruppe]) "
SQLstr = SQLstr & "INNER JOIN (Abteilungen INNER JOIN [E-Check] ON Abteilungen.[ID] = [E-Check].[Ort]) "
SQLstr = SQLstr & "ON Posten.[Barcode] = [E-Check].[Barcode] "

'SQLstr = SQLstr & "WHERE ((([E-Check].Datum) Between " & Format([Anfdat, Date], "\#yyyy-mm-dd\#") & " AND " & Format([Enddat, Date], "\#yyyy-mm-dd\#") & "));"

'SQLstr = SQLstr & "WHERE ((([E-Check].Datum) Between " & Format([Anfdat], "\#yyyy-mm-dd\#") & " AND " & Format([Enddat], "\#yyyy-mm-dd\#") & "));"

'SQLstr = SQLstr & "WHERE ((([E-Check].Datum) Between " & Format(Nz(Anfdat, Date), "\#yyyy-mm-dd\#") & " AND " & Format(Nz(Enddat, Date), "\#yyyy-mm-dd\#") & "));"


Die Teile mit der WHERE-Klausel funktionieren alle nicht, es kommt immer die Fehlermeldung "Laufzeitfehler '2427' Sie haben einen Ausdruck ohne Wert eingegeben". Ich übergebe die Datumswerte aus dem Formular aber vor dem Zusammenbau des SQLstr. Die Strings wurden zusammengebaut aus den Antworten vom 15.10. 10:02:04 und  16.10. 16:11:06

Das Erstaunlichste ist, dass der SQLstr mit WHERE-Klausel schon mal geklappt hat. Bei der vielen Herumprobiererei muß etwas kaputt gegangen sein.

Könnt Ihr mir nochmal die korrekte Klausel senden?

Vielen Dank im Voraus
Beate1953