[AccessD] Search for linked documents....

Gustav Brock Gustav at cactus.dk
Sun Nov 21 04:21:22 CST 2004


Hi Sander

This is doable but not straight forward.

First, linked "documents" are treated as ISAM databases and tables. For
text and xBase and Paradox files, the directory is the "database" while
for Excel and Html the file is the database. Linked MAPI tables are even
more excotic so I will leave them for this. Linked ODBC tables are
complete different as they are identified by their connect strings.

Second, tables may be linked with other names than their true names.

This a query which will return all non-deleted links:

  SELECT DISTINCT 
    RTrim([Database]) AS DbsPath, 
    MSysObjects.Connect, 
    Hex(GetTableType([Flags])) AS TableType, 
    MSysObjects.ForeignName, 
    GetTrueForeignName(GetTableType([Flags]),[ForeignName]) AS
TrueForeignName, 
    MSysObjects.Name AS LinkedName
 FROM 
    MSysObjects
  WHERE 
    (IsTablePresent([Flags])=True) 
    AND 
    (MSysObjects.Type=4 Or MSysObjects.Type=6);

It uses these supporting functions:

<code>

Declarations.

  ' Table types known.
  '
  ' ODBC connection.
  Private Const clngTableTypeNone       As Long = &H0
  ' Note: MS MSDE/SQL Server has some higher bits set as well.
  Private Const clngTableTypeOdbc       As Long = &H100000
  ' Jet file attached by UNC name.
  Private Const clngTableTypeJetUnc     As Long = &H200000
  ' Jet file attached by mapped drive letter.
  Private Const clngTableTypeJetDrive   As Long = &H400000
  Private Const clngTableTypeParadox    As Long = &H700000
  Private Const clngTableTypeDbase      As Long = &H800000
  Private Const clngTableTypeText       As Long = &HA00000
  Private Const clngTableTypeExcel      As Long = &HB00000
  Private Const clngTableTypeOutlook    As Long = &HD00000
  Private Const clngTableTypeHtml       As Long = &HE00000

Public Function GetTrueForeignName( _
  ByVal lngTableType As Long, _
  ByVal strForeignName As String) _
  As String
  
' Returns true foreign name for those ISAM table types
' where this is stored as an alias.
' Foreign names for other table types are not altered.
'
' Example Excel:
'   Alias for worksheet: Sheet1$
'   True name: Sheet1
' Example Paradox:
'   Alias for table name: Pdoxfile#db
'   True name: Pdoxfile.db
'
' 2004-05-10. Cactus Data ApS, CPH.

  Const cstrSepDbase    As String = "#"
  Const cstrSepParadox  As String = "#"
  Const cstrSepText     As String = "#"
  Const cstrSepExcel    As String = "$"
  Const cstrRplExcel    As String = vbNullString
  
  Dim strTrueName   As String
  Dim lngPos        As Long
  
  Select Case lngTableType
    Case clngTableTypeParadox
      lngPos = InStr(strForeignName, cstrSepParadox)
      If lngPos > 1 Then
        strTrueName = Left(strForeignName, lngPos - 1)
      Else
        strTrueName = strForeignName
      End If
    Case clngTableTypeDbase
      lngPos = InStr(strForeignName, cstrSepDbase)
      If lngPos > 1 Then
        strTrueName = Left(strForeignName, lngPos - 1)
      Else
        strTrueName = strForeignName
      End If
    Case clngTableTypeExcel
      If Right(strForeignName, 1) = cstrSepExcel Then
        ' Worksheet. Strip traling "$".
        strTrueName = Left(strForeignName, Len(strForeignName) - 1)
      Else
        ' Named Range. Leave as is.
        strTrueName = strForeignName
      End If
    Case clngTableTypeText
      lngPos = InStr(strForeignName, cstrSepText)
      If lngPos > 1 Then
        strTrueName = Left(strForeignName, lngPos - 1)
      Else
        strTrueName = strForeignName
      End If
    Case Else
      strTrueName = strForeignName
  End Select
  
  GetTrueForeignName = strTrueName
  
End Function

Public Function IsTablePresent( _
  ByVal lngFlag As Long) _
  As Boolean
  
' Returns True if a table is not flagged as deleted in MSysObjects.
' To be used in a query to extract currently attached tables.
'
' 2004-04-21. Cactus Data ApS. CPH.

  Const clngFlagDeleted As Long = &H1001
  
  Dim booDeleted        As Boolean
  
  booDeleted = lngFlag And clngFlagDeleted
  
  IsTablePresent = Not booDeleted

  End Function

Public Function GetTableType( _
  ByVal lngFlag As Long) _
  As Long
  
' Returns the table type from lngFlag in MSysObjects by rounding it to
' &H100000 which strips all minor flags including the hidden flag
(&H8)
' and all major flags - like &H20xxxxxx used by MS MSDE/SQL Server.
' To be used in a query to extract currently attached tables of a
specific type.
'
' 2004-04-21. Cactus Data ApS. CPH.

  ' Flag mask.
  ' Const clngFlagMajor As Long = &HFF000000
  ' Const clngFlagMinor As Long = &HFFFFF
  Const clngFlagMask  As Long = &HFF0FFFFF
  
  Dim lngType         As Long
  
  lngType = lngFlag And Not clngFlagMask
  
  GetTableType = lngType

End Function

</code>

Have fun!

/gustav

>>> accessd667 at yahoo.com 19-11-2004 14:57:55 >>>
Hi group,
 
I've got some code from the ADHB2K to search for linked tables.
However, it is also possible to link documents...office documents that
is. So I mean files with extions like:
.xls;
.txt;
etc
 
Q1: how can I search for these linked 'documents'?
Q2: how can I pinpoint the xls files from none xls files?
 
TIA
 
Sander




More information about the AccessD mailing list