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]
Auf ein Beispiel dazu wurde hier verwiesen: Re: Problem mit importierten Daten (http://www.access-o-mania.de/forum/index.php?topic=16915.msg97376#msg97376)
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
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]
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
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]
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
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. :-[
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