Neuigkeiten:

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

Mobiles Hauptmenü

Abfrage Datum Zwischen Date_a und Date_b

Begonnen von elvodia, Dezember 20, 2011, 20:16:57

⏪ vorheriges - nächstes ⏩

elvodia

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"

DF6GL

#1
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()
Viele Grüße vom Bodensee
Franz, DF6GL

Hilfestellung:  http://www.access-o-mania.de/forum/index.php?topic=6969.msg118738#msg118738

Links und Tipps:
1.   http://v.hdm-stuttgart.de/~riekert/lehre/db-kelz/
1a. http://www.tinohempel.de/info/info/datenbank/normalisierung.htm
1b. https://support.office.com/de-de/article/Grundlagen-des-Datenbankentwurfs-eb2159cf-1e30-401a-8084-bd4f9c9ca1f5#bmterms
2.   http://www.donkarl.com
3.   https://web.archive.org/web/20201201233522/http://www.dbwiki.net/
4.   http://www.access-tutorial.de/
5.   http://www.tty1.net/smart-questions_de.htm
6.   http://access.joposol.com/accept

Last but not least:   < F1 > für Hilfe
;) Learning by doing not by spoon-feed ;)

Tipp: Find and Replace for Access

elvodia

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.

daolix

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

elvodia

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

daolix

noch'n kleiner Fehler in fktGetLastdate:

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

elvodia

Jungs Ihr seid wahre HELDEN. Euer Wissen möchte ich haben. Vielen Dank. Ich melde mich wenn ich bei der Monatsabrechnung bin ^^. Frohes Fest

MzKlMu

#7
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
Gruß Klaus

elvodia


elvodia

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?

DF6GL

Hallo,


und wie heißt die SQL der Berichtsabfrage?
Viele Grüße vom Bodensee
Franz, DF6GL

Hilfestellung:  http://www.access-o-mania.de/forum/index.php?topic=6969.msg118738#msg118738

Links und Tipps:
1.   http://v.hdm-stuttgart.de/~riekert/lehre/db-kelz/
1a. http://www.tinohempel.de/info/info/datenbank/normalisierung.htm
1b. https://support.office.com/de-de/article/Grundlagen-des-Datenbankentwurfs-eb2159cf-1e30-401a-8084-bd4f9c9ca1f5#bmterms
2.   http://www.donkarl.com
3.   https://web.archive.org/web/20201201233522/http://www.dbwiki.net/
4.   http://www.access-tutorial.de/
5.   http://www.tty1.net/smart-questions_de.htm
6.   http://access.joposol.com/accept

Last but not least:   < F1 > für Hilfe
;) Learning by doing not by spoon-feed ;)

Tipp: Find and Replace for Access

elvodia

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.

elvodia

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?

DF6GL

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) 
Viele Grüße vom Bodensee
Franz, DF6GL

Hilfestellung:  http://www.access-o-mania.de/forum/index.php?topic=6969.msg118738#msg118738

Links und Tipps:
1.   http://v.hdm-stuttgart.de/~riekert/lehre/db-kelz/
1a. http://www.tinohempel.de/info/info/datenbank/normalisierung.htm
1b. https://support.office.com/de-de/article/Grundlagen-des-Datenbankentwurfs-eb2159cf-1e30-401a-8084-bd4f9c9ca1f5#bmterms
2.   http://www.donkarl.com
3.   https://web.archive.org/web/20201201233522/http://www.dbwiki.net/
4.   http://www.access-tutorial.de/
5.   http://www.tty1.net/smart-questions_de.htm
6.   http://access.joposol.com/accept

Last but not least:   < F1 > für Hilfe
;) Learning by doing not by spoon-feed ;)

Tipp: Find and Replace for Access

elvodia

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.