6 Replies Latest reply on Apr 4, 2013 12:01 AM by Unspecified Unspecified

    Improving the speed of opendoc within Ms Access Database

    Unspecified Unspecified

      Hi Folks,


      I've created a basic access database to open Solidworks Drawings and save the BOM to a table. It works well except that it takes on average 12 seconds per drawing (.SLDDRW) to run.


      I'm using opendoc7 and the following options:


      swDocSpecification.DocumentType = swDocDRAWING

      swDocSpecification.ReadOnly = True

      swDocSpecification.Silent = False

      swApp.UserControlBackground = True

      swApp.Visible = False


      It's worth noting that when I set swApp.UserControlBackground = False my programme takes 4 seconds longer per drawing, so I set it to True.


      I have used swDocSpecification.ViewOnly = True which loads the files very quickly, but leaves me unable to traverse the tables. The BOM is always on the first page of our drawings but the title is not always the same so I need to traverse the tables until I find the BOM.


      My code is below. I would appreciate any ideas to speed this up.



      Option Compare Database
      Private Sub Command0_Click()
      ' Code adapted from author below
      ' Author: Luke Malpass
      ' Website: http://www.angelsix.com
      ' Date: 01/04/08
      ' Prerequisits: Have a drawing open, and for it to export anything, have at least one table created (such as a BOM)
      Dim start_time, end_time
      Dim swApp As SldWorks.SldWorks
      Dim swDocSpecification As SldWorks.DocumentSpecification
      Dim swModel As SldWorks.ModelDoc2
      Dim swDraw As SldWorks.DrawingDoc
      Dim swView As SldWorks.View
      Dim swTable As SldWorks.TableAnnotation
      Dim swAnn As SldWorks.Annotation
      Dim sName As String
      Dim vSheetNames As Variant
      Dim nNumCol As Long
      Dim nNumRow As Long
      Dim sRowStr As String
      Dim i As Long
      Dim x As Long
      Dim j As Long
      Dim longstatus As Long, longwarnings As Long
      Dim bRet As Boolean
      For x = 0 To Me.Lst_Dwg.ListCount - 1
          Set swApp = CreateObject("SldWorks.Application")
          Set swDocSpecification = swApp.GetOpenDocSpec("C:\SWX\" & Lst_Dwg.Column(1, x) & "\" & Lst_Dwg.Column(1, x) & ".slddrw")
          sName = swDocSpecification.FileName
          swDocSpecification.DocumentType = swDocDRAWING
          swDocSpecification.ReadOnly = True
          swDocSpecification.Silent = False
          'swDocSpecification.ViewOnly = True
          Set swModel = swApp.OpenDoc7(swDocSpecification)
          longstatus = swDocSpecification.Error
          longwarnings = swDocSpecification.Warning
          swApp.UserControlBackground = True
          swApp.Visible = False
          Set swModel = swApp.ActiveDoc
          Set swDraw = swModel
          vSheetNames = swModel.GetSheetNames
          swDraw.ActivateSheet (vSheetNames(0))
          Set swView = swDraw.GetFirstView
          Set swTable = swView.GetFirstTableAnnotation
          Do While Not swTable Is Nothing
              Set swAnn = swTable.GetAnnotation
              nNumCol = swTable.ColumnCount
              nNumRow = swTable.RowCount
              If swTable.Type = SwConst.swTableAnnotationType_e.swTableAnnotation_BillOfMaterials Then
                  For i = 0 To nNumRow - 1
                      For j = 0 To nNumCol - 1
                          Debug.Print swTable.DisplayedText(i, j)
                      Next j
                  Next i
              End If
              Set swTable = swTable.GetNext
          swApp.CloseDoc swApp.ActiveDoc.GetTitle
      Next x
      Set swApp = Nothing
      End Sub