VBA externe Datenbank Abfragewerte an Tabelle anfügen
indy0878
Gesendet: 27.04.12 22:07
Betreff: RE: VBA externe Datenbank Abfragewerte an Tabelle anfügen


Hallo Henry,

das wäre ja auch kein problem .
allerdings habe ich dann eine ständig verknüpfte Tabelle zu der DB2 Datenbank und das wollte ich eingentlich vermeiden.Ich möchte nur die Verbindung zur Datenbank aufbauen während der Abfrage.
Ich bin jetzt schon soweit das ich die Daten in der Abfrage zwar in die Lokale Tabelle schreiben kann, allerding nur mit einer Schleife Datensatz für Datensatz und das dauert zu lange.
Momentan nutze ich folgenden Code.
----------------------------------------------------------------------------------------------------------
Sub Start_Ausgabe()

Set condb = New ADODB.Connection
host_ip = "xxx.xxx.xxx.xxx"
library = "libary"
Const host_user As String = "login"
Const host_pwd As String = "password"
condb.Open "DRIVER={iSeries Access ODBC Driver};UID=" & host_user & ";PWD=" & host_pwd & ";SYSTEM=" & host_ip & ";DBQ=" & library & ";DFTPKGLIB=QGPL;LANGUAGEID=ENU;PKG=QGPL/DEFAULT(IBM),2,0,1,0,512;SIGNON=1"

Dim rec As ADODB.Recordset
Set rec = New ADODB.Recordset
Dim strSQL As String

'Daten auslesen
strSQL = "select tziden,tzbez1 from pbfstss where tzkonz='308' and tzfirm='010' "

rec.CursorLocation = adUseClient
rec.Open strSQL, condb, adOpenForwardOnly, adLockReadOnly
rec.MoveFirst
While Not rec.EOF
On Error Resume Next

'------> an lokale Tabelle anfügen
With CurrentDb().OpenRecordset("Artikel", dbOpenDynaset, dbAppendOnly)
.AddNew
![Artikel] = (rec.Fields(0))
![Bezeichnung] = (rec.Fields(1))
.Update
End With
rec.MoveNext
Wend
GoTo ENDE2
ENDE2:
condb.Close
ENDE1:

End Sub
--------------------------------------------------------------------------------------------

Gibt es denn eine Möglichkeit die Daten auf einmal in die lokale Tabelle zu schreiben - in Excel geht das auch.

Da nutze ich einfach folgenden Code:
-------------------------------------------------------------------------------------------------------------------------------
Option Explicit

Dim host_ip As String
Dim brary As String
'****************** SQL-User *********************************
Const host_user As String = "login"
Const host_pwd As String = "password"
'*************************************************************

Sub Auswertung()

Dim command_sql As String
Dim connexion As String
Dim datum As String

'*********************************************
command_sql = "select tziden,tzbez1 from pbfstss where tzkonz='308' and tzfirm='010' "


host_ip = "xxx.xxx.xxx.xxx"
library = "library"

connexion = "ODBC;DRIVER={iSeries Access ODBC Driver};UID=" & host_user & _
";PWD=" & host_pwd & ";SYSTEM=" & host_ip & ";DBQ=" & library & ";DFTPKGLIB=QGPL;" & _
"LANGUAGEID=ENU;PKG=QGPL/DEFAULT(IBM)," & _
"2,0,1,0,512;SIGNON=1"

'*** Ausgabe ************************************************************
Workbooks.Add
Sheets("Tabelle1").Name = "Result"
Application.ScreenUpdating = False

With ActiveSheet.QueryTables.Add(Connection:=connexion, Destination:=Range("A1"))
.CommandText = command_sql
.Refresh BackgroundQuery:=False

Application.ScreenUpdating = True
Application.DisplayAlerts = False

End With
End Sub

-----------------------------------------------------------------------------------

Hier werden die Daten auf einem Rutsch ausgegeben, und ich denke das wird bei Access auch gehen.
Hast du da vielleicht noch eine Idee?

Besten Dank im vorfeld schonmal & Grüße

Indy



















Top of the page Bottom of the page