Access-o-Mania

Access-Forum (Deutsch/German) => Tabelle/Abfrage => Thema gestartet von: Freshwood am Dezember 17, 2019, 14:05:33

Titel: Datensätze per Abfrage oder Makro ergänzen (Wochentage auffüllen)
Beitrag von: Freshwood am Dezember 17, 2019, 14:05:33
Hello World  ;D,

ich verzweifele an folgendem Problem:

Als Datenquelle habe ich einen Flugplan mit Flugereignissen an bestimmten Wochentagen:

Beispieldatensatz im Flugplan: 20191712,1000,LH,400,JFK, O

Erläuterung: Der erste Datenblock ist das Datum, der zweite die Uhrzeit, der Dritte das Airline Kürzel,, gefolgt von Flugnummer, Destination und die Information ob es ein In- oder Outbound (I oder O) ist.

Jetzt benötige ich aus dieser Quelle das Airline Kürzel, die Destination und die Information ob In- oder Outbound.
Das Problem was sich da stellt ist, wie bekomme ich es hin, dass mir als Abfrageergebnis für jedes Flugereignis 7 Datensätze ausgeworfen werden. 7 Datensätze deshalb, weil ich eine Tabelle benötigt die wie folgt aussehen soll:

Verkehrstag, Airline Kürzel, Destination, In- oder Outbound (I bzw. O)
1, LH, JFK, O
2, LH, JFK, O
3, LH, JFK, O
4, LH, JFK, O
5, LH, JFK, O
6, LH, JFK, O
7, LH, JFK, O

Sprich ich benötige für jeden einzelnen Wochentag ein Datensatz mit der Kombination Airline, Flugnummer und I bzw. O

Freue mich schon auf etwaige Vorschläge, denn ich stehe absolut auf dem Schlauch wie ich aus einem vorhanden Datensatz 7 erstellen kann und dann noch die Verkehrstage ergänze.

VG
Freshwood

Titel: Re: Datensätze per Abfrage oder Makro ergänzen (Wochentage auffüllen)
Beitrag von: ebs17 am Dezember 17, 2019, 14:24:31
Vervielfältigen kann man einfach über eine Hilfstabelle:
Grundlagen - SQL ist leicht (1) - Hilfstabellen (https://www.ms-office-forum.net/forum/showthread.php?t=298414)
Titel: Re: Datensätze per Abfrage oder Makro ergänzen (Wochentage auffüllen)
Beitrag von: Freshwood am Dezember 17, 2019, 14:45:04
Hallo ebs17,

vielen Dank für die schnelle Hilfe!

Das bedeutet ich müsste in meinem Fall eine Hilfstabelle von 1 bis 7 erstellen und mittels einer JOIN Abfrage die gefundenen Flugereignisse an die Zeilen 1 bis 7 dranhängen, richtig?!

Brauche ich aber dafür nicht ein Datensatzfeld was als Abgleich identisch bzw gleichzusetzen ist?! (Wie ein Primärschlüssel oder ähnliches?)

VG
Freshwood
Titel: Re: Datensätze per Abfrage oder Makro ergänzen (Wochentage auffüllen)
Beitrag von: DF6GL am Dezember 17, 2019, 15:06:27
Hallo,

vermutlich hast Du nicht alles gelesen und verstanden.  Die SQL-Strings sind die "Abfragen".



ZitatBrauche ich aber dafür nicht ein Datensatzfeld was als Abgleich identisch bzw gleichzusetzen ist

nein, es wird kein "Abgleich" (Join, Verknüpfung, Beziehung oder dergleichen) benötigt.  Das Konstukt ist ein "Kreuzprodukt".
Titel: Re: Datensätze per Abfrage oder Makro ergänzen (Wochentage auffüllen)
Beitrag von: Freshwood am Dezember 17, 2019, 15:35:20
Hallo,

Zitatvermutlich hast Du nicht alles gelesen und verstanden.
Korrekt - ich habe es tatsächlich nicht so verstanden  ;D

Ich habe erst vor Kurzem mit SQL begonnen deshalb bitte ich um Nachsicht mit meinen Fragen :D

In dem Link steht folgender SQL Beispielcode, den ich ja - so glaube ich - soweit nachvollziehen kann.

SELECT
    Vorname,
    Nachname,
    Strasse,
    PLZ,
    Ort
FROM
    tblPerson,
    (
        SELECT
            I
        FROM
            T999
        WHERE
            I Between 1 AND 35
    ) AS X
WHERE
    PersonID = 23



Mit der dort angegebenen Textdatei modCreateHelp kann ich allerdings nicht so viel anfangen.
Im VBA Editor in Access kann ich den VBA Code nicht ausführen und so eine Hilfstabelle erstellen?!

Public Sub CreateHelpTable(ByVal pdbs As DAO.Database, Optional ByVal MaxValue As Long = 999)
    Dim i As Long
    Dim sSelect As String
    Dim sFrom As String
    Dim sTableName As String
    Dim sSQL As String
    Const csSQL = "INSERT INTO #THelp# (I) SELECT #Select# AS I FROM #From#"

    If MaxValue < 0 Or MaxValue >= 1000000 Then
        MsgBox "Begrenzung auf Zahlen zwischen 0 und 999.999"
        Exit Sub
    End If
    sTableName = "T" & MaxValue
    DeleteTable pdbs, "TBase"
    DeleteTable pdbs, sTableName

    pdbs.Execute "CREATE TABLE TBase ( C CHAR(1) );"
    For i = 0 To 9
        pdbs.Execute "INSERT INTO TBase (C) SELECT " & i
    Next

    pdbs.Execute "CREATE TABLE " & sTableName & " ( I INT );"
    For i = 1 To NextExp(MaxValue)
        sSelect = sSelect & " & " & "B" & i & ".C"
        sFrom = sFrom & ", " & "TBase B" & i
    Next
    sSelect = Mid$(sSelect, 3)
    sFrom = Mid$(sFrom, 3)
    sSQL = Replace(Replace(Replace(csSQL, "#Select#", sSelect), "#From#", sFrom), "#THelp#", sTableName)
    pdbs.Execute sSQL
    pdbs.Execute "DELETE FROM " & sTableName & " WHERE I > " & MaxValue
    pdbs.Execute "CREATE UNIQUE INDEX [PrimaryKey] ON " & sTableName & _
                 "(I) WITH PRIMARY DISALLOW NULL;"

    pdbs.Execute "DROP TABLE TBase;"
End Sub


Kann ich nicht selbst eine Hilfstabelle erstellen und diese dann verwenden?
Titel: Re: Datensätze per Abfrage oder Makro ergänzen (Wochentage auffüllen)
Beitrag von: DF6GL am Dezember 17, 2019, 16:23:42
Hallo,

Prinzip ist doch, dass Du  lediglich eine Tabelle mit einer Spalte und darin fortlaufende Zahlen (z. B. 1 bis 1000)  benötigst.


Ob Du die Tabelle zu Fuß anlegst oder per Code, ist gehupft wie gesprungen.

Im Select-Beispiel wird eine Tabelle "T999" benutzt mit diesem Feld:

I (Long, Primärschlüssel)


Die fortlaufenden Zahlen kannst  Du erzeugen

-- manuell (zu Fuß)  </edit>
-- mit einer Recordsetschleife
-- mit Import einer Exceldatei, die in ihrer A-Spalte die fortlaufenden Zahlen enthält.  Mit Excel eine solchen Zahlenhaufen zu erzeugen, dürfte bekannt sein..
-- mit anderen, hier nicht näher beschriebenen Methoden.

Titel: Re: Datensätze per Abfrage oder Makro ergänzen (Wochentage auffüllen)
Beitrag von: ebs17 am Dezember 17, 2019, 17:37:10
Die Zahlen 1 bis 7 würde man womöglich noch per Handeintragung bewältigen, was dann noch durch die Einsparung an Denkleistung schneller gehen dürfte.

Die Codelösung dient eher dazu, mal schnell live und dynamisch Tabellen mit gewünschter Größe zu erstellen. In der Regel kommt man aber mit einer einmal erstellten Tabelle, die ausreichend dimensioniert ist, hin.