Hier ein Bsp. mit DAO (Programmaufruf mit anschließ. SELECT auf Datei in QTEMP)
Ich verwende noch Excel 95 (DAO 3.0), daher
noch ohne ODBCDirect-Arbeitsbereich.
Ab DAO 3.5 kann man ein QeryDef auch über das Connection-Object (ODBCDirect) erstellen unter Umgehung des Database-Objects(Jet-Engine):

Das Bsp. hat im Programm-Aufruf einen Stringparameter und ein numerisch gepacktes Feld

Dim dbs As Database
Dim qdf As QueryDef
Dim rs As Recordset
Dim sCmdLength As String
Dim sCmd As String
Dim conn As String

Sub test_Call_und_SQL_auf_QTEMP()
conn = "ODBC;DSN=Datasourcename"

Sheets("Tabelle1").Select
Range("A1").Select
Selection.CurrentRegion.Select
Selection.Clear
Range("A1").Select


Set dbs = OpenDatabase("", 0, 0, conn)

'Parameter immer mit doppelten Hochkommas, aber von der Befehlslänge wieder abziehen
'im Bsp. hier 4 Hochkommas abziehen
sCmd = "CALL PGM(LIB/PGM) PARM(''01'' X''001F'')"
sCmdLength = Format$(Len(sCmd) - 4, "0000000000") & "00000"
cCmd = "{CALL QSYS.QCMDEXC ('" & sCmd & "', " & sCmdLength & ")}"
On Error Resume Next
dbs.Execute cCmd, dbSQLPassThrough
If Err <> 0 Then MsgBox "Fehler " & Err & ": " & Error(Err)

Set qdf = dbs.CreateQueryDef("")
sqlQ = "SELECT * FROM QTEMP.TEMPTBL"
qdf.SQL = sqlQ
qdf.Connect = conn
Set rs = qdf.OpenRecordset()
With rs
.MoveFirst
i = 0
Do While Not .EOF
For j = 0 To .Fields.Count - 1
ActiveCell.Offset(i, j).Value = .Fields(j).Value
Next j
i = i + 1
.MoveNext
Loop
End With

rs.Close
qdf.Close
dbs.Close
End Sub

Verweis auf "Microsoft DAO 3.0 Object Library" nicht vergessen !!!
Unter Extras/Verweise... (ab Excel 97 im VBA-Editor)



[Dieser Beitrag wurde von Sven Schneider am 10. Juli 2001 editiert.]