943,955 Members | Top Members by Rank

Ad:
You are currently viewing page 1 of this multi-page discussion thread
Dec 4th, 2007
0

Finding directory of VB project dynamically

Expand Post »
If someone could tell me if there is a function or method, or some way of finding the directory that the VB project loads to when it is installed on other computers that would be great. What I want it for is so that I can save and restore a database dynamically.

Currently I am saving it to a directory that I know where it is (C:/Program Files/PortGen2.0) Which allows me to save it, but not restore it because I don't know where to load the file if something were to happen to the old one.

Any help is appreciated, some technical info is: VB 2005 Express, Access 2003 Database, and the code I am using right now for restoreDB()

Visual Basic 4 / 5 / 6 Syntax (Toggle Plain Text)
  1. Public Sub restoreDB()
  2.  
  3. Dim backupName As String
  4. Dim portfolioDBName As String = portfolioDBPath + "portfolioDB.mdb"
  5.  
  6. Dim fdlg As OpenFileDialog = New OpenFileDialog()
  7.  
  8. fdlg.InitialDirectory = portfolioDBPath + "\backup"
  9.  
  10. If fdlg.ShowDialog() = Windows.Forms.DialogResult.OK Then
  11. backupName = fdlg.FileName
  12.  
  13. If MessageBox.Show("Restoring the database will erase any changes you have made since your last backup. Are you sure you want to do this?", _
  14. "Confirm Delete", _
  15. MessageBoxButtons.OKCancel, _
  16. MessageBoxIcon.Question, _
  17. MessageBoxDefaultButton.Button2) = Windows.Forms.DialogResult.OK Then
  18. 'Restore the database from a backup copy.
  19. FileCopy(backupName, portfolioDBName)
  20.  
  21. MsgBox("Database Restoration Successful")
  22. End If
  23. End If
  24.  
  25. End Sub
Reputation Points: 10
Solved Threads: 2
Light Poster
Mr.Wobbles is offline Offline
49 posts
since Jun 2007
Dec 4th, 2007
0

Re: Finding directory of VB project dynamically

Hi Mr Wobbles (good name!)

For VB6 use: App.Path to return the application dir (eg: Open App.Path & "\MyFile.txt" For Input as #1)

For VB2005 use My.Application.Info.DirectoryPath

HTH,

Chris.
Reputation Points: 10
Solved Threads: 4
Junior Poster in Training
Chris147 is offline Offline
58 posts
since Jun 2007
Dec 5th, 2007
0

Re: Finding directory of VB project dynamically

That worked well, thanks! I don't know why I didn't see that before. (I'm not being sarcastic if it sounds that way... seriously)
Reputation Points: 10
Solved Threads: 2
Light Poster
Mr.Wobbles is offline Offline
49 posts
since Jun 2007
Dec 5th, 2007
0

Re: Finding directory of VB project dynamically

That works when I debug. However when I publish it and try to work on it as an application then i get an error message - it can't find the file. I looked and figured out it was in a different folder than the application is apparently stored in. Don't know why. So if there is a way to get the path of a the database file that would be awesome.
Reputation Points: 10
Solved Threads: 2
Light Poster
Mr.Wobbles is offline Offline
49 posts
since Jun 2007
Dec 5th, 2007
0

Re: Finding directory of VB project dynamically

Ah.

This appears to be an installation issue.

I had 2005 Express for a while, got fed up with the installer, bought the full version.

Where is the DB being installed to? Is it as a subdirectory of the application?

Chris
Reputation Points: 10
Solved Threads: 4
Junior Poster in Training
Chris147 is offline Offline
58 posts
since Jun 2007
Dec 5th, 2007
0

Re: Finding directory of VB project dynamically

The DB is installed to an alternate folder than the application directory for example:

Directory
Folder 1 = What app.path returns
Folder 2 = Where the database is at

All of the folders repeat some sort of information, but none of them have all of the information, so this one will have the database and maybe the icon or something, and another will have the icon and the forms in it, there is one folder for each of the interops that I used (word, excel and access) and a manifest folder. If none of this helps at all I can get you the real names of the folders tomorrow when I am at work again. Thanks for your help, I appreciate it.
Reputation Points: 10
Solved Threads: 2
Light Poster
Mr.Wobbles is offline Offline
49 posts
since Jun 2007
Dec 5th, 2007
0

Re: Finding directory of VB project dynamically

Quote ...
All of the folders repeat some sort of information, but none of them have all of the information, so this one will have the database and maybe the icon or something, and another will have the icon and the forms in it, there is one folder for each of the interops that I used (word, excel and

But what I recommend for dynamically finding the appropriate directory is to either store the information about the data's path in an older INI file (See the Platform SDK for Read/WritePrivateProfile) or to use the registry.

But I would declare a public variable in one of your modules to use as a reference in the program.

Visual Basic 4 / 5 / 6 Syntax (Toggle Plain Text)
  1. Public mpProgPath as String

Retrieve the value on loading:

Visual Basic 4 / 5 / 6 Syntax (Toggle Plain Text)
  1. mpProgPath = GetSetting("My Program", "StartUpValues", "AppPath", cstr(App.path))

And then, you can use that as a basis for your other directories where you have information stored:

Visual Basic 4 / 5 / 6 Syntax (Toggle Plain Text)
  1. strDB_PATH = mpProgPath & "\db"
  2. strImage_Path = mpProgPath & "\Images"
Last edited by hkdani; Dec 5th, 2007 at 7:53 pm.
Reputation Points: 49
Solved Threads: 44
Posting Pro in Training
hkdani is offline Offline
426 posts
since Nov 2007
Dec 6th, 2007
0

Re: Finding directory of VB project dynamically

Click to Expand / Collapse  Quote originally posted by Mr.Wobbles ...
If someone could tell me if there is a function or method, or some way of finding the directory that the VB project loads to when it is installed on other computers that would be great. What I want it for is so that I can save and restore a database dynamically.

Currently I am saving it to a directory that I know where it is (C:/Program Files/PortGen2.0) Which allows me to save it, but not restore it because I don't know where to load the file if something were to happen to the old one.

Any help is appreciated, some technical info is: VB 2005 Express, Access 2003 Database, and the code I am using right now for restoreDB()

Visual Basic 4 / 5 / 6 Syntax (Toggle Plain Text)
  1. Public Sub restoreDB()
  2.  
  3. Dim backupName As String
  4. Dim portfolioDBName As String = portfolioDBPath + "portfolioDB.mdb"
  5.  
  6. Dim fdlg As OpenFileDialog = New OpenFileDialog()
  7.  
  8. fdlg.InitialDirectory = portfolioDBPath + "\backup"
  9.  
  10. If fdlg.ShowDialog() = Windows.Forms.DialogResult.OK Then
  11. backupName = fdlg.FileName
  12.  
  13. If MessageBox.Show("Restoring the database will erase any changes you have made since your last backup. Are you sure you want to do this?", _
  14. "Confirm Delete", _
  15. MessageBoxButtons.OKCancel, _
  16. MessageBoxIcon.Question, _
  17. MessageBoxDefaultButton.Button2) = Windows.Forms.DialogResult.OK Then
  18. 'Restore the database from a backup copy.
  19. FileCopy(backupName, portfolioDBName)
  20.  
  21. MsgBox("Database Restoration Successful")
  22. End If
  23. End If
  24.  
  25. End Sub
Hi Wobbles,
Try to do this for to find the directory .If you find the directory dynamically then pass the address at the run time .
Visual Basic 4 / 5 / 6 Syntax (Toggle Plain Text)
  1. Dim objFSO, objFolder, objShell, objTextFile, objFile
  2. Dim strDirectory, strFile, strText
  3. strDirectory = "d:\gb nair"
  4. strFile = "\Summer.txt"
  5. strText = "Book Another Holiday"
  6.  
  7. ' Create the File System Object
  8. Set objFSO = CreateObject("Scripting.FileSystemObject")
  9.  
  10. ' Check that the strDirectory folder exists
  11. If objFSO.FolderExists(strDirectory) Then
  12. Set objFolder = objFSO.GetFolder(strDirectory)
  13. Else
  14. Set objFolder = objFSO.CreateFolder(strDirectory)
  15. WScript.echo "Just created " & strDirectory
  16. End If
  17.  
  18. If objFSO.FileExists(strDirectory & strFile) Then
  19. Set objFolder = objFSO.GetFolder(strDirectory)
  20. Else
  21. Set objFile = objFSO.CreateTextFile(strDirectory & strFile)
  22. WScript.echo "Just created " & strDirectory & strFile
  23. End If
  24.  
  25. Set objFile = Nothing
  26. Set objFolder = Nothing
  27. ' OpenTextFile Method needs a Const value
  28. ' ForAppending = 8 ForReading = 1, ForWriting = 2
  29. Const ForAppending = 8
  30.  
  31. Set objTextFile = objFSO.OpenTextFile _
  32. (strDirectory & strFile, ForAppending, True)
  33.  
  34. ' Writes strText every time you run this VBScript
  35. objTextFile.WriteLine (strText)
  36. objTextFile.Close
  37.  
  38. ' Bonus or cosmetic section to launch explorer to check file
  39. If Err.Number = vbEmpty Then
  40. Set objShell = CreateObject("WScript.Shell")
  41. objShell.Run ("Explorer" & " " & strDirectory & "\")
  42. Else: WScript.echo "VBScript Error: " & Err.Number
  43. End If
  44.  
  45. WScript.Quit
Last edited by cscgal; Dec 6th, 2007 at 2:32 pm. Reason: Added code tags
Reputation Points: 10
Solved Threads: 0
Newbie Poster
gireeshb22 is offline Offline
3 posts
since Dec 2007
Dec 6th, 2007
0

Re: Finding directory of VB project dynamically

hkdani - the only potential problem I can see with that is my database is in a different folder than what app.path return, the folders that each are in are in the same location, also I can't really go up a directory and specify the folder name because every time I install them then the folder names change - don't know why. I am going to try this anyway, in case I am reading it incorrectly.

gireeshb22 - Not exactly sure about that - maybe I am not understanding but from what I can tell if the file doesn't exist in the specified directory it is created - only problem with that is it is a database and it has to have tables, etc and if I do create it there then I will also have to figure out how to attach it to the program from wherever i create it at. If I am wrong please let me know because some of the functions I am only guessing at what they do.
Reputation Points: 10
Solved Threads: 2
Light Poster
Mr.Wobbles is offline Offline
49 posts
since Jun 2007
Dec 6th, 2007
0

Re: Finding directory of VB project dynamically

Ok, from your post it looks like the Application Folder is in the same folder as the DB Folder.

You can use string manipulation to get the parent folder of your App.Path (use a Do.. ..While Loop and set the string length = to string length until last character = "\" - I think there's a property in FSO that will do this as well, could be GetParentFolder or GetParentDIR or similar)

Once you have the Parent Folder you can use a For.. ..Next Loop to look for your DB:

Visual Basic 4 / 5 / 6 Syntax (Toggle Plain Text)
  1. Private Sub cmdFiles_Click()
  2. MsgBox GetDBLocation
  3. End Sub
  4.  
  5. Private Function GetDBLocation() As String
  6. Dim strDBLocation As String
  7. Dim fso As New FileSystemObject
  8. Dim fldrs As Folder
  9. Dim fldr As Folder
  10. Dim fle As File
  11. Set fldrs = fso.GetFolder("C:\Program Files")
  12. For Each fldr In fldrs.SubFolders
  13. For Each fle In fldr.Files
  14. If fle.ShortName = "YOUR DB NAME" Then
  15. strDBLocation = fle.Name
  16. Goto ExitHere
  17. End If
  18. Next fle
  19. Next fldr
  20. ExitHere:
  21. Set fldrs = Nothing
  22. Set fso = Nothing
  23. If Len(strDBLocation) > 0 Then
  24. GetDBLocation = strDBLocation
  25. Else
  26. GetDBLocation = "Oops! Can't find the DB"
  27. End If
  28. End Function
Reputation Points: 10
Solved Threads: 4
Junior Poster in Training
Chris147 is offline Offline
58 posts
since Jun 2007

This thread is more than three months old

No one has posted to this discussion for at least three months. Please let old threads die and do not reply to them unless you feel you have something new and valuable to contribute that absolutely must be added to make the discussion complete. Otherwise, please start a new thread in this forum instead.
Message:
Previous Thread in Visual Basic 4 / 5 / 6 Forum Timeline: computer clock
Next Thread in Visual Basic 4 / 5 / 6 Forum Timeline: Control or Object (Other than MDI Form) In vb 6.0 which can hold a Form





About Us | Contact Us | Advertise | Acceptable Use Policy
Forum Index | Build Custom RSS Feed


Follow us on Twitter


© 2011 DaniWeb® LLC