WinXP/AccXP DoCmd.TransferSpreadsheet

13/08/2009 - 17:25 von Thomas Warnke | Report spam
Hallo,

da man mit DoCmd.OutputTo nach Excel maximal 16.384 Zeilen exportieren kann,
will ich es jetzt mit DoCmd.TransferSpreadsheet machen. Der Export einer
Tabelle klappt auch, aber wenn ich den Namen einer StoredProcedur angebe,
kommt die Meldung "... kann das objekt ... nicht finden".
Hab schon die Konstanten durch ihre Werte ersetzt, es klappt nicht. Was
mache ich falsch?

DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel8, "Test",
"C:\Test.xls", True

Danke & Gruss
 

Lesen sie die antworten

#1 Klaus Oberdalhoff
13/08/2009 - 23:21 | Warnen spam
Hi,

DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel9, strAbfragename,
strDateiname, IstMitHeaderJN, Rng


strAbfragename muss für den Export aus Access eine in Access bestehende
Abfrage sein. Ein SQLString kann NICHT verwendet werden. Mit einer Stored
Procedure habe ich es noch nicht versucht, aber wenn, dann muss ein
"Abfragemantel" drumrum sein.


Function CreateQuery(strSQL As String, Optional Queryname As String =
"qrySorting") As Boolean

Dim dbs As DAO.Database
Dim qdf As DAO.QueryDef

On Error GoTo CreateQuery_Error

Set dbs = CurrentDb
If ObjectExists("Query", Queryname) Then
DoCmd.DeleteObject acQuery, Queryname
End If
Set qdf = dbs.CreateQueryDef(Queryname, strSQL)

DoEvents

CreateQuery = True
On Error GoTo 0
Exit Function

CreateQuery_Error:

' MsgBox "Error " & Err.Number & " (" & Err.Description & ") in procedure
CreateQuery of Modul DataFunctions"
CreateQuery = False

End Function


Function ObjectExists(strObjectType As String, strObjectName As String) As
Boolean
' Pass the Object type: Table, Query, Form, Report, Macro, or Module
' Pass the Object Name
Dim db As DAO.Database
Dim tbl As DAO.TableDef
Dim qry As DAO.QueryDef
Dim I As Integer

Set db = CurrentDb()
ObjectExists = False

If strObjectType = "Table" Then
For Each tbl In db.TableDefs
If tbl.Name = strObjectName Then
ObjectExists = True
Set db = Nothing
Exit Function
End If
Next tbl
ElseIf strObjectType = "Query" Then
For Each qry In db.QueryDefs
If qry.Name = strObjectName Then
ObjectExists = True
Set db = Nothing
Exit Function
End If
Next qry
ElseIf strObjectType = "Form" Or strObjectType = "Report" Or
strObjectType = "Module" Then
For I = 0 To db.Containers(strObjectType & "s").Documents.Count -
1
If db.Containers(strObjectType & "s").Documents(I).Name =
strObjectName Then
ObjectExists = True
Set db = Nothing
Exit Function
End If
Next I
ElseIf strObjectType = "Macro" Then
For I = 0 To db.Containers("Scripts").Documents.Count - 1
If db.Containers("Scripts").Documents(I).Name = strObjectName
Then
ObjectExists = True
Set db = Nothing
Exit Function
End If
Next I
Else
MsgBox "Invalid Object Type passed, must be Table, Query, Form,
Report, Macro, or Module"
End If

Set db = Nothing

End Function

Function CreateQueryPathThru(strConnServer As String, strConnDB As String,
strConnTyp As String, strSQL As String, strAbfragename As String) As Boolean

'strConnServer = "N2319021" ' Servername
'strConnServer = "123.123.123.123,1234" ' IP und Port

'strConnDB = "Prj_Bio_Dim" ' Datenbankname

'strConnTyp = "Trusted_Connection=Yes" ' integrated Windows Security
'strConnTyp = "Uid=myUsername;Pwd=myPasword" ' SQL Server User und
Password

Dim db As DAO.Database
Dim qdfAbfrage As DAO.QueryDef

CreateQueryPathThru = False

On Error GoTo CreateQueryPathThru_Error


' Eine Datenbank öffnen, aus der QueryDef-Objekte erstellt werden können.
' Set db = OpenDatabase("DB1.mdb")

Set db = CurrentDb

'Exitstierende Abfrage löschen
If ObjectExists("Query", strAbfragename) Then
DoCmd.DeleteObject acQuery, strAbfragename
End If

' Ein nicht temporàres QueryDef-Objekt erstellen, um
' Daten von einer Microsoft SQL Server-Datenbank abzurufen.
Set qdfAbfrage = db.CreateQueryDef(strAbfragename)
With qdfAbfrage

'ODBC;DRIVER={SQL
Server};SERVER=N2319021;DATABASE=Prj_Bio_Data;Trusted_Connection=Yes;
'ODBC;DRIVER={SQL
Server};SERVER=N2319021;DATABASE=Prj_Bio_Data;Uid=myUsername;Pwd=myPasword;

.Connect = "ODBC;DRIVER={SQL Server};SERVER=" & strConnServer &
";DATABASE=" & strConnDB & ";" & strConnTyp & ";"

'strSQL = "SELECT * FROM Test;"

.SQL = strSQL
.Close
End With
DoEvents
CreateQueryPathThru = True
Exit Function

CreateQueryPathThru_Error:

CreateQueryPathThru = False
MsgBox "Fehler #" & CStr(Err.Number) & " von """ & Err.Source & """: " &
Err.Description
Err.Clear

End Function





CreateQuery ist eine Funktion, die eine fixe Abfrage aus einem SQLString
erzeugt

ObjectExists ist eine Hilfsfunktion

CreateQueryPathThru ist eine Funktion, die eine fixe Path->Thru-Abfrage aus
einem SQLString erzeugt


mfg

Klaus

Ähnliche fragen