Access-o-Mania

Access-Forum (Deutsch/German) => Tabelle/Abfrage => Thema gestartet von: elvodia am Dezember 20, 2011, 20:16:57

Titel: Abfrage Datum Zwischen Date_a und Date_b
Beitrag von: elvodia am Dezember 20, 2011, 20:16:57
Ich habe schon viele Beiträge über das Thema studiert dennoch finde ich den fehler nicht. Per Click soll eine Abfrage werte aus einer Tabelle lesen welchen Zwischen Datum Lastday und Firstday liegen. Mir geht es darum das "firstday" und "lastday" über folgenden Code vorher ausgelesen werden.

Private Sub Befehl25_Click()
   datDay = Me.tf_auswahldatum
   Do While Not Weekday(datDay) = 2
       datDay = datDay - 1
   Loop
   firstday = datDay
   
   Do While Not Weekday(datDay) = 6
       datDay = datDay + 1
   Loop
   Lastday = datDay

   MsgBox firstday & "," & Lastday
End Sub


Wenn ich den buton drücke kommt eine Msgbox mit dem Datum vom Montag und vom Freitag. Das klappt also.

Die 2 Variablen wollte ich nun in eine Abfrage einbauen die so aussieht.


SELECT Behandlungen.Behandlungs_ID, Behandlungen.Datum, Patientendaten.Name, Behandlungen.Behandlung, Kassenleistungen.Behandlungsarten_name, Kassenleistungen.Leistung, Behandlungen.Einheiten, [Leistung]*[Einheiten] AS Gesamt
FROM Krankenkassen INNER JOIN (Kassenleistungen INNER JOIN (Behandlungen INNER JOIN Patientendaten ON Behandlungen.[Patient] = Patientendaten.P_ID) ON Kassenleistungen.Behandlungsarten_ID = Behandlungen.[Behandlung]) ON (Krankenkassen.Kassentyp = Kassenleistungen.Kassentyp) AND (Krankenkassen.Kassen_Nr = Patientendaten.Krankenkasse)
WHERE (((Behandlungen.Datum) Between " & Format(firstday, '\#yyyy\-mm\-dd\#') & " AND  " & Format(lastday, '\#yyyy\-mm\-dd\') &"));




Das entscheidende ist das der Fehler in der Between Syntax liegen muss. Alles vor dem WHEER ist 1 zu 1 aus einer anderen Abfrage kopiert. Ich habe einige Beiträge gelesen in denn das Datum wohl formatiert werden muss, was ich mir aber nicht vorstellen kann das es ja als Datum in der Msgbox ausgegeben wird.

Er bringt mir den Fehler "Datentypenkonflikt in Kriterienauswahl"
Titel: Re: Abfrage Datum Zwischen Date_a und Date_b
Beitrag von: DF6GL am Dezember 20, 2011, 20:29:17
Hallo,


<<edit>> 'so isses, wenn man Code mit zwei linken Füssen eintippt...  8)

Eine Abfrage kennt keine VBA-Variablen.   Insofern muss die Variable mittels einer Funktion aus dem VBA-Bereich "geholt" werden:

In einem Standardmodul(!):


Public firstday as Date
Public lastday as Date


Public Function fktGetFirstdate() as Date
fktGetFirstdate= firstday
End Function

Public Function fktGetLastdate() as Date
fktGetLastdate= lastday
End Function

<</edit>>

und

SELECT Behandlungen.Behandlungs_ID, Behandlungen.Datum, Patientendaten.Name, Behandlungen.Behandlung, Kassenleistungen.Behandlungsarten_name, Kassenleistungen.Leistung, Behandlungen.Einheiten, [Leistung]*[Einheiten] AS Gesamt
FROM Krankenkassen INNER JOIN (Kassenleistungen INNER JOIN (Behandlungen INNER JOIN Patientendaten ON Behandlungen.[Patient] = Patientendaten.P_ID) ON Kassenleistungen.Behandlungsarten_ID = Behandlungen.[Behandlung]) ON (Krankenkassen.Kassentyp = Kassenleistungen.Kassentyp) AND (Krankenkassen.Kassen_Nr = Patientendaten.Krankenkasse)
WHERE Behandlungen.[Datum] Between fktGetFirstdate()  AND  fktGetLastdate()
Titel: Re: Abfrage Datum Zwischen Date_a und Date_b
Beitrag von: elvodia am Dezember 20, 2011, 20:36:05
Wenn ich den Code in ein Modul einfügen will ist jeweils die erste Zeile Rot. Habe noch nicht mit Modulen gearbeitet. Bzw. noch nie geschrieben nur importiert.
Titel: Re: Abfrage Datum Zwischen Date_a und Date_b
Beitrag von: daolix am Dezember 20, 2011, 21:00:31
Da schlägt bei DF6GL mal einfach so die deutsche Sprache durch

in den Zeilen
Public Funktion fktGetFirstdate() as Date
und
Public Funktion fktGetLastdate() as Date

das k in dem wort  Funktion durch ein c ersetzen.

ist zwar nicht wirklich von Bedeutung, aber deinen Code könntest du wie folgt ändern:

Private Sub Befehl25_Click()
    datDay = Me.tf_auswahldatum
    Do While Not Weekday(datDay) = 2
        datDay = datDay - 1
    Loop
    firstday = datDay
    Lastday = firstday + 4
    MsgBox firstday & "," & Lastday
End Sub
Titel: Re: Abfrage Datum Zwischen Date_a und Date_b
Beitrag von: elvodia am Dezember 20, 2011, 21:07:12
k durch c ersetzt er macht was aber nun Fehler

Fehler beim Kompilieren

Funktionsaufruf auf der linken Seite der Zuweisung muß den Typ Variant oder Object zurückgeben
Titel: Re: Abfrage Datum Zwischen Date_a und Date_b
Beitrag von: daolix am Dezember 20, 2011, 21:15:08
noch'n kleiner Fehler in fktGetLastdate:

Public Funktion fktGetLastdate() as Date
fktGetFirstdate= lastday
fktGetLastdate = lastday
End Function
Titel: Re: Abfrage Datum Zwischen Date_a und Date_b
Beitrag von: elvodia am Dezember 20, 2011, 21:31:45
Jungs Ihr seid wahre HELDEN. Euer Wissen möchte ich haben. Vielen Dank. Ich melde mich wenn ich bei der Monatsabrechnung bin ^^. Frohes Fest
Titel: Re: Abfrage Datum Zwischen Date_a und Date_b
Beitrag von: MzKlMu am Dezember 21, 2011, 07:56:02
Hallo,
das geht auch ohne Loop.
Private Sub Befehl25_Click()
   Me!Firstday = Me!tf_auswahldatum - Weekday(Me!tf_auswahldatum, vbMonday) + 1
   Me!Lastday = Me!tf_auswahldatum - Weekday(Me!tf_auswahldatum, vbMonday) + 5
End Sub
Titel: Re: Abfrage Datum Zwischen Date_a und Date_b
Beitrag von: elvodia am Dezember 21, 2011, 14:31:50
Werde ich mal ausprobieren danke.
Titel: Re: Abfrage Datum Zwischen Date_a und Date_b
Beitrag von: elvodia am Dezember 22, 2011, 08:59:02
ZitatPublic firstday as Date
Public lastday as Date


Public Function fktGetFirstdate() as Date
fktGetFirstdate= firstday
End Function

Public Function fktGetLastdate() as Date
fktGetLastdate= lastday
End Function

Habe versucht dies Anzupassen auf Folgenden Code


Public todayday As Date

Public Function fktGetTodaydate() As Date
fktGetTodaydate = todayday
End Function


Dann über

    todayday = Me!tf_auswahldatum
    DoCmd.OpenReport "Tagesbericht", acViewPreview
    MsgBox todayday


den Bericht Öffnen. Er zeigt mit im Datum 00:00:00 an. in der Messagebox allerdings das Datum aus "tf_auswahldatum"

Hab ich nen Denkfehler und firstday und lastday sind reserviere Funktionem?
Titel: Re: Abfrage Datum Zwischen Date_a und Date_b
Beitrag von: DF6GL am Dezember 22, 2011, 09:34:00
Hallo,


und wie heißt die SQL der Berichtsabfrage?
Titel: Re: Abfrage Datum Zwischen Date_a und Date_b
Beitrag von: elvodia am Dezember 22, 2011, 09:59:12
SELECT Behandlungen.Behandlungs_ID, Behandlungen.Datum, Patientendaten.Name, Behandlungen.Behandlung, Kassenleistungen.Behandlungsarten_name, Kassenleistungen.Leistung, Behandlungen.Einheiten, [Leistung]*[Einheiten] AS Gesamt
FROM Kassenleistungen INNER JOIN (Behandlungen INNER JOIN Patientendaten ON Behandlungen.[Patient] = Patientendaten.P_ID) ON Kassenleistungen.Behandlungsarten_ID = Behandlungen.[Behandlung]
WHERE (((Behandlungen.Datum)=[Formulare]![FM_start]![UF1].[Formular]![tf_auswahldatum]));


Das Problem bei der Abfrage wenn es kein Eintrag gibt habe ich logischer Weise auch kein Datum. Aber im Bericht gibt es ein Feld was mit dem Datum der Abfrage gefüttert wird. Nur wenn die Abfrage leer ist weil keine Datensätze schreibt er im Bericht #Name was sehr unschön aussieht. Daher dachte ich mach ich es über eine Variable weil das datum in dem Feld "tf_auswahldatum" gibt es ja.
Titel: Re: Abfrage Datum Zwischen Date_a und Date_b
Beitrag von: elvodia am Dezember 22, 2011, 10:11:46
Ich bekomme gleich nen Raster hab schon wieder Das VBA Problem. Den ganzen Vormittag geht. Dann wolltest du Abfrage haben wollte ich rauskopieren bringt er den Fehler. Ich kotz gleich. Schuldigt den Ausdruck. Kann ich dir die Datei mal Mailen das du mal reinschaust?
Titel: Re: Abfrage Datum Zwischen Date_a und Date_b
Beitrag von: DF6GL am Dezember 22, 2011, 11:16:00
Hallo,

na, dann wollen wir mal versuchen,   die Sauerei zu vermeiden...   ;) :D


Du kannst sie mal schicken an

de ef 6 ge el  ät ge em ix . de ee

(die "6" als Zahl belassen) 
Titel: Re: Abfrage Datum Zwischen Date_a und Date_b
Beitrag von: elvodia am Dezember 22, 2011, 11:56:47
Ich merz noch nen paar macken aus dann schick ich das ding mal vorbei.

Ich verstehe den Requery nicht. Es gibt da so viele schreib weisen mit Hochkomma mich Gänsefüschen in Eckigen Klammern und nomalen Klammern. Ich raffs nciht wann ich was machen muss.

Forms!FM_start.[FM_behandlungen].list_kassen_alle.Requery

Ich habe ein Formular. Dort gibt es einen Save button und der soll speichern was er macht aber zusätzlich mein Listenfeld was sich im Form "FM_kassenverwaltung" befindet Aktualisieren.

Dieses "FM_kassenverwaltung" wird in das Form "FM_start" und da in das UForm UF1 geladen.
Titel: Re: Abfrage Datum Zwischen Date_a und Date_b
Beitrag von: DF6GL am Dezember 22, 2011, 12:08:01
Hallo,

naja,  lt. Deiner Beschreibung sollte das so heißen:

Forms!FM_start![UF1].Form!FM_kassenverwaltung.Form!list_kassen_alle.Requery
Titel: Re: Abfrage Datum Zwischen Date_a und Date_b
Beitrag von: elvodia am Dezember 22, 2011, 12:40:47
ZitatForms!FM_start![UF1].Requery

den code hatte ich mal drin und der hat auch mal funktioniert. bei

Forms!FM_start![UF1].Form!FM_kassenverwaltung.Form!list_kassen_alle.Requery

kann er das Feld FM_kassenverwaltung nicht finden, was ja auch net geht da dies ein Formular ist.

Titel: Re: Abfrage Datum Zwischen Date_a und Date_b
Beitrag von: elvodia am Dezember 22, 2011, 12:55:33
Problem gefunden. hatte es gestern schon mal gelöst allerdings bin ich nicht so schnell drauf gekommen durch den ganzen mist. Ich habe das FM_Start was mein Hauptformular ist im Popup starten lassen da geht das anscheiden nicht oder anders. wenn ich es als Dialog öffne macht er die Aktualisierung mit

DoCmd.Requery FM_start

Die Frage ist ob das zu ungenau ist. An sich müsste ich das UF1 aktualisieren da dort nicht nur das Listenfeld sondern auch noch 2 Textfelder ein Requery bräuchten

Edit:

Mit

oCmd.Requery FM_kassenverwaltung geht es auch aber was ist den Programmiertechnisch der Sauberste weg?
Titel: Re: Abfrage Datum Zwischen Date_a und Date_b
Beitrag von: DF6GL am Dezember 22, 2011, 13:00:38
Hallo,

naja, wie heißt denn dann das UFO-Steuerelement, das das Form anzeigt?

Diesen Namen mußt Du einsetzen.


Forms!FM_start![UFO_Steuerlement1].Form![UFO_Steuerelement2].Form!list_kassen_alle.Requery


Titel: Re: Abfrage Datum Zwischen Date_a und Date_b
Beitrag von: DF6GL am Dezember 22, 2011, 13:07:35
Hallo,

mhmm,


ich kapiere nicht diese Formularkonstruktion...


Wo stehen denn die einzelnen UFO-St-Elemente?


Das Form zu aktuualaisieren, in dem der Code läuft, ist mit

Me.Requery

zu erledigen.

Das Form, das in einem UFO-Steuerelement im akt. Form angezeigt wird, wird mit

Me!UFO-SteuerlementName.Form.Requery

aktualisiert.

Befindet sich in dem "Unterformular" nochmal ein UFO-Steuerlement mit anzuzeigenden Formular, dann wird dieses wiederum mit:

Me!UFO-SteuerlementName.Form!UFO-SteuerlementName2.Form.Requery

aktualisiert.
Titel: Re: Abfrage Datum Zwischen Date_a und Date_b
Beitrag von: elvodia am Dezember 22, 2011, 13:08:55
Habe Folgendes Gefunden im Netz:

Der Syntax um    Steuerelemente auf einem Access Unterformular anzusprechen scheint auf den    ersten Blick ganz einfach. Doch Vorsicht, oft wird ein Überlegungsfehler    gemacht. Folgender Aufruf führt leider nicht zum gewünschten    Ergebnis:

Forms![Unterformular-Name]![Steuerelement-Name]
Der Grund des    resultierenden Fehlers ist darin zu suchen, dass ein Access Unterformular kein    eigentliches Formular ist, sondern ein Steuerelement auf dem Hauptformular.    Deshalb sieht der korrekte Aufruf wie folgt aus:

Forms![Hauptformular-Name]![Unterformular-Steuerelement-Name].Forms![Steuerelement-Name]
Wichtig dabei ist die    genaue Unterscheidung zwischen dem Namen des Unterformulars und dem Namen den    Unterformular-Steuerelementes.

Ich benutze ein sogenanntes Navigationssteuerelement wo der Nav Bereich "Navigationsbereich heißt und das große Feld in das die Forms geladen werden heißt. "UF1"
Titel: Re: Abfrage Datum Zwischen Date_a und Date_b
Beitrag von: elvodia am Dezember 22, 2011, 13:11:36
ZitatMe!UFO-SteuerlementName.Form!UFO-SteuerlementName2.Form.Requery

Müste doch dan glaube ich so aussehen.

Me!UF1.Form!FM_behandlungen.Form.Requery

Aktualisieren tut er nix. ich schick dir das ding mal das ist glaub ich leichter
Titel: Re: Abfrage Datum Zwischen Date_a und Date_b
Beitrag von: elvodia am Dezember 22, 2011, 13:46:53
Ich schmeiße Access gleich von Rechner und Steig wieder auf PHP und My Sql um. 10 Minuten nicht am Rechner DB Geschlossen. Aufgemacht öffne Formular Access schließt sich. Ausrasssssssssssssster
Titel: Re: Abfrage Datum Zwischen Date_a und Date_b
Beitrag von: DF6GL am Dezember 22, 2011, 13:59:24
Hallo,

such lieber erst mal nach Access 2010-Updates und Hotfixes und installier die.


Titel: Re: Abfrage Datum Zwischen Date_a und Date_b
Beitrag von: elvodia am Dezember 22, 2011, 14:08:55
Also das SP 1 kb2075994 hat er wohl drauf. weiter hab ich so nix gefunden. hat office einen eigenen Updater?
Titel: Re: Abfrage Datum Zwischen Date_a und Date_b
Beitrag von: DF6GL am Dezember 22, 2011, 15:40:36
Hallo,

habe hier:

407160_intl_i386_zip.exe
416943_intl_i386_zip.exe
420390_intl_i386_zip.exe
437040_intl_i386_zip.exe
439894_intl_i386_zip.exe

Hotfixes werden in aller Regel nur auf Anforderung verbreitet.

Such halt auf den MS-Seiten danach..