Hi all,
I have a few customised SAP tables that I must import in Access. It works fine for the smaller tables. In my test DB one table has about 48000 records and it takes several hours to process (in my production Database, the number of records exceed 100000). I've tried splitting the process, closing my table, but it doesn't make a big difference.
Can you guys help me optimse this process please?
I am using Access 97. One table has about 48000 records and 63 fields and an another table has 47 000 and 167 fields.
Here is my code for one table :
Option Compare Database
Option Explicit
Dim objFunctions As Object
Dim objFuncUpload As Object
Dim objZCOWLINE_ITEMS As Object
Dim lcYN As String
Dim i, j, deb_i, fin_i, deb_j, fin_j As Double
Dim db As Database
Dim rs_zcowline_items As Recordset
Dim iRow, iCol As Integer
Sub TraiteDetailed()
'**************
' Logon SAP
'**************
Set objFunctions = CreateObject("SAP.Functions"
objFunctions.Connection.Destination = "ER3"
objFunctions.Connection.User = "DEVEL"
objFunctions.Connection.Password = "12ab34"
objFunctions.Connection.Client = "500"
objFunctions.Connection.Language = "EN"
objFunctions.Connection.System = "WQA SERVER"
If objFunctions.Connection.Logon(0, True) = False Then
lcYN = MsgBox("Unable to Connect. Exiting...", vbCritical + vbOKOnly, "SAP - RFC Connection"
End If
Set objFuncUpload = objFunctions.Add("Z_READ_CO_LINE_ITEMS"
If objFuncUpload.call = True Then
Set objZCOWLINE_ITEMS = objFuncUpload.tables("ZCOWLINE_ITEMS_TAB"
Else
MsgBox "Call failed DetLineItems! Error: " + objFuncUpload.Exception
End If
objFunctions.Connection.logoff
Set db = CurrentDb
' I've tried spliting the process.
fin_i = (objZCOWLINE_ITEMS.ROWCOUNT / 5000) + 1
deb_i = 1
For i = deb_i To fin_i
deb_j = (5000 * (i - 1)) + 1
fin_j = (5000 * i)
If fin_j > objZCOWLINE_ITEMS.ROWCOUNT Then
fin_j = objZCOWLINE_ITEMS.ROWCOUNT
End If
For j = deb_j To fin_j
Set rs_zcowline_items = db.OpenRecordset("ZCOWLINE_ITEMS"
rs_zcowline_items.AddNew
For iCol = 1 To 63
If Len(Mid(objZCOWLINE_ITEMS(j, iCol), 1)) = 0 Then
rs_zcowline_items(iCol - 1) = " "
Else
rs_zcowline_items(iCol - 1) = Mid(objZCOWLINE_ITEMS(j, iCol), 1)
End If
Next
rs_zcowline_items.Update
Next
rs_zcowline_items.Close
Set rs_zcowline_items = Nothing
Next
Set objZCOWLINE_ITEMS = Nothing
End Sub
Public Function Process_detailed()
TraiteDetailed
End Function
Thanks
Sonia.
I have a few customised SAP tables that I must import in Access. It works fine for the smaller tables. In my test DB one table has about 48000 records and it takes several hours to process (in my production Database, the number of records exceed 100000). I've tried splitting the process, closing my table, but it doesn't make a big difference.
Can you guys help me optimse this process please?
I am using Access 97. One table has about 48000 records and 63 fields and an another table has 47 000 and 167 fields.
Here is my code for one table :
Option Compare Database
Option Explicit
Dim objFunctions As Object
Dim objFuncUpload As Object
Dim objZCOWLINE_ITEMS As Object
Dim lcYN As String
Dim i, j, deb_i, fin_i, deb_j, fin_j As Double
Dim db As Database
Dim rs_zcowline_items As Recordset
Dim iRow, iCol As Integer
Sub TraiteDetailed()
'**************
' Logon SAP
'**************
Set objFunctions = CreateObject("SAP.Functions"
objFunctions.Connection.Destination = "ER3"
objFunctions.Connection.User = "DEVEL"
objFunctions.Connection.Password = "12ab34"
objFunctions.Connection.Client = "500"
objFunctions.Connection.Language = "EN"
objFunctions.Connection.System = "WQA SERVER"
If objFunctions.Connection.Logon(0, True) = False Then
lcYN = MsgBox("Unable to Connect. Exiting...", vbCritical + vbOKOnly, "SAP - RFC Connection"
End If
Set objFuncUpload = objFunctions.Add("Z_READ_CO_LINE_ITEMS"
If objFuncUpload.call = True Then
Set objZCOWLINE_ITEMS = objFuncUpload.tables("ZCOWLINE_ITEMS_TAB"
Else
MsgBox "Call failed DetLineItems! Error: " + objFuncUpload.Exception
End If
objFunctions.Connection.logoff
Set db = CurrentDb
' I've tried spliting the process.
fin_i = (objZCOWLINE_ITEMS.ROWCOUNT / 5000) + 1
deb_i = 1
For i = deb_i To fin_i
deb_j = (5000 * (i - 1)) + 1
fin_j = (5000 * i)
If fin_j > objZCOWLINE_ITEMS.ROWCOUNT Then
fin_j = objZCOWLINE_ITEMS.ROWCOUNT
End If
For j = deb_j To fin_j
Set rs_zcowline_items = db.OpenRecordset("ZCOWLINE_ITEMS"
rs_zcowline_items.AddNew
For iCol = 1 To 63
If Len(Mid(objZCOWLINE_ITEMS(j, iCol), 1)) = 0 Then
rs_zcowline_items(iCol - 1) = " "
Else
rs_zcowline_items(iCol - 1) = Mid(objZCOWLINE_ITEMS(j, iCol), 1)
End If
Next
rs_zcowline_items.Update
Next
rs_zcowline_items.Close
Set rs_zcowline_items = Nothing
Next
Set objZCOWLINE_ITEMS = Nothing
End Sub
Public Function Process_detailed()
TraiteDetailed
End Function
Thanks
Sonia.