Hallo Jens,
ich bin's noch mal und habe noch mal ne Frage
Doch z.B. T002V , sogenannte "Database View".
Pool/ Clustertabellen oder Strukturen natürlich nicht.
Man könnte sagen: Es geht alles zu lesen, wenn Select * / im Abap funktioniert !
Ist das eine Transaktion, die es bei uns nicht gibt, der Database View hört sich gut an 😁 .
Kannst du dies bitte noch ein wenig erläutern.
Ich habe meine Abfrageroutine verallgemeinert:
Sub Start_SAP_Export()
SAP_Felder = Array("TABNAME", "TABCLASS", "DATMIN", "DATMAX", "DATAVG")
SAP_WHERE = "Tabclass = 'TRANSP'"
Debug.Print SAP_Liste("DD02L", SAP_WHERE, SAP_Felder, 5, 5000)
End Sub
Function SAP_Liste(SAP_Tabelle, SAP_WHERE, SAP_Felder, Exceltabelle, Optional MinAnzahl As Integer = 0, Optional User As String = "", Optional Passwort As String = "")
Dim FUBAU_rfc_read_table As Object
Dim T_I_Options As Object
Dim T_I_Fields As Object
Dim T_E_Data As Object
' SAP-Anmeldung
Set functionCtrl = CreateObject("SAP.Functions")
Set SAP_Connection = functionCtrl.Connection
SAP_Connection.ApplicationServer = "193.46.4.53"
SAP_Connection.SystemNumber = "00"
SAP_Connection.system = "E21"
SAP_Connection.client = "001"
If User = "" Then
Zugangsart = False
Else
SAP_Connection.User = User
SAP_Connection.password = Passwort
Zugangsart = True
End If
If SAP_Connection.Logon(o, Zugangsart) <> True Then
SAP_Liste = False
Else
SAP_Liste = True
End If
If Not (SAP_Liste) Then
SAP_Liste = "Keine SAP-Anmeldung möglich" ' SAP_Liste = SAP_Connection.LastError
GoTo Ende
End If
Set FUBA_rfc_read_table = functionCtrl.Add("RFC_READ_TABLE")
With FUBA_rfc_read_table
.exports("QUERY_TABLE") = SAP_Tabelle
.exports("DELIMITER") = "|" 'Delimiter
End With
Set T_I_Options = FUBA_rfc_read_table.Tables("OPTIONS")
Set T_I_Fields = FUBA_rfc_read_table.Tables("FIELDS")
Set T_E_Data = FUBA_rfc_read_table.Tables("DATA")
'Call T_I_Fields.Freetable ' Fields löscht
T_I_Options.AppendRow
T_I_Options(1, "TEXT") = SAP_WHERE
If Not (IsEmpty(SAP_Felder)) Then
If Not (IsArray(SAP_Felder)) Then SAP_Felder = Array(SAP_Felder)
For i = 0 To UBound(SAP_Felder)
T_I_Fields.AppendRow
T_I_Fields(i + 1, "FIELDNAME") = SAP_Felder(i)
Next
End If
'Aufruf des FUBAs
ret = FUBA_rfc_read_table.Call
If Not (ret) Then SAP_Liste = "Abfrage fehlgeschlagen": GoTo Ende
If T_E_Data.RowCount = 0 Then SAP_Liste = "Keine Daten zum Auslesen gefunden.": GoTo Ende
' Übetragen der Daten in Excel-Tabelle (z.B. immer in Tabelle1)
If T_E_Data.RowCount > 0 And ret = True Then
' Statusbartext ein
Application.DisplayStatusBar = True
DS_Anzahl = IIf(MinAnzahlDS_Anzahl <= 0, T_E_Data.RowCount, Min(MinAnzahlDS_Anzahl, T_E_Data.RowCount))
For i = 1 To DS_Anzahl
Application.StatusBar = "Bitte warten... (" & Format(i / (DS_Anzahl), "0.00%") & ")"
DoEvents
strDataRow = T_E_Data(i, 1)
DataRow = Split(strDataRow, "|")
'Spaltenüberschriften an Excel übergeben
If Col = False Then
For x = 0 To UBound(DataRow)
Sheets(Exceltabelle).Cells(1, x + 1).Value = T_I_Fields(x + 1, 1)
Next x
Col = True
End If
For x = 0 To UBound(DataRow)
Sheets(Exceltabelle).Cells(i + 1, x + 1).Value = DataRow(x)
Next x
Next i
SAP_Liste = DS_Anzahl & " von " & T_E_Data.RowCount & " ausgegeben."
End If
Ende:
' Statusbartext aus
Application.StatusBar = False
Call T_E_Data.Freetable
Call T_I_Fields.Freetable
Call T_I_Options.Freetable
' ###########################################################################
SAP_Connection.LogOff
End Function
Function Min(Wert1, Wert2)
Min = IIf(Wert1 < Wert2, Wert1, Wert2)
End Function
Stimmen hier in der Funktion die Aussagen:
If Not (ret) Then SAP_Liste = "Abfrage fehlgeschlagen": GoTo Ende
If T_E_Data.RowCount = 0 Then SAP_Liste = "Keine Daten zum Auslesen gefunden.": GoTo Ende
und kann man diese aus Errormeldungen noch näher ermitteln, insbesondere warum die Abfrage fehlgeschlagen ist.
Kann man die Funktion insgesamt noch etwas verbessern?
Gruß
Silvio
Bearbeitet vom Benutzer
vor 8 Jahre
|
Grund: Nicht angegeben