[AccessD] database in a state by Admin such that it is prevented from being "accessed" - to read and import its objects via automation or db to db

Brad Marks BradM at blackforestltd.com
Wed May 30 21:11:26 CDT 2012


William,

I have seen this happen once in a while also.

Recently I read that this message will not appear if a person closes all reports, forms, modules etc. in both the "source" and "target" database.

I plan to try this the next time I see this message.

Brad 




-----Original Message-----
From: accessd-bounces at databaseadvisors.com on behalf of William Benson
Sent: Wed 5/30/2012 9:03 PM
To: Access Developers discussion and problem solving
Subject: Re: [AccessD] database in a state by Admin such that it is prevented from being "accessed" - to read and import its objects via automation or db to db
 
All on my local hd. Its just some dbs allow and others don't. I can't
figure out the difference between dbs.

If it would just happen every time I would honestly be happier. As it is it
is frustrating me to no end.
On May 30, 2012 3:40 PM, "Michael Mattys" <michael at mattysconsulting.com>
wrote:

> I had the same problem on a client's network.
> It turned out to be that the Windows Login did not have write permissions.
> The admin had it set to shared, but had to right click on the folder and
> set
> the properties.
>
> hth,
>
> Michael R Mattys
> Mattys Consulting, LLC
> www.mattysconsulting.com
>
>
> -----Original Message-----
> From: accessd-bounces at databaseadvisors.com
> [mailto:accessd-bounces at databaseadvisors.com] On Behalf Of Benson, William
> (GE Global Research, consultant)
> Sent: Wednesday, May 30, 2012 12:30 PM
> To: Access Developers discussion and problem solving
> Subject: [AccessD] database in a state by Admin such that it is prevented
> from being "accessed" - to read and import its objects via automation or db
> to db
>
> I am trying to automate reference to a database, so that I can write the
> schema to an excel worksheet. What I do is look to see whatever is the
> currentdb object of the currently running instance of access, then note
> currentdb.name to get its path, then close it, and re-open it through
> automation. I TOTALLY HATE having to do that, however what I had found was
> that when I do not close the database, I get an error message about the
> database being placed in a status by user Admin which does not permit
> changes to it (including, apparently, looping through the properties of
> certain objects within the database). That is why I started closing it.
>
> However ... I came to find out that for some databases, I do not run into
> that error message.
>
> Is there a way to prevent the database, when opening, from being placed in
> that state that says others cannot access it? This would fix other problems
> I have found when, for example, I want to import tables and other objects
> from one open database into another. I often get a message from Access that
> the one I want to import FROM is placed in some state by User Admin which
> prevents its being opened.
>
> HATE that.
>
>
> TMIA....
>
> Public Sub GetMySchema()
> Dim T As Object
> Dim f As Object
> Dim Arr()
> Dim strName As String
> Dim UB As Long
> Dim DB As Object
> Dim i As Long
> Dim WS As Worksheet
>
> Set DB = GetDB   'Fetch and close the currentdb, then reopen it to be sure
> we have Admin privileges
> 'Retrieve the schema of the currentdb open in a single instance of Access
> '         I would prefer to be able to do this
> '          Set DB =
>
> GETOBJECT(,"Access.Application").GetDBEngine.Workspaces(0).OpenDatabase(strN
> ame)
>
> ReDim Arr(1 To 4, 0 To 0)
> For Each T In DB.TableDefs
>    strName = UCase(T.Name)
>  If Not InStr(strName, "MSYS") = 0 And InStr(strName, "SOLARCONNECT") = 0
> And InStr(strName, "GIBIX_") = 0 Then
>
>    For Each f In T.Fields
>      UB = UB + 1
>      If UB = 1 Then
>        ReDim Arr(1 To 4, 1 To 1)
>      Else
>        ReDim Preserve Arr(1 To 4, 1 To UB)
>      End If
>      Arr(1, UB) = T.Name
>      Arr(2, UB) = f.Name
>      Select Case f.Type
>      Case Is = 1
>        'Boolean
>        Arr(4, UB) = "NUMBER(1,0)"
>    Case Is = 4
>        Arr(4, UB) = "NUMBER(10)"
>    Case Is = 5
>        Arr(4, UB) = "NUMBER(12,2)"
>    Case Is = 7
>        Arr(4, UB) = "NUMBER(12)"
>    Case Is = 8
>        Arr(4, UB) = "DATE"
>    Case Is = 10
>        Arr(4, UB) = "VARCHAR2(" & f.Size & ")"
>    Case Is = 12
>        Arr(4, UB) = "VARCHAR2(4000)"
>    Case Is = 101
>        Arr(4, UB) = "BLOB"
>    End Select
>    Arr(3, UB) = IIf(f.Required, "NOT NULL", "")
>
>    Next
> ...
> END SUB
>
> Public Function GetDB() As Object
> Dim Ac As Object
> Dim GetDBEngine As Object
> Dim strName As String
> On Error Resume Next
> Set Ac = GetObject(, "Access.Application") If Ac Is Nothing Then
>  Exit Function
> End If
>
> 'try 120
>
>
> Set GetDBEngine = CreateObject("DAO.DBEngine.120") If Err.Number <> 0 Then
> 'try 36
>  Err.Clear
>  Set GetDBEngine = CreateObject("DAO.DBEngine.36")
>  If Err.Number <> 0 Then
>    Set GetDBEngine = CreateObject("DAO.DBEngine.35")
>  End If
> End If
> If Not GetDBEngine Is Nothing Then
>    strName = Ac.currentdb.Name
>    Ac.Quit
>    DoEvents
>    Set Ac = CreateObject("Access.Application")
>    Set GetDB = GetDBEngine.Workspaces(0).OpenDatabase(strName)
> End If
>
> End Function
>
> --
> AccessD mailing list
> AccessD at databaseadvisors.com
> http://databaseadvisors.com/mailman/listinfo/accessd
> Website: http://www.databaseadvisors.com
>
> --
> AccessD mailing list
> AccessD at databaseadvisors.com
> http://databaseadvisors.com/mailman/listinfo/accessd
> Website: http://www.databaseadvisors.com
>
-- 
AccessD mailing list
AccessD at databaseadvisors.com
http://databaseadvisors.com/mailman/listinfo/accessd
Website: http://www.databaseadvisors.com

-- 
This message has been scanned for viruses and
dangerous content by MailScanner, and is
believed to be clean.




More information about the AccessD mailing list