Neuigkeiten:

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

Mobiles Hauptmenü

verknüpfte Tabelle befüllen

Begonnen von Kladdi, März 05, 2013, 08:21:47

⏪ vorheriges - nächstes ⏩

Kladdi

Hallo zusammen,

ich würde innerhalb meines Projektes gerne mehrere zusammengehörige Tabellen aus einer "Quelle" (verlinkte Excel-Tabelle) befüllen.

Es gibt 3 Tabellen die befüllt werden sollen, die Tabelle heißen "CostElement", "AccountGroup" und "CostCategory".
Wie sie verknüpft sind ist aus dem Anhang entnehmbar.

Ich schaffe es die Tabelle "CostCategory" als Master - Tabelle zu befüllen, sobald es aber daran geht die Tabelle "AccountGroup" zu befüllen komme ich nicht weiter, wie muss ein Statement formuliert sein um in einem Rutsch sowohl die Referenz auf die ID der Tabelle "CostCategory" als auch die "neuen" Werte die ich aus dem Excel-Sheet beziehe dort einzutragen?
Ich probiere mich hier zwar die ganze Zeit schon mit dem "INNER JOIN" innerhalb einer "INSERT INTO" -Abfrage, komme aber zu keinem Ergebnis.

Wie schaffe ich es also die Tabellen "AccountGroup" (und danach natürlich auch "CostElement") zu befüllen?  ???

Hoffe ihr könnt mir helfen (bin grade echt am verzweifeln :'( )

Kladdi

[Anhang gelöscht durch Administrator]

ebs17

Auf ein Beispiel dazu wurde hier verwiesen: Re: Problem mit importierten Daten

Grundprinzip da:
1) In der Mastertabelle die neuen Datensätze einfügen und damit die benötigten Primärschlüssel erzeugen.
2) Über Verknüpfung Exceltabelle und Mastertabelle bekommt man eine Zuordnung Klarwert  und PK, in der Exceltabelle hat man nach wie vor die Zuordnung aus DS von Mastertabelle und n-Tabelle und kann somit beim Befüllen der n-Tabelle sowohl über die notwendigen daten als auch über den PK als FK verfügen.

Für einen konkreten Vorschlag solltest Du eine konkrete Demo mit wenigen aussagekräftigen Datensätzen bereitstellen.

MfGA
ebs
Mit freundlichem Glück Auf!

Eberhard

Kladdi

#2
Hallo,

anbei ein Ausschnitt wie er in der verlinkten Excel-Tabelle stehen könnte.

In der Access-Tabelle "tblCostCategory" gibt es die Spalten "catID"(autoNumber) und "catCategory"(Text),
in der Tabelle "tblAccountGroup" gibt es die Spalten  "grpID"(autoNumber),"grpAccGroup"(Text) und "refCatID"(number,long int)
und in "tblCostElement" gibt es die Spalten "cosID"(autoNumber), "cosAccount"(Number) und "refGrpID"(number, long int).

Hier der Code mit dem ich die Master - Tabelle fülle.
sSQL = "INSERT INTO tblCostCategory.catCategory SELECT DISTINCT CostElements.CostCategory FROM CostElements " & _
       "WHERE NOT Exists (SELECT Null FROM tblCostCategory WHERE tblCostCategory.catCategory = CostElements.CostCategory)"
       db.Execute sSQL, dbFailOnError


Hoffe das waren genug konkrete Infos.

Viele Grüße

Kladdi

P.S.: Der Verweis ist auch super, allerdings reichen meine SQL-Kenntnisse nicht um die 2te Abfrage die dort dargestellt ist so umzugestalten das sie für meine Situation passt.

[Anhang gelöscht durch Administrator]

ebs17

ZitatHoffe das waren genug konkrete Infos.

Wenn Du die Erwartung hast, dass sich Dein Gegenüber die Bezeichnungen zusammenkopiert und notfalls eigene Tabellen erstellt (obwohl Tabellen vorhanden und bereitstellbar), dann ja.

MfGA
ebs
Mit freundlichem Glück Auf!

Eberhard

Kladdi

#4
Hallo,

was deine letzte Antwort angeht.
ZitatWenn Du die Erwartung hast, dass sich Dein Gegenüber die Bezeichnungen zusammenkopiert und notfalls eigene Tabellen erstellt (obwohl Tabellen vorhanden und bereitstellbar), dann ja.
Genau das ist doch mein Problem, es gibt eben keine Tabellen in denen diese Daten stehen, sondern für mich nur dieses eine Excel-Sheet aus dem ich etwas machen soll.

Und meines Verständnisses nach sollte meine Frage (nach einem Code-Bsp. in SQL) auch lösbar sein ohne das ich eine komplette Datenbankstruktur usw. dafür hochladen muss.  ???

Für den Fall das ich da falsch gedacht habe und das die vorliegenden Daten nicht ausreichen gibt es im Anhang eine kleine Beispiel-Db mit diesen Tabellen. ;)

Viele Grüße

Kladdi

Update:
Habe ausversehen nicht funktionierenden Code geliefert, in der v2 der .mdb läuft jetzt alles.

[Anhang gelöscht durch Administrator]

ebs17

Zitates gibt eben keine Tabellen in denen diese Daten stehen
Bei einem Import in ein Datenmodell sollten diese Tabellen aber bestehen, wo die Daten hinein sollen.
ZitatUnd meines Verständnisses nach sollte meine Frage (nach einem Code-Bsp. in SQL) auch lösbar sein ohne das ich eine komplette Datenbankstruktur usw. dafür hochladen muss.
Ich schrieb auch nichts von Unlösbarkeit. Um einige nicht alltägliche Anweisungen zu schreiben und das aus dem Kalten heraus, erfordert das ein Abstraktionsvermögen, das man haben muss und in bestimmten Situationen (andere sind anders beansprucht) auch abrufen kann (was ich Dir wünsche). Meist tut man sich mit realen Tabellen und dem Spielen über Assistenten einfacher. Und da baue ich mir Tabellen nur zusammen, wenn mich der Fall sehr interessiert - mit dem Bereitstellen einer vorhandenen(!) Umgebung sollte jemand, der an der Lösung seines Problems interessiert ist, nicht überfordert sein, selbst wenn er den zusätzlichen Aufwand, aus seinem Projekt eine Demo herauslösen zu müssen, betreiben muss. Dieser Aufwand erspart Aufwand bei dem, der eigentlich nur eine Lösung bieten soll.

Als Vorschlag:
INSERT INTO
    tblCostCategory(
        catCategory
    )
SELECT DISTINCT
    E.CostCategory
FROM
    CostElements AS E
WHERE
    NOT Exists
        (
            SELECT
                Null
            FROM
                tblCostCategory C
            WHERE
                C.catCategory = E.CostCategory
        )

INSERT INTO
    tblAccountGroup(
        refCatID,
        grpAccGroup
    )
SELECT DISTINCT
    C.catID,
    E.AccountGroup
FROM
    tblCostCategory AS C
        INNER JOIN CostElements AS E
        ON C.catCategory = E.CostCategory
WHERE
    NOT EXISTS
        (
            SELECT
                NULL
            FROM
                tblAccountGroup A
            WHERE
                A.grpAccGroup = E.AccountGroup
                    AND
                A.refCatID = C.catID
        )

INSERT INTO
    tblCostElement(
        refGrpID,
        cosAccount
    )
SELECT DISTINCT
    A.grpID,
    E.Account
FROM
    tblAccountGroup AS A
        INNER JOIN CostElements AS E
        ON A.grpAccGroup = E.AccountGroup
WHERE
    NOT EXISTS
        (
            SELECT
                NULL
            FROM
                tblCostElement C
            WHERE
                C.cosAccount = E.Account
                    AND
                C.refGrpID = A.grpID
        )


MfGA
ebs
Mit freundlichem Glück Auf!

Eberhard

Kladdi

Hallo ebs,

vielen Danke für deine Mühe.
Das ist tatsächlich genau das was ich als Lösung gesucht habe.  :D

Viele Grüße

Kladdi

P.S:
Die Aussage mit dem "auch lösbar sein ohne ..." möchte ich zurücknehmen, ich komme aus einem Umfeld in denen solche Abstraktionen an der Tagesordnung sind und hab teilweise Schwierigkeiten im Gedächnis zu behalten das andere mit ein paar hingekleckerten Screenshots, Code-Fragmenten und natürlichem Text nicht so viel anzufangen wissen.   :-[


ebs17

Für das Verständnis ist eine gute Abstraktion sehr hilfreich.
Für eine Umsetzung in ein konkretes Projekt stellt sich die Frage, wer lästige Routine erledigt, bevor gefragte Lösungen eingesetzt werden können. Wenn man Leistung und Zeit anderer achtet, beantwortet sich diese Frage von selbst.

MfGA
ebs
Mit freundlichem Glück Auf!

Eberhard