Access-o-Mania

Access-Forum (Deutsch/German) => Tabelle/Abfrage => Thema gestartet von: BudWhiteCux am März 09, 2023, 10:41:44

Titel: DoCmd.RunSQL INSERT INTO - Loop und mehrere Datenfelder
Beitrag von: BudWhiteCux am März 09, 2023, 10:41:44
Moin!

In einer Datenbank werden mehrere Zeiträume zu einer Person oft mit Überschneidungen gespeichert (Krank von bis, also zB 01.-03.03., 01.-05.03., 01.-10.03. - je nach Meldung). Um die Tage später auszählen zu können (zB für Fristen), muss ich die Überschneidungen herausfiltern und benötige dafür die einzelnen Tage der Zeiträume, die ich dann später einfach gruppieren kann und jeweils dazu dann noch die ID des Eintrages, um die Tage der zugrundeliegenden Krankmeldung und damit dann einer Person zuordnen zu können usw..

Mittels folgenden Codes werden mir die Einzeltage bereits in eine Tabelle geschrieben:

Private Sub Befehl7_Click()

Dim Tag As Date
Dim Tag2 As Date
Tag = Me!Ende
Tag2 = Me!Beginn
Dim db As DAO.Database
   DoCmd.SetWarnings False
   Set db = CurrentDb
   DoCmd.RunCommand acCmdSaveRecord
   DoCmd.RunSQL ("INSERT INTO tbl_tage ([Datum]) SELECT [Beginn] FROM [tbl_zeitraum] WHERE [Beginn] = forms.frm_zeitraum.Beginn")
   Do Until Tag = Tag2
      Tag2 = Tag2 + 1
      DoCmd.RunSQL ("INSERT INTO tbl_tage ([Datum]) VALUES ('" & Tag2 & "')")
      Loop

End Sub


Dem Datensatz Datum müsste nun allerdings auch jeweils noch die KrankID hinzugefügt werden, die sich in der gleichen Tabelle wie Beginn und Ende befindet und auch auf dem Formular erscheint.

Leider sind meine Versuche derzeit alle gescheitert und ich habe auch keine Lösung im WWW finden können, auch die KrankID in diesem Loop unterzubringen.

Für eure Rückmeldungen bedanke ich mich schon jetzt!
Titel: Re: DoCmd.RunSQL INSERT INTO - Loop und mehrere Datenfelder
Beitrag von: ebs17 am März 09, 2023, 11:41:34
Statt der Loops könnte man auch direkter auswerten:
Grundlagen - SQL ist leicht (20) - Zeitraumüberschneidungen (https://www.ms-office-forum.net/forum/showthread.php?t=379192)

Um einen Zeitraum in Einzeltage auflösen zu können, ist die Verwendung einer Zahlenhilfstabelle (=> DateAdd("d", Zahl, Startdatum) ) oder gleich einer Kalendertabelle (alle Tage der Tabelle zwischen Start und Ende der Datentabelle) hilfreich.
Grundlagen - SQL ist leicht (1) - Hilfstabellen (https://www.ms-office-forum.net/forum/showthread.php?t=298414)
Grundlagen - SQL ist leicht (3) - Kalendertabelle (https://www.ms-office-forum.net/forum/showthread.php?t=298670)
Titel: Re: DoCmd.RunSQL INSERT INTO - Loop und mehrere Datenfelder
Beitrag von: BudWhiteCux am März 09, 2023, 15:43:46
Hi!

Vielen Dank für die Rückmeldung und die Links - ich werde sie mir nachher noch anschauen.

Mein Problem konnte ich gerade tatsächlich doch selbst lösen und es funktioniert soweit. Aber natürlich erzeugt das "jede Menge" Datenmüll. Von daher danke für deine Anregungen!

=)