2016-07-21 5 views
0

Ich habe ein Access VBA-Programm, das zwei Tabellen verbindet und speichert sie in einem anderen. Mein Problem ist, dass anstelle der SQL-Abfrage Beitritt commonField und die neue Tabelle mit einem commonField Feld, die neue Tabelle hat die commonField mit dem Namen tableName1_commonField und eine andere mit dem Namen tableName2_commonField.SQL-Abfrage zu verbinden Feld umbenennt Feld in Access VBA

Also, wenn die Abfrage war die folgende:

SELECT IIPM.*, UNIX.* INTO [UNIX_lob] FROM IIPM INNER JOIN UNIX ON IIPM.[appcode_0] = 
UNIX.[appcode_0]; 

Dann wird das appcode_0 Feld, das UNIX_lob zwischen IIPM und UNIX wird zwei Felder namens IIPM_appcode_0 und UNIX_appcode_o in der neuen Tabelle gemeinsam ist, wenn ich es will eine bleiben einzelnes Feld appcode_0.

ich dies direkt nach der SQL-Abfrage zurückverfolgt haben wird ausgeführt:

' Set the name of the new table where the joins will be stored. ' 
newTableName = "[" + tableName2 + "_lob]" 

' Join tableName1 and tableName2 on commonField, and store the joined data in newTableName ' 
sqlJoinQuery = "SELECT " + tableName1 + ".*, " + tableName2 + ".*" & _ 
      " INTO " + newTableName & _ 
      " FROM " + tableName1 & _ 
      " INNER JOIN " + tableName2 & _ 
      " ON " + tableName1 + "." + commonField + " = " + tableName2 + "." + commonField + ";" 
Debug.Print sqlJoinQuery 
CurrentDb.Execute sqlJoinQuery 
+1

das Verhalten für Access VBA zu erwarten wäre, weil Sie nicht zwei Spalten den gleichen Namen haben können. Aber was ist deine Frage? Warum passiert es? weil der Feldname zwischen den Tabellen wiederholt wird und Sie alle Platzhalter als Platzhalter auswählen. Wie man es stoppt? Wählen Sie nicht alle Spalten aus. wie man anhängen statt verbinden? Verwenden Sie Union All – Matt

+0

Ich war mir nicht bewusst, dass das erwartete Verhalten ist und nahm an, dass es ein Fehler beim Schreiben meiner Abfrage war. Danke - in diesem Fall, wenn ich eine dieser Spalten umbenenne, dann wird das ausreichen. – Paradox

+0

Was Matt sagte. Es gibt keinen richtigen Weg, um das generisch zu machen, an den ich denken kann, Sie müssen wirklich alle Ihre Felder auflisten. Nun, vielleicht können Sie die Felder Sammlung durchlaufen und sie alle in ein Array schreiben, aber das klingt wie ein Albtraum. –

Antwort

1

Nach meinem Kommentar über das Schreiben, ich Ihre andere Frage sah, so dass ich dachte, dass ich auf erweitern würde, was ich sagte oben ein wenig:

CREATE TABLE JoinTable (table1_key long null, table1_somecolumn text(50) null, table2_key long null, table2_somecolumn text(50) null); 

Dann ist dieses getan zu haben,

INSERT INTO JoinTable (Table1_key, table1_somecolumn, table2_key, table2_somecolumn) 
SELECT t1.key, t1.somecolumn, t2.key, t2.somecolumn 
FROM Table1 t1 INNER JOIN Table2 t2 ON t1.key = t2.key 

Und das tun sollten, was Sie nach (a lbeit die ohne Zweifel Ihre Anfragen ein bisschen unordentlicher als diese aussehen werden!)

hoffte, das hilft