2016-09-14 2 views
0

I haben sehr große Datenmenge in zwei strukturierten Excel-Blätter mit den folgenden Spalten:VBA - Legen in zwei Tisch wobei id aus dem ersten Tabelle ist ein Feld in zweiten

EXCEL DATA 

Sheet1 [pod, client, address, ...etc] -one record per [pod] 
Sheet2 [pod, pointofmeasure, typepct, ...etc] -one-to-many records per [pod] 

-Beziehung zwischen sheet1.pod und sheet2.pod (one-to-many-Beziehung)

brauche ich eine sQL-Daten einfügen aus, dass Excel-Sheets in eine Access-Datenbank mit der Struktur folgender Tabellen:

ACCESS DATABASE 

Table1 [id, pod, client, address, ...etc] 
Table2 [id, pod_id, pod, pointofmeasure, typepct, ...etc] 

Wo table2.pod_id = table1.id

es Einsatz in einer SQL tun können, werden?

ich mit diesem Massen-Einsatz kam ...

cn.Open scn 
ssql = "INSERT INTO table1 (pod, client, address, ...etc) " 
ssql = ssql & "SELECT * FROM [Excel 8.0;HDR=YES;DATABASE=" & dbWb & "].[sheet1$]" 

cn.Execute ssql, cAffectedRows 
cn.Close 

Nun, wie zum Teufel ich das bekommen id Daten einfügen table2?

+0

Es gibt keine Beziehung zwischen ** id **, ** pod ** und ** pod_id ** in den ursprünglichen Daten, so ** nein **, es kann nicht getan werden. Siehe [MCVE]. – Jeeped

+0

** Pod ** in _sheet1_ enthält eindeutige Werte und _sheet2_ enthält mehrere Datensätze, die mit ** pod ** vom ersten Blatt verknüpft sind - die Beziehung zwischen ** pod.sheet1 ** und ** pod.sheet2 ** (one-to -viele) – Adrian

+0

Bitte schauen Sie sich http://stackoverflow.com/questions/595132/how-to-get-id-of-newly-inserted-record-using-excel-vba?rq=1, was ich getan habe nicht wissen ist, dass der Zugriff unterstützt @@ Identität. vielleicht hilft dir diese Frage ein wenig? – swe

Antwort

0

Angenommen, Ihre Pod-Spalte in Tabelle 1 ist eindeutig, Sie müssen einfügen, wählen Sie erneut mit der Bedingung SELECT id FROM table1 WHERE pod = 'myCurrentPod' und es gibt Ihre ID.

Wenn Pod nicht eindeutig ist und sogar Pod mit anderen bekannten Werten nicht eindeutig ist, gibt es keine Chance, es so zu machen. Wenn der Pod mit anderen bekannten Werten eindeutig ist, können Sie die obere Anweisung mit weiteren Bedingungen erweitern.

In allen Fällen können Sie keine Massen einfügen, sondern eine Zeile aus Blatt1 einfügen, verknüpfte Zeilen aus Blatt2 einfügen, nächste Blatt1-Zeile und so weiter.

Wenn Sie die Tabellen entwerfen können, sollten Sie nicht mit einer Autoinkrement-ID, aber mit einer Application-Set-ID gehen. Oder, wenn Ihre Werte in pod wirklich einzigartig sind, verwenden Sie dies als pk.

+0

hmm ... ** pod ** von table1 ist nicht einzigartig, kann mehrere Datensätze der gleichen ** pod ** von verschiedenen Sitzungen (importiert von Excel-Tabellen) ... deshalb habe ich ein Feld ** pod_id * * Um eine Beziehung im Zugriff zu machen und eine Geschichte von PODs zu halten, wenn Sie wissen, was ich meine – Adrian

+0

Nur ** pod ** von Excel Blatt1 ist einzigartig in einer einzigen Sitzung – Adrian

+0

@Adrian ich editierte meine Antwort – swe

0

Sie können in einer Einfügung ausgeführt werden, wenn Ihre Spalten korrekt benannt sind (d. H. Jedes Attribut ist eindeutig und konsistent im gesamten Schema benannt), und Fremdschlüssel werden wie erwartet eingerichtet.

Hier ist eine schnelle Skizze für den Zugriff der Verwendung von SQL DDL ANSI-92 Query Mode (Sie können die gleichen Objekte mit der Access-Benutzeroberfläche erstellen):

CREATE TABLE TableA 
(ID IDENTITY NOT NULL UNIQUE, 
    a_col INTEGER NOT NULL); 

CREATE TABLE TableB 
(ID INTEGER NOT NULL UNIQUE 
    REFERENCES TableA (ID), 
    b_col INTEGER NOT NULL); 

CREATE VIEW TestAB 
(a_ID, a_col, b_ID, b_col) AS 
SELECT A1.ID, A1.a_col, B1.ID, B1.b_col 
    FROM TableA AS A1 
     INNER JOIN TableB AS B1 ON A1.ID = B1.ID; 

Wenn Sie dann über die Ansicht einzufügen, das Weglassen der ID Säule (so dass es automatisch generiert werden):

INSERT INTO TestAB (a_col, b_col) VALUES (55, 99); 

Dann wird in jede Tabelle für den einzelnen SQL-Befehl eine Zeile eingefügt.

Das heißt, es sieht nicht so aus, als ob Sie strikt genug gewesen wären, wenn Sie Ihre Attribute z. Table1.id ändert den Namen in pod_id in Table2 und id ist in Ihrem Schema nicht eindeutig. i

+0

Ich war nicht sehr explizit, ich denke, .... Felder ** ID ** von beiden Tabellen (1 & 2) sind einzigartig (Primärschlüssel gesetzt) ​​und automatisch inkrementieren. Feld ** pod_id ** von table2 nimmt den Wert von Feld ** id ** von table1 - was ich tun möchte - und in einer einzigen Abfrage (ich meine einfügen) schreibe Daten von beiden Tabellen in beide Tabellen. – Adrian

+0

@Adrian: OK, so dass Feldnamen "ID" in beiden Tabellen nicht gut ist, benenne sie um, damit sie konsistent sind, z. Benenne 'Table1.id' in' Table1.pod_id' um. – onedaywhen

0

fand eine dieser ...

INSERT INTO [table1] ([data]) 
OUTPUT [inserted].[id], [external_table].[col2] 
INTO [table2] SELECT [col1] 
FROM [external_table] 

und letzten SELECT ... ein JOIN zwischen den Blättern zu tun, um alle Daten retrive?

Es funktioniert so?

Verwandte Themen