Access-o-Mania

Access-Forum (Deutsch/German) => Tabelle/Abfrage => Thema gestartet von: SMBR am November 18, 2020, 18:30:54

Titel: Datumswerte für einen ganzen Monat ausgeben (mit NULL Werten)
Beitrag von: SMBR am November 18, 2020, 18:30:54
Hallo und schönen guten Abend,
ich arbeite gerade an einem neuen Objekt für einen Freund von mir. Die DB dient der Stundenerfassung von gearbeiteten Stunden. Kurz gesagt möchte ich umsetzen, dass man in einem Formular Einzelheiten zu Schichtzeiten, Objekte und Angaben über Feiertags/-Nacht/-und Sonntagsstunden erfassen kann. Nun zu meiner Frage. Es gibt für die gearbeiteten Stunden von der Firma ein Formblatt Stundenzettel. Ich möchte nun die Daten, welche ich über ein Formular erfasse auf den Stundenzettel übertragen. (Mit Hilfe eines Access Berichtes. Wie setze ich sowas am besten um? Da der Stundenzettel immer die gleiche Anzahl der Spalten hat, sprich vom 01. - 31.... Kann ich eine Abfrage generieren lassen in dem jeder Tag des Monats aufgelistet wird, auch die an denen nicht gearbeitet wurde. Oder gibts ne bessere Lösung, wie ich die eingegebenen Daten in die richtigen Spalten des Formblattes übertragen kann? Wenn man nun 20 Tage beispielsweise arbeitet, stellt Access ja alle Daten untereinander, natürlich ohne die Tage an denen nicht gearbeitet wurde....Im Ergebnis wären die generierten Daten nicht in den richtigen Spalten auf dem Formblatt....Wäre in dem Fall ein Export nach Excel leichter realisierbar? Schön wäre wenn ich alles in Access machen könnte.... Danke schon mal für euere Hilfe und einen schönen Abend.
Titel: Re: Datumswerte für einen ganzen Monat ausgeben (mit NULL Werten)
Beitrag von: ebs17 am November 18, 2020, 19:01:32
ZitatDa der Stundenzettel immer die gleiche Anzahl der Spalten hat, sprich vom 01. - 31
Die "Querstellung" kann man einfach über eine Kreuztabellenabfrage umsetzen, in diesem Fall gleich mit fixierten Überschriften.
Zur Erstellung von Kreuztabellenabfragen gibt es auch einen Assistenten.
Titel: Re: Datumswerte für einen ganzen Monat ausgeben (mit NULL Werten)
Beitrag von: SMBR am November 20, 2020, 21:50:37
Hallo Eberhard,
danke für deinen Tip, leider habe ich es bisher nicht geschafft, das über die Kreuztabellenabfrage zu realisieren. Ich habe mal einen kleinen Dummy gebastelt und im Anhang hinterlegt. Könntest du mir anhand der DB mal zeigen, wie man so etwas umsetzt? Für weitere Hilfe wäre ich sehr danbar.
Titel: Re: Datumswerte für einen ganzen Monat ausgeben (mit NULL Werten)
Beitrag von: ebs17 am November 21, 2020, 10:26:38
Ich habe unterstellt, dass die Gesamtstunden in der Darstellung gefragt sind (die Datenmodellierung hat Reserven).
Zusätzlich ist unterstellt, dass die Stunden dem Datum des Schichtbeginns zugeordnet werden.
TRANSFORM
   MIN(stdztGesamtstunden) AS X
SELECT
   Year(stdztSchichtAnfang) * 100 + Month(stdztSchichtAnfang) AS JahrMonat
FROM
   tblArbeit_Stundenzettel
GROUP BY
   Year(stdztSchichtAnfang) * 100 + Month(stdztSchichtAnfang)
PIVOT
   Day(stdztSchichtAnfang) IN (1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31)
Titel: Re: Datumswerte für einen ganzen Monat ausgeben (mit NULL Werten)
Beitrag von: Beaker s.a. am November 21, 2020, 12:24:14
@SMBR
Kannst du den grundsätzlichen Sinn erklären?
Denn um Entlohnung kann es ja nicht gehen, wo da doch niemand arbeitet.
Titel: Re: Datumswerte für einen ganzen Monat ausgeben (mit NULL Werten)
Beitrag von: SMBR am November 21, 2020, 21:00:10
Zitat von: Beaker s.a. am November 21, 2020, 12:24:14@SMBR
Kannst du den grundsätzlichen Sinn erklären?
Denn um Entlohnung kann es ja nicht gehen, wo da doch niemand arbeitet.

Hi, danke für den Einwand,
da es sich um eine Entlohnung im Sicherheitsgewerke ist, wollte ich aus Schutzgründen nur Dummydaten eingeben. Die DB sollte die Zeiterfassung und die Übertragung auf einen Musterstundenzettel der Firma bewerkstelligen. Außerdem eine Spesenabrechnung für den Verpflegungsmehraufwand und die Fahrkosten für den Lohnsteuerjahresausgleich.

Titel: Re: Datumswerte für einen ganzen Monat ausgeben (mit NULL Werten)
Beitrag von: SMBR am November 21, 2020, 21:07:52
Hallo @ebs17 und danke für deine Hilfe,
es geht in eine gute Richtung, doch leider benötige ich die Spalten was jetzt nebeneinander stehen untereinander. Würde das auch auf diese Art funktionieren? ich poste im Anhang mal den Stundenzettel, auf den letzten Endes die in der DB eingetragenen Stunden übertragen werden sollen. Ein Blanko Stundenzettel für jeden Monat. Und in den Zeilen (1. - 31.) sollten dann eben die Werte aus der DB an der richtigen Stelle ( Beim richtigen Datum) auf dem Formblatt stehen sollen.
Titel: Re: Datumswerte für einen ganzen Monat ausgeben (mit NULL Werten)
Beitrag von: ebs17 am November 21, 2020, 22:20:52
ZitatDa der Stundenzettel immer die gleiche Anzahl der Spalten hat, sprich vom 01. - 31....
Jetzt darf man sich fragen, welche Worte eine Bedeutung haben ...

Die Tage untereinander hast Du doch aus der Tabelle abrufbar.

Für die Absicherung einer fortlaufende Tagesfolge braucht man eine entsprechende Hilfstabelle/Kalendertabelle als vollständige Menge, etwa
... FROM VollstaendigeMenge LEFT JOIN VorhandeneMenge ON ...
Titel: Re: Datumswerte für einen ganzen Monat ausgeben (mit NULL Werten)
Beitrag von: Beaker s.a. am November 22, 2020, 14:37:46
@SMBR
Eine genauere Beschreibung vom gleichen Autor findest du hier (https://www.ms-office-forum.net/forum/showthread.php?t=298414).
gruss ekkehard
Titel: Re: Datumswerte für einen ganzen Monat ausgeben (mit NULL Werten)
Beitrag von: SMBR am November 23, 2020, 14:54:37
Zitat von: ebs17 am November 21, 2020, 22:20:52
Zitat von: undefinedDa der Stundenzettel immer die gleiche Anzahl der Spalten hat, sprich vom 01. - 31....
Jetzt darf man sich fragen, welche Worte eine Bedeutung haben ...

Die Tage untereinander hast Du doch aus der Tabelle abrufbar.

Für die Absicherung einer fortlaufende Tagesfolge braucht man eine entsprechende Hilfstabelle/Kalendertabelle als vollständige Menge, etwa
... FROM VollstaendigeMenge LEFT JOIN VorhandeneMenge ON ...
Das Problem besteht darin, dass die Tage alle untereinander stehen. Die freien Tage werden nicht berücksichtigt. Wenn ich in nem Monat beispielsweise 20 Arbeitstage habe, schreibt er die 20 Datensätze untereinander, ohne die freien Tage zu berücksichtigen. Aus diesem Grund stünden die Datensätze dann im Stundenzettel vom 01. bis zum 20.
Da ich in der Richtung noch keine großen Erfahrungen habe, bleibt das ganze, wenigstens für den Moment schwierig umzusetzen. :-X  :-X
Titel: Re: Datumswerte für einen ganzen Monat ausgeben (mit NULL Werten)
Beitrag von: ebs17 am November 23, 2020, 16:07:22
Vollständige Menge ist lösbar über eine Kalendertabelle (https://www.ms-office-forum.net/forum/showthread.php?t=298670) oder, wenn man sich konsequent auf die Tage eines Monats beschränken möchte, über eine einfache Zahlenhilfstabelle (https://www.ms-office-forum.net/forum/showthread.php?t=298414), hier ausreichend von 1 bis 31.

Titel: Re: Datumswerte für einen ganzen Monat ausgeben (mit NULL Werten)
Beitrag von: SMBR am November 24, 2020, 16:46:24
Und die Verbindung zwischen der Tabelle "tblStundenzettel" lässt sich dann über eine Verknüpfung regeln? Und ja in diesem Fall recht es wenn ich nur immer die Tage für einen Monat habe...
Titel: Re: Datumswerte für einen ganzen Monat ausgeben (mit NULL Werten)
Beitrag von: ebs17 am November 24, 2020, 19:32:52
Zitatüber eine Verknüpfung regeln?
Eine Verknüpfung ist nun kein Wunderwerk der Programmierung unter Einbeziehung einer Expertenrundendiskussion, sondern etwas Alltägliches in einer Abfrage.
Man sollte nur  beachten, dass man jeweils gleiches miteinander verknüpft, also Datum-Datum oder Tageszahl-Tageszahl.
Titel: Re: Datumswerte für einen ganzen Monat ausgeben (mit NULL Werten)
Beitrag von: Beaker s.a. am November 24, 2020, 19:46:38
@SMBR
ZitatUnd die Verbindung zwischen der Tabelle "tblStundenzettel" lässt sich dann über eine Verknüpfung regeln? Und ja in diesem Fall recht es wenn ich nur immer die Tage für einen Monat habe...
Sach' mal, liest du die angeboten Links überhaupt?
Titel: Re: Datumswerte für einen ganzen Monat ausgeben (mit NULL Werten)
Beitrag von: SMBR am Dezember 12, 2020, 20:40:59
Guten Abend,
erst mal möchte ich mich für die lange Antwortzeit entschuldigen. Da ich die letzten 2 Wochen nahezu im Bett verbracht habe, zog ich es zunächst vor wieder auf die Beine zu kommen.
@ebs17. Check** natürlich lese ich jeden einzelnen Hinweis, Link oder ähnliches durch bevor ich unnötigerweise eine neue Frage stelle. Was aber nicht heißt dass ich das Gelesene auch 1 zu 1 umsetzen kann. Da ich mich nur als Hobby bzw Leidenschaft mit dem Theme Access DB´s beschäftige, kommt das schon mal vor.

Nach reichlichen Überlegungen habe ich mich dazu entschlossen das Problem anders anzugehen. Entweder den Export nach Excel, oder ich hinterlege das Formblatt im Access-Bericht als Seitenhintergrund. Letzteres habe ich soweit vorbereitet, stellt mich aber noch nicht so 100 Prozentig zufrieden, da ich immer eine kleine Diskrepanz am Ende der Zeilen habe. Egal an welchen Reglern ich auch drehe, entweder treffe ich ganz oben die Zeilen nicht richtig, oder ganz unten.
Kann ich mit TransferSpreadsheet oder OutputTo oder eine bestehende Tabelle in, oder besser gesagt ab einem bestimmten Bereich die Daten schreiben?
Oder wie sieht es mit dem Befehl CopyFromRecordset aus? Habe in dem einen oder anderen Video gesehen, dass man dort zwar den Bereich angeben kann wohin die Daten exportiert werden sollen, aber kann ich hierfür das besagte Formblatt als Excel Datei verwenden?
Titel: Re: Datumswerte für einen ganzen Monat ausgeben (mit NULL Werten)
Beitrag von: ebs17 am Dezember 12, 2020, 21:34:10
Zitatanders anzugehen
Ja, ganz anderes zu machen ist auch eine Lösungsstrategie.
ZitatKann ich mit TransferSpreadsheet oder OutputTo oder eine bestehende Tabelle in, oder besser gesagt ab einem bestimmten Bereich die Daten schreiben?
Nein, direkt nicht.
ZitatOder wie sieht es mit dem Befehl CopyFromRecordset aus?
Sehr viel besser.
Titel: Re: Datumswerte für einen ganzen Monat ausgeben (mit NULL Werten)
Beitrag von: SMBR am Dezember 13, 2020, 16:42:46
Zitat von: ebs17 am Dezember 12, 2020, 21:34:10
Zitat von: undefinedanders anzugehen
Ja, ganz anderes zu machen ist auch eine Lösungsstrategie.
Zitat von: undefinedKann ich mit TransferSpreadsheet oder OutputTo oder eine bestehende Tabelle in, oder besser gesagt ab einem bestimmten Bereich die Daten schreiben?

Nein, direkt nicht.

Zitat von: undefinedOder wie sieht es mit dem Befehl CopyFromRecordset aus?
Sehr viel besser.
Ich habe dich in meinem letzten Beitrag versehentlich zitiert. Ich wollte eigentlich einen anderen Beitrag zitieren. Sorry dafür. Du sagst das ist möglich. Verratest mir auch wie? ;) Wo man die Range angeben kann habe ich bereits gefunden. Aber die Auswahl der bestehenden Tabelle bzw Excel Datei habe ich noch nicht herausbekommen?
Grüße aus der Hauptstadt
Titel: Re: Datumswerte für einen ganzen Monat ausgeben (mit NULL Werten)
Beitrag von: ebs17 am Dezember 13, 2020, 17:08:23
ZitatWo man die Range angeben kann habe ich bereits gefunden.
Man könnte ja auf dem aufbauen, was Du bereits weißt, zumal die Angabe einer Zelle oder eines Bereiches den bekannten Bezug  auf das jeweilige Arbeitsblatt und ein bekanntes Arbeitsblatt eine konkrete Arbeitsmappe nahelegt.

ZitatVerratest mir auch wie?
Da ist kein Verrat nötig.
Im Selbsttest erbrachte eine Google-Suche nach "copyfromrecordset" reichlich 39.000 Treffer. Da dürfte bestimmt schon im ersten Zehntel eine Reihe von Beispielen sein, die jeder verstehen kann.
Titel: Re: Datumswerte für einen ganzen Monat ausgeben (mit NULL Werten)
Beitrag von: SMBR am Dezember 13, 2020, 18:39:48
Zitat von: ebs17 am Dezember 13, 2020, 17:08:23
ZitatWo man die Range angeben kann habe ich bereits gefunden.
Man könnte ja auf dem aufbauen, was Du bereits weißt, zumal die Angabe einer Zelle oder eines Bereiches den bekannten Bezug  auf das jeweilige Arbeitsblatt und ein bekanntes Arbeitsblatt eine konkrete Arbeitsmappe nahelegt.

ZitatVerratest mir auch wie?
Da ist kein Verrat nötig.
Im Selbsttest erbrachte eine Google-Suche nach "copyfromrecordset" reichlich 39.000 Treffer. Da dürfte bestimmt schon im ersten Zehntel eine Reihe von Beispielen sein, die jeder verstehen kann.
Kann ich bestätigen. ich habe mir die 39000 zwar nicht allesamt durchgelesen, aber zumindest so viele, wie nötig waren. Eine Lösung die nicht ganz so umfangreich ist, wäre mich dennoch lieber gewesen.Private Sub Befehl92_Click()
    ExcelExportCopyFromRecordset "qryArbeit_ExcelExcport", PfadStandard() & "Stundenzettel.xls", "Tabelle1", "B7", True
End Sub
Sub ExcelExportCopyFromRecordset(AcTabAbfrSQL As String, _
                                 FullExcelDatName As String, _
                                 ExcelTabName As String, _
                                 ExcelStartZelle As String, _
                                 Löschen As Boolean)
' KEIN Verweis auf Excel notwendig
' Access97, Excel97 getestet
    Dim xlApp As Object, xlBook As Object, xlSheet As Object
    Dim AktDb As DAO.Database, rs As DAO.Recordset
   
    Set AktDb = CurrentDb
   ' Excel datei öffnen ohne Fehlerbehandlung
    On Error Resume Next
    Set xlApp = GetObject(, "Excel.Application")
    If xlApp Is Nothing Then
        Set xlApp = CreateObject("Excel.Application")
    End If
    On Error GoTo 0
    Set xlBook = xlApp.Workbooks.Open(FullExcelDatName)
    Set xlSheet = xlBook.Sheets(ExcelTabName)
    ' Testphase mit anschauen
    'xlApp.Visible = True
    Set rs = AktDb.OpenRecordset(AcTabAbfrSQL)
    ' rechteckigen Bereich löschen bis Ende löschen
    If Löschen Then
        xlSheet.Range(ExcelStartZelle, Mid(xlSheet.UsedRange.Address, _
                      InStr(xlSheet.UsedRange.Address, ":") + 1)).Delete
    End If
    ' rechteckigen Bereich schreiben
    xlSheet.Range(ExcelStartZelle).CopyFromRecordset rs
    'oder Excel speichern und schließen
'    xlBook.Save
'    xlBook.Close
    Set rs = Nothing
    Set xlSheet = Nothing
    Set xlBook = Nothing
    Set xlApp = Nothing
End Sub


Seis drum, wenigstens die Angelegenheit ist dennoch erledigt.
Danke für deine Hilfe!!!
Beste Grüße