Neuigkeiten:

Wenn ihr euch für eine gute Antwort bedanken möchtet, im entsprechenden Posting einfach den Knopf "sag Danke" drücken!

Mobiles Hauptmenü

Werte aus Parameterabfragefeld übernehmen

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

⏪ vorheriges - nächstes ⏩

bahasu

Hallo,

ist die Bezeichnung von [E-Check].Datum korrekt für die Abfrage des Datumsbereichs?
Weiter oben war [E-Check] ein Feld, das u.a. ein "Ja" enthielt.

Oder gibt es ein anderes Feld, das das Datum enthält?

Harald
Servus

Beate1953

Hallo,

Mit dem [E-Check].Datum im SQLstr ist das Feld Datum aus der Tabelle E-Check gemeint.

Viele Grüße
Beate1953

bahasu

Servus

Beate1953

Hallo,

ich möchte nochmal an meine Frage in Antwort #29 erinnern. Ich brauche dringend den korrekten String für die Übergabe von Anfdat und Enddat an SQLstr.


Hier nochmal der Text:
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] "

Bis hierher ist alles O.K.
Aber bei der folgenden WHERE-Klausel ist der Wurm drin. Ich habe verschiedene Varianten ausprobiert, die im Folgenden aufgelistet sind.


'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

DF6GL

Hallo.


m. E. muss der 3. String funktionieren, wenn  in "[E-Check].Datum" , "Anfdat" und "EndDat" jeweils ein gültiges Datum drinsteht...

Hier:

....  ON Abteilungen.[ID] = [E-Check].[Ort]) "

hab ich aber Zweifel...  ist "Ort" und "ID"  logisch identisch?


bzw. an der gesamten "Verjoinung" ....


Wie an anderer Stelle gesagt,  lad mal diese Db hier hoch, dann bräuchte es vielleicht keine solchen fragmentarischen Untersuchungen.



Beate1953

Hallo,

ich glaube, du hast den Fehler gefunden:
     ...wenn  in "[E-Check].Datum" , "Anfdat" und "EndDat" jeweils ein gültiges Datum drinsteht...


Das Feld Datum ist vom Datentyp Datum/Uhrzeit, aber Anfdat und Enddat sind keine Datumswerte!
Im Formular FRMZeitraum werden die Daten vom User in die beiden Textfelder ADatum und EDatum eigetragen und dann mit

Me.Anfdat.ControlSource = Forms!FRMZeitraum.ADatum.Value

in die Textfelder Anfdat und Enddat übernommen (bzw. leider nicht - siehe unten). Danach müssten sie immer noch den Datentyp Text haben. Wie wandele ich sie in ein Datum um?

Vielleicht hängt es damit auch zusammen, dass beim Öffnen des Berichtes die Daten aus den Textfeldern ADatum und EDatum des Formulares nicht in den Feldern Anfdat und Enddat des Berichtes erscheinen. Statt dessen erscheint ein kleines Dialogfeld:   

    Parameter eingeben
    1.1.12
    leeres Feld

und erst wenn ich hier nochmal 1.1.12 eingebe erscheint dieses Datum im Textfeld Anfdat des Berichtes.


Was muss ich machen, dass das Datumswerte werden???

Viele Grüße
Beate1953


DF6GL

Hallo,

ziemlich verworren, das Ganze..

Hat der Bericht eine Abfrage oder SQL-String in der Datenherkunft? Wie heißt die?

In welcher Ereignisprozedur wird der vorher genannte SQL-String zusammengebaut und der Recordsource zugewiesen?(bitte Proz. komplett posten).

In welcher Er.-Proz. werden den Feldern die Formular-Daten zugewiesen? (bitte auch komplett posten)


Wie und von wo aus wird der Bericht geöffnet? (auch Prozedur posten)


Beate1953

Hallo,

1.) Der Bericht hat einen SQL-String namens SQLstr in der Datenherkunft.


2.+3.) Der SQLstr wird in Report_Open zusammengebaut und der RecordSource zugewiesen, dort werden auch den Feldern die Formulardaten zugewiesen:

   Private Sub Report_Open(Cancel As Integer)
   MsgBox ("Sortwert1= " & Sortwert1)
   MsgBox ("Sortwert2= " & Sortwert2)
   Me.KopfBezTyp.Visible = False       ' hiermit werden die Gruppenköpfe ein-/ausgeblendet
   Me.KopfBez.Visible = False
   Me.KopfOrt.Visible = False
   Me.KopfECheck.Visible = False
   Me.KopfDatum.Visible = False

   Me.Anfdat.ControlSource = Forms!FRMZeitraum.ADatum.Value   'hier werden den Feldern die
   MsgBox ("Anfdat= " & Anfdat.ControlSource)                             'Formulardaten zugewiesen
   Me.Enddat.ControlSource = Forms!FRMZeitraum.EDatum.Value
   MsgBox ("Enddat= " & Enddat.ControlSource)

   Select Case Sortwert1
   Case 1
       Me.GroupLevel(0).ControlSource = "Barcode"
   Case 2
       Me.GroupLevel(0).ControlSource = "Bezeichnung (Typ, genaue Bezeichnung)"
       Me.KopfBezTyp.Visible = True
   Case 3
       Me.GroupLevel(0).ControlSource = "Bezeichnung"
       Me.KopfBez.Visible = True
   Case 4
        Me.GroupLevel(0).ControlSource = "Ort"
        Me.KopfOrt.Visible = True
   Case 5
        Me.GroupLevel(0).ControlSource = "E-Check"
        Me.KopfECheck.Visible = True
   Case 6
        Me.GroupLevel(0).ControlSource = "Datum"
        Me.KopfDatum.Visible = True
   End Select
   MsgBox ("Sortwert1 = " & Me.GroupLevel(0).ControlSource)


   Select Case Sortwert2
   Case 1
       Me.GroupLevel(1).ControlSource = "Barcode"
   Case 2
       Me.GroupLevel(1).ControlSource = "Bezeichnung (Typ, genaue Bezeichnung)"
   Case 3
       Me.GroupLevel(1).ControlSource = "Bezeichnung"
   Case 4
        Me.GroupLevel(1).ControlSource = "Ort"
   Case 5
        Me.GroupLevel(1).ControlSource = "E-Check"
   Case 6
        Me.GroupLevel(1).ControlSource = "Datum"
   End Select
   MsgBox ("Sortwert2 = " & Me.GroupLevel(1).ControlSource)


   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(Nz(Anfdat, Date), "\#yyyy-mm-dd\#") & " AND " & Format(Nz(Enddat, Date), "\#yyyy-mm-dd\#") & "));"



   '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\#") & "));"


   MsgBox ("Abfrage: " & SQLstr)

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

   End Sub


4.) Auf dem Formular FRMAlleGeraeteSortiert liegt eine Schaltfläche mit folgendem eingebetteten Makro im Ereignis Beim Klicken:

   ÖffnenBericht 
   Berichtsname REPAlleGeraeteSortiert
   Ansicht Seitenansicht
   Filtername
   Bedingung
   Fenstermodus Normal
   AusführenMenübefehl   
   Befehl DruckenObjekt

Der Makro wurde vom Steuerelemente-Assistenten automatisch erstellt.

Viele Grüße und Danke für alles
Beate1953




DF6GL

Hallo,



Private Sub Report_Open(Cancel As Integer)
   'MsgBox ("Sortwert1= " & Sortwert1) Wo kommt denn Sollwert1 her?
   'MsgBox ("Sortwert2= " & Sortwert2)   dito
 

Dim AnfDat as Date, EndDat as Date

  Me!KopfBezTyp.Visible = False       ' hiermit werden die Gruppenköpfe ein-/ausgeblendet
   Me!KopfBez.Visible = False
   Me!KopfOrt.Visible = False
   Me!KopfECheck.Visible = False
   Me!KopfDatum.Visible = False

   Me!Anfdat = nz(Forms!FRMZeitraum!ADatum,Date)      'hier werden den Feldern die
   'MsgBox ("Anfdat= " & Me!Anfdat)                             'Formulardaten zugewiesen  Besser wäre, die Werte per Openargs zu übergeben   
   Me!Enddat= nz(Forms!FRMZeitraum!EDatum,Date)
   'MsgBox ("Enddat= " & Me!Enddat)

.
.
.

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, "\#yyyy-mm-dd\#") & " AND " & Format(Enddat, "\#yyyy-mm-dd\#")

Beate1953

Hallo,

ich habe jetzt die Prozedur nach Deinen Angaben umgebaut und bekomme bei der Zeile

   Me!Anfdat = Nz(Forms!FRMZeitraum!ADatum, Date)

die Fehlermeldung "Laufzeitfehler '2448': Sie können diesem Objekt keinen Wert zuweisen."

Kann das daran liegen, dass da mit Dim 2 Variable definiert wurden, deren Name (AnfDat und Enddat) gleichzeitig die Namen der beiden Textfelder in dem Bericht sind  --  oder ist das Absicht?

Viele Grüße
Beate1953

DF6GL

Hallo,

hmm, ja, das ist diesmal ein "Fauxpas" von mir..."  8)

Wenn Anfdat, bzw. Enddat mit Dim zu Variablen deklariert werden, dürfen das dann keine Berichts-Textfelder sein und das "ME!" vor diesen  Namen muss an allen Stellen entfernt werden.

Beate1953

Hallo,

das mit dem SQLstr klappt jetzt prima - vielen herzlichen Dank!

Bei dem Feld DomAnzahl habe ich jetzt folgenden Ausdruck drin:

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

Hier zeigt er mir schon mal die Anzahl aller DS mit "J*" an (nicht #Fehler wie bisher immer), aber das Datumskriterium ignoriert er einfach. Übrigens habe ich jetzt als Domain keine Abfrage mehr sondern direkt die Tabelle.

Ich fürchte, dass irgendwie die Zahl der Klammern oder Anführungsstriche nicht stimmt - aber Fehlermeldung bringt er mir keine.

Kannst Du mir nochmal helfen?

Vielen Dank im Voraus
Beate1953

bahasu

#42
Hi
=DomAnzahl("*";"[E-Check]";"[E-Check] LIKE 'J*' AND  [E-Check].Datum Between " & Format(Nz(Anfdat, Date), "\#yyyy-mm-dd\#") & " AND " & Format(Nz(Enddat, Date), "\#yyyy-mm-dd\#"))

Harald
Servus

DF6GL

#43
Hallo,

nein, das klappt so auch nicht, weil "Anfdat", bzw. "Enddat" keine Berichts-Textfelder, sondern ein Date-Variablen sind.


Wenn, dann muß es sich auf die Form-Felder beziehen:


=DomAnzahl("*";"[E-Check]";"([E-Check] LIKE 'J*' or [E-Check] LIKE 'N*')  AND  [Datum] Between " & Format(Nz(Forms!FRMZeitraum!ADatum; Date), "\#yyyy-mm-dd\#") & " AND " & Format(Nz(Forms!FRMZeitraum!EDatum; Date); "\#yyyy-mm-dd\#") & ")"


Prinzipiell könnte man auch die Variablen-Werte über eine Funktion "holen", was die Sache aber nur komplizierter werden läßt.

Trotzdem sollte nochmal der Eintrag:
=Anzahl(*)
im Steuerelementinhalt eines Textfeldes versucht werden.

Beate1953

Hallo,

leider kommt bei Euren beiden Funktionen die Fehlermeldung

    "Der von Ihnen eingegebene Ausdruck ist syntaktisch falsch"

und die Funktion wird gelöscht.

Ein Feld mit dem Steuerelementinhalt =Anzahl(*) habe ich und das funktioniert prima.

Viele Grüße
Beate1953