2016-06-01 13 views
1

Ich bin neu in MS Access. Ich habe versucht, Daten von einer Teradata-Tabelle in MS Access-Datenbank zu importieren. Ich konnte die Verbindung zwischen den beiden mit VBA herstellen. Ich bin jedoch nicht in der Lage, den Inhalt in die Zugriffsdatenbank zu schreiben.Wie importiere ich Daten aus einer Teradata-Tabelle automatisch in den MS-Zugriff?

Für Excel verwenden wir normalerweise Objekte wie Blätter und Bereich, um die Werte zu füllen. Was sind Access-Gegenstücke dieser Objekte?

unten ist der Code, den ich verwendet haben:

Sub TBEN_PR_DSM_SEAS() 

    Dim cn As ADODB.Connection 
    Set cn = New ADODB.Connection 

    Dim rs As ADODB.Recordset 
    Set rs = New ADODB.Recordset 

    Dim cmdSQLData As ADODB.Command 
    Set cmdSQLData = New ADODB.Command 

    Dim query As String 

    cn.Open "DRIVER={Teradata}; DBCNAME=ABC2; Persist Security Info=True; User ID= ******; Password=******; Session Mode=ANSI;" 

    Set cmdSQLData.ActiveConnection = cn 
    query = "SELECT * FROM PRODBBYCIADHOCWRK.TBEN_PR_DSM_SEAS;" 
    cmdSQLData.CommandText = query 
    cmdSQLData.CommandType = adCmdText 
    cmdSQLData.CommandTimeout = 0 
    Set rs = cmdSQLData.Execute() 

End Sub 

Kann mir jemand bitte helfen Sie mit dem Rest des Teils aus? Ich benutze Access 2007-2010.

Danke und Gruß, Nirvik

+0

Zugriff ist eine DB, versteht SQL. In welcher Umgebung wurde der obige Code geschrieben? – marlan

Antwort

1

die Daten in dem Re-Cord in die Access-Tabelle einfügen, neue Re-Cord, Verbindung und Befehlsobjekte verwenden.

+0

können Sie bitte einen Beispielcode teilen? –

+0

@nirvikbanerjee, Zuerst mag ich Parfait Ansatz, nur beachten Sie meinen Kommentar, fix diesen Punkt, ich denke, das sollte funktionieren. – marlan

+0

@ nirvikbanerjee, Zweitens verwende ich normalerweise verknüpfte Tabellen und/oder dao ... Ich fand [diese Antwort hier] (http://stackoverflow.com/questions/19257599/how-to-insert-several-fields-into-) a-table-using-ado-wenn-zwei-der-fields-conta). Ich werde meine Antwort ändern. – marlan

2

MS Access ist ein interessantes Stück Software, da es sowohl als RDMS-Datenbank als auch als GUI-Konsole für eine Datenbank dienen kann. Standardmäßig stellt es eine Verbindung zur Jet/ACE-SQL-Engine (Windows-DLL-Dateien) her, die mit SQLite einen anderen RDMS auf Dateiebene vergleicht. Mit MSAccess.exe Office-Programm kann diese Standardeinstellung jedoch mit jeder anderen ODBC/OLEDB-kompatiblen Datenbank einschließlich der Server-Ebene RDMS (Oracle, SQL Server, MySQL, Sybase, sogar Teradata) mithilfe von verknüpften Tabellen umgeschaltet oder ergänzt werden. Und beim Verbinden mit externen Backends würde es mit MySQLs phpmyadmin, Management Studio von SQL Server, pgAdmin von PostgreSQL und anderen Konsolen verglichen werden.

Daher betrachten, eine verknüpfte Tabelle zu Teradata Erstellen DoCmd.TransferDatabase mit denen Änderungen an beiden Enden ohne ständige Ein- und Ausfuhr von Tabellendaten widerspiegeln:

DoCmd.TransferDatabase acLink, "ODBC Database", _ 
    "ODBC;DRIVER={Teradata}; DBCNAME=ABC2; Persist Security Info=True; User ID= ******;" _ 
    & "Password=******; Session Mode=ANSI;", acTable, "TBEN_PR_DSM_SEAS", "NewAccessTable" 

Und für eine statische, lokale Kopie (die Redundanz hinzufügen würde Ihre Anwendung benötigt) Sie können eine Anfüge-oder make-table Abfrage im Abfragefenster oder VBA DoCmd.RunSQL oder CurrentDb.Execute zu einer lokalen Access-Tabelle mit Hilfe der oben verlinkten Tabelle ausführen.

INSERT INTO NewAccessTable SELECT * FROM [TBEN_PR_DSM_SEAS] 

SELECT * INTO NewAccessTable FROM [TBEN_PR_DSM_SEAS] 
+0

Der letzte Parameter in TransferDatabase sollte auch "TBEN_PR_DSM_SEAS" sein, so dass der verknüpfte Tabellenname '[TBEN_PR_DSM_SEAS]', nicht 'NewAccessTable' ist. – marlan

+0

Das war der Leitfaden für das OP beim Setup. – Parfait

+0

@Parfait vielen Dank für Ihre Antwort. Ich habe versucht, die DoCmd.TransferDatabase. Aber es fordert mich auf, die ID-Variablen über die GUI in MS Access auszuwählen. Ist diese Auswahl eine einmalige Sache? Idealerweise möchte ich einen Code, bei dem ich bei jedem Wechsel der Tabelle in Teradata über die Access-GUI nichts auswählen muss. –

0

Tabellen sind Tabellen und Abfragen wählen Sie Bereiche. Felder sind Spalten und Datensätze sind Zeilen.

'Loop through Records 
Do Until rs.EOF 
'rs.Fields(0) is the first field returned from the Teradata query 
'executed in your initial question. 
    Debug.Print rs.Fields(0) 
    rs.MoveNext 
Loop 

'Append to Table 
'Have to create Table1 in Access database. 
'Table1 
'Field Name: Column1 
'Data Type: Text 

If rs.BOF = False Then rs.MoveFirst 'BOF = Beginning of file 

DoCmd.SetWarnings False 
Do Until rs.EOF 'EOF = End of file 
    DoCmd.RunSQL ("INSERT INTO Table1 (Column1) SELECT '" & rs.Fields(0) & "'") 
    rs.MoveNext 
Loop 
DoCmd.SetWarnings True 

cn.Close 
Set cn = Nothing 
Verwandte Themen