Jurgen Welz
jwelz at hotmail.com
Mon Aug 17 11:58:08 CDT 2009
Our users are advised not to use their desktops for file storage on our network as these folders are not backed up. For that reason I've found it best to create the save path on the fly. Generally the path will be based on the user name, a table name and PK or some other determinate string. When users accidentally drag entire folder trees to different locations you need to create the full path to guarantee it exists. I generally create files of the same type with names that have an incrementing version suffix or a date stamp in the name except in those cases where it is important that there is only one file. An example would be an invoicing workbook with a sheet added each month for invoices issued that month. Multiple revisions of an invoice document would get a name with a claim number suffix followed by a hyphen and then a two digit version number suffix. Since the path is determinate, I give users a button to open a folder for files related to the user or record and they can deal with the names beyond what the system provides. Prior to killing a file, I generally try to open it exclusive or rename it to a name that you verify doesn't exist. If renaming or opening exclusive fails you will get an error along the lines of trying to delete a file that is open anyway so this approach doesn't get you much further in the error handling department. You'd be suprised how often the user himelf has a file open when he tries to delete it. After verifying the file is there and not open, the file goes to the recycle bin. Public Declare Function SHFileOperationA Lib "shell32.dll" (lpFileOp As FileOpStruct) As Long 'structure for the call to the Recycle operation Private Type FileOpStruct hwnd As Long wFunc As Long pFrom As String pTo As String fFlags As Integer fAborted As Boolean hNameMaps As Long sProgressTitle As String End Type 'strFileName is the full path and name Public Function Recycle(strFileName As String) As Boolean Dim Killed As FileOpStruct If Len(Dir(strFileName)) Then With Killed .wFunc = 3 .pFrom = strFileName & vbNullChar .fFlags = 80 End With Recycle = SHFileOperationA(Killed) = 0 End If End Function Public Function fnFileIsOpen(ByVal strFileName As String) As Boolean On Error GoTo ErrorHandler Dim intFileHandle As Integer intFileHandle = FreeFile() Open strFileName For Input Lock Read As intFileHandle fnFileIsOpen = False ExitRoutine: On Error Resume Next Close intFileHandle Exit Function ErrorHandler: fnFileIsOpen = True Resume ExitRoutine End Function Ciao Jürgen Welz Edmonton, Alberta jwelz at hotmail.com > From: rockysmolin at bchacc.com > To: accessd at databaseadvisors.com > Date: Sun, 16 Aug 2009 15:09:48 -0700 > Subject: Re: [AccessD] A Matter of Killing > > Into the library it goes! Desktop is never easy to find. > > Rocky > > > -----Original Message----- > From: accessd-bounces at databaseadvisors.com > [mailto:accessd-bounces at databaseadvisors.com] On Behalf Of Stuart McLachlan > Sent: Sunday, August 16, 2009 3:02 PM > To: Access Developers discussion and problem solving > Subject: Re: [AccessD] A Matter of Killing > > On 16 Aug 2009 at 14:26, Rocky Smolin wrote: > > > I could get around even that possibility by changing gstrBackEndPath > > to gstrFrontEndPath - another handy global I keep around for just such > > application. I'll have to ask the user what they prefer. User's in > > Bahrain, BTW - another 'remote' location. _________________________________________________________________ Stay on top of things, check email from other accounts! http://go.microsoft.com/?linkid=9671355