Jurgen Welz
jwelz at hotmail.com
Mon Jan 22 14:22:44 CST 2007
Martin: Are you implying that I am incomprehensible? Obtuse? Clearly I have failed in my explanation. How about you paste the code below in a module: Sub VirtualRecordSet(strFilePath As String) Dim db As DAO.Database Dim lngI As Long Dim strFileName As String Dim strSql As String Set db = CurrentDb strFileName = Dir(strFilePath) If Len(strFileName) Then strSql = " Select '" Do While Len(strFileName) strSql = strSql & strFileName & "' As FileName, '" strSql = strSql & FileDateTime(strFilePath & strFileName) & "' As FileDate, '" strSql = strSql & FileLen(strFilePath & strFileName) & "' As FileSize >From MSysQueries Union Select '" lngI = lngI + 1 If lngI = 50 Then Exit Do strFileName = Dir Loop strSql = Mid$(strSql, 1, Len(strSql) - 15) End If db.QueryDefs("qryFileList").SQL = strSql DoCmd.OpenQuery "qryFileList" db.Close Set db = Nothing End Sub Copy any query in your application, or make a new one and name it 'qryFileList'. This step is for demonstration purposes only. If you use the code to poplulate a list box, you can set the rowsource to the strSql variable and skip using a querydef entirely. Then run the code below from the debug window: virtualrecordset "C:\" and have a look at the query in the MSAccess window. You will see a list of files in the directory passed as a parameter together with file date and size information. The example uses the internal hidden MSysQueries table, but you can use any table in your database. It makes no difference what the field names are or how many records there are in the table. The code in the example aborts at 50 file names max due to Query length limitations and it may not work if you have a pile of really long file names in a selected target folder parameter. You'll get some errors if you use a drive letter that doesn't exist as well. You may want to use a debug.print in the code to watch the virtual recordset generated and of course, you can examine the SQL string of the query in design mode. Although the example doesn't acutally use an array, that could have been added as an intermediate step. If you would like, I can fill in the details of that as well. Hopefully this example makes the concept clearer than my words. It is slightly modified from a version I wrote in 1998 demonstrating file list functionality and comparing a number of methods of populating the list that included a callback method that doesn't run into the query string length limitation. In practical terms, it is possible to set up a procedure that relies on a virtual recordset and only goes to a temp table when the string length is excessive. If temp tables are on a remote server, this approach is significantly faster than populating and then querying that table over a network. Also, this approach is a slick way of setting up a few rows to join to a master table to return a highly customizable junction. I have also used virtual recordsets for things such as returning logged in user names, available drives and other such data that depend on a constantly changing environment. Usually, this type of data is displayed in lists and for this purpose, I nearly always use callback functions instead. Still, it is kind of fun to use as a recordsource for a form. Hopefully I haven't muddied the waters further... Ciao Jürgen Welz Edmonton, Alberta jwelz at hotmail.com >From: "Martin Reid" <mwp.reid at qub.ac.uk> > >Still dont understand your posts Jurgen but nice to see you back. > >Martin > >Martin WP Reid >Training and Assessment Unit >Riddle Hall >Belfast > >tel: 02890 974477 > >-- >AccessD mailing list >AccessD at databaseadvisors.com >http://databaseadvisors.com/mailman/listinfo/accessd >Website: http://www.databaseadvisors.com _________________________________________________________________ Your Space. Your Friends. Your Stories. Share your world with Windows Live Spaces. http://discoverspaces.live.com/?loc=en-CA