RFC_READ_TABLE 是SAP系統自帶的RFC函數,用於讀取SAP數據庫表的結構和數據。使用方法如下:
IMPORTING
QUERY_TABLE:讀取的表名
DELIMITER:輸出字段(DATA參數)之間的分隔符
NO_DATA:輸入’X’時,不向傳出表DATA輸出數據
ROWSKIP:輸出的第一條數據的行號(從0開始)
ROWCOUNT:從ROWSKIP開始,一共輸出的數據行數(0代表所有數據)
TABLE
OPTIONS:表查詢條件,比如SKA1表,KTOPL = 'Z900’表示查收Z900賬目表的會計科目數據,留空 代表所有數據。
FIELDS:輸出的表字段,留空代表輸出所有字段。
DATA:輸出的數據記錄。
假設我們要讀取 Z900 賬目表有所有會計科目,只需要輸出 KTOPL (賬目表)和 SAKNR (會計科目)兩個字段
------------------------------------------------
Public Sub Read_Table_SKA1()
Dim functions As SAPFunctionsOCX.SAPFunctions
Dim options As SAPTableFactoryCtrl.Table
Dim fields As SAPTableFactoryCtrl.Table
Dim data As SAPTableFactoryCtrl.Table
Call Logon
Set functions = New SAPFunctions
Set functions.Connection = sapConnection
Dim fm As SAPFunctionsOCX.Function
Set fm = functions.Add("RFC_READ_TABLE")
fm.Exports("QUERY_TABLE").Value = "SKA1" ' 要查詢的表
fm.Exports("DELIMITER").Value = "," ' Data表要存儲的數據以逗號分割
Set options = fm.Tables("OPTIONS")
Set fields = fm.Tables("FIELDS")
Set data = fm.Tables("DATA")
' 以下是表參數填充的方法
' options表參數限定要選擇的數據
options.FreeTable
options.AppendRow
options(1, "TEXT") = " KTOPL = 'Z900' " '第一行列名為TEXT的列增加選擇條件
' fields表參數限定要輸出的列,如果不限定
' 默認輸出所有列
' 我只想輸出KTOPL和SAKNR兩列
fields.FreeTable
fields.AppendRow
fields(1, "FIELDNAME") = "KTOPL"
fields.AppendRow
fields(2, "FIELDNAME") = "SAKNR"
fm.Call
' 如果有Exception , 說明有錯誤產生
If fm.Exception <> "" Then
Debug.Print fm.Exception
Exit Sub
End If
' 將DATA輸出到立即窗口
Dim row As SAPTableFactoryCtrl.row
Dim col As SAPTableFactoryCtrl.Column
' 按行讀取,DATA表只有一列
For Each row In data.Rows
Debug.Print row.Value("WA")
Next
Call Logoff
End Sub
------------------------------------------------
表填充的方法:
填充第一行第一列: sometable(1, 1) = “XXX”
或者根據列名:sometable(1, “FIELDNAME”) = “XXX”
因為table有一個RowCount屬性,我們總是可以將RowCount用於代碼中,增加靈活性。比如上面的代碼可以寫成:
------------------------------------------------
fields.FreeTable
fields.AppendRow
fields(fields.RowCount, "FIELDNAME") = "KTOPL"
fields.AppendRow
fields(fields.RowCount, "FIELDNAME") = "SAKNR"
------------------------------------------------
文章來源:https://blog.csdn.net/stone0823/article/details/50329257