Neuigkeiten:

Ist euer Problem gelöst, dann bitte den Knopf "Thema gelöst" drücken!

Mobiles Hauptmenü

Datensätze per Abfrage oder Makro ergänzen (Wochentage auffüllen)

Begonnen von Freshwood, Dezember 17, 2019, 14:05:33

⏪ vorheriges - nächstes ⏩

Freshwood

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


ebs17

Mit freundlichem Glück Auf!

Eberhard

Freshwood

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

DF6GL

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".
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

Freshwood

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?

DF6GL

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.

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

ebs17

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.
Mit freundlichem Glück Auf!

Eberhard