?
Solved

Mark Multiple Databases as Read Only at one time with VB

Posted on 2013-11-22
15
Medium Priority
?
382 Views
Last Modified: 2013-11-26
Hello - What would code look like for me to set properties of multiple db's to Read Only at one time?  

For example, if I have a "Set Read Only" db that stored code I could run...and have it mark DB1, DB2, and DB3 as read only...?
0
Comment
Question by:CyHill
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
  • 5
  • 5
  • 5
15 Comments
 
LVL 13

Expert Comment

by:Surone1
ID: 39671288
just to be clear you want to set the read-only filesystem property of multiple .mdb files?
0
 
LVL 46

Expert Comment

by:aikimark
ID: 39672933
You can do this with one Attrib command, since it allows you to use wildcards.

You can easily invoke this with the Shell function or using the Wscript.shell object's Run method.
0
 
LVL 13

Expert Comment

by:Surone1
ID: 39673467
i would have suggested Scripting.FileSystemObject but work got in the way. if you need details on how to make either of those work let us know.
0
VIDEO: THE CONCERTO CLOUD FOR HEALTHCARE

Modern healthcare requires a modern cloud. View this brief video to understand how the Concerto Cloud for Healthcare can help your organization.

 

Author Comment

by:CyHill
ID: 39675339
Okay...that helps to get me going.  I've never modified file properties in VB before, so this function is new to me.  

Would the code look something like this (see below)?  Feel free to simplify if I've added in things that are not necessary.
Function ToggleReadOnly()
   Dim fso, f
   Set fso = CreateObject("Scripting.FileSystemObject")
   Set f = fso.GetFile(c:\DB1)
   If f.attributes and 1 Then
      f.attributes = f.attributes - 1
      ToggleReadOnly = "Databases are Read/Write."
   Else
      f.attributes = f.attributes + 1
      ToggleReadOnly = "Databases are Read Only."
   End If
End Function

Open in new window

0
 
LVL 13

Accepted Solution

by:
Surone1 earned 800 total points
ID: 39675391
that code will make it read write if it is read only and read only if it is read write.
the filename should be between quotes as it is a string.

to just make it read only without checking:

 Set fso = CreateObject("Scripting.FileSystemObject")
    Set f = fso.GetFile("c:\DB1.mdb")
    f.Attributes = f.Attributes + 1
    Set f = Nothing
  Set f = fso.GetFile("c:\DB2.mdb")
    f.Attributes = f.Attributes + 1
    Set f = Nothing
   Set fso = Nothing
0
 

Author Comment

by:CyHill
ID: 39675438
Great - Thanks!

I will play with that today and to verify it works for me.

Question: If I wanted to make a second function to make teh databases read/write without checking (so basically the opposite of the other function)...would I simply change the line of code listed as "f.Attributes = f.Attributes + 1" (READ ONLY method) to "f.Attributes = f.Attributes -1" (READ WRITE method???)  Changing the "+ 1" to a "- 1"?  Would that do the trick?
0
 
LVL 13

Expert Comment

by:Surone1
ID: 39675445
yes it should
0
 
LVL 46

Expert Comment

by:aikimark
ID: 39675729
Beware that if you run this against the same set of files twice, you will remove the read-only attribute.
0
 
LVL 13

Expert Comment

by:Surone1
ID: 39675765
aikimark is right. it also seems to affect the hidden property so we put the check back in:



 Set fso = CreateObject("Scripting.FileSystemObject")
    Set f = fso.GetFile("c:\DB1.mdb")
 If f.Attributes And 1 Then
       Else
    f.Attributes = f.Attributes + 1
end if
    Set f = Nothing
  Set f = fso.GetFile("c:\DB2.mdb")
 If f.Attributes And 1 Then
       Else
    f.Attributes = f.Attributes + 1
end if
    Set f = Nothing
   Set fso = Nothing


and



 Set fso = CreateObject("Scripting.FileSystemObject")
    Set f = fso.GetFile("c:\DB1.mdb")
 If f.Attributes And 1 Then
  f.Attributes = f.Attributes - 1
       Else
 
end if
    Set f = Nothing
  Set f = fso.GetFile("c:\DB2.mdb")
 If f.Attributes And 1 Then
  f.Attributes = f.Attributes - 1
       Else
   
end if
    Set f = Nothing
   Set fso = Nothing
0
 

Author Comment

by:CyHill
ID: 39675791
Yeah...I noticed that it wanted to mark the DBs hidden if I ran it more than once.  

Below is what I came up with...instead of adding or subtracting a number to the exisitng Attritbute property...just set it to the settign I want (e.g. from  f.Attributes = f.Attributes + 1 to  f.Attributes = 1)

Do you see any reason why this will not work?  Seems to work when testing.


Function DBS_ReadOnly()
Set fso = CreateObject("Scripting.FileSystemObject")
    Set f = fso.GetFile("H:\TEST\db1.accdb")
    f.Attributes = 1
    Set f = Nothing
  Set f = fso.GetFile("H:\TEST\db2.accdb ")
    f.Attributes = 1
   Set fso = Nothing
End Function

Function DBS_ReadWrite()
Set fso = CreateObject("Scripting.FileSystemObject")
    Set f = fso.GetFile("H:\TEST\db1.accdb")
    f.Attributes = 0
    Set f = Nothing
  Set f = fso.GetFile("H:\TEST\db2.accdb ")
    f.Attributes = 0
    Set f = Nothing
   Set fso = Nothing
End Function

Open in new window

0
 
LVL 46

Expert Comment

by:aikimark
ID: 39675846
Instead of using addition, use the AND boolean operator to flip the one bit.

Have you considered my suggestion of the use of the Attrib command?
0
 

Author Comment

by:CyHill
ID: 39675896
aikimark - is there a reason why this wouldn't work...or is not a "correct" option to go with?  

settign the attribute to the exact setting I want (e.g. Attributes = 1 or Attributes = 0)?  


Function DBS_ReadOnly()
Set fso = CreateObject("Scripting.FileSystemObject")
    Set f = fso.GetFile("H:\TEST\db1.accdb")
    f.Attributes = 1
    Set f = Nothing
  Set f = fso.GetFile("H:\TEST\db2.accdb ")
    f.Attributes = 1
   Set fso = Nothing
End Function

Function DBS_ReadWrite()
Set fso = CreateObject("Scripting.FileSystemObject")
    Set f = fso.GetFile("H:\TEST\db1.accdb")
    f.Attributes = 0
    Set f = Nothing
  Set f = fso.GetFile("H:\TEST\db2.accdb ")
    f.Attributes = 0
    Set f = Nothing
   Set fso = Nothing
End Function
0
 
LVL 46

Expert Comment

by:aikimark
ID: 39675955
As written, you are setting the Attributes of these files without any regard to other attributes, such as archive-needed.

Earlier comment correction:  The OR boolean operator should be used, not the AND operator.
0
 

Author Comment

by:CyHill
ID: 39679507
aikimark - can you show me an example of what the code would look like if using the Attrib command?
0
 
LVL 46

Expert Comment

by:aikimark
ID: 39679762
attrib +r H:\TEST\db*.accdb

Open in new window

0

Featured Post

What does it mean to be "Always On"?

Is your cloud always on? With an Always On cloud you won't have to worry about downtime for maintenance or software application code updates, ensuring that your bottom line isn't affected.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

In earlier versions of Windows (XP and before), you could drag a database to the taskbar, where it would appear as a taskbar icon to open that database.  This article shows how to recreate this functionality in Windows 7 through 10.
Microsoft Access is a place to store data within tables and represent this stored data using multiple database objects such as in form of macros, forms, reports, etc. After a MS Access database is created there is need to improve the performance and…
In Microsoft Access, learn the trick to repeating sub-report headings at the top of each page. The problem with sub-reports and headings: Add a dummy group to the sub report using the expression =1: Set the “Repeat Section” property of the dummy…
With Microsoft Access, learn how to specify relationships between tables and set various options on the relationship. Add the tables: Create the relationship: Decide if you’re going to set referential integrity: Decide if you want cascade upda…
Suggested Courses

777 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question