Drew Wutka
DWUTKA at marlow.com
Tue Sep 23 22:10:58 CDT 2003
Just a thought, I would go in one of two different directions with this. One method would be to set a Global string variable. Then when I looped through the selected items, I would add them to the string, comma delimited. Then I would build a function that returns the string, and change the query criteria to look like this: In(MyStringReturningFunction()). The other approach would be to create a global 'collection'. Then make a class to hold the ID's. Then I would add an instance of that class for each ID that is selected, and set that instance's key in the collection to the ID (if the id is numeric, the key has to be a string, so I would set it as "ID:" & MyIDField. Then I would write a public function that returned true or false if that ID was in the collection or not (you can just use error handling, and set a empty class variable to the collection with that ID, if it returns, it exists, if not, it doesn't.). I think the In() statement would be faster, especially if you have indexing on that field, where you are querrying it, because I think it can use the string in the In() clause against it's index tables, instead of having to go through each record determining if it's true or false. Drew -----Original Message----- From: David Emerson [mailto:davide at dalyn.co.nz] Sent: Tuesday, September 23, 2003 6:42 PM To: accessd at databaseadvisors.com Subject: [AccessD] Slow loop through list box I have a listbox which is used to select clients for including in reports. When the listbox is updated I have a separate text box that shows the names of the clients selected and the number selected. At the same time I store the ID's of the clients in a table that is used to filter out the required client records. The initial list box has over 1800 names. It is taking about 10 seconds to update the lists each time a client is selected. If I rem out the adding of ID's to the table then the time reduces to about 3 seconds. The main part of the code is - With Me!lstClientList For Each varItem In .ItemsSelected If .Selected(varItem) = True Then strList = strList & .Column(1, varItem) & vbCrLf ' Adds client name to selected list intClientNo = intClientNo + 1 ' Counts number of selected clients rst.AddNew 'Add client ID to table rst!CustIDNo = .Column(0, varItem) rst.Update End If Next varItem End With Any thoughts as to how I can speed up the process? The BE is SQL2000. Regards David Emerson DALYN Software Ltd 25b Cunliffe St, Johnsonville Wellington, New Zealand Ph/Fax (877) 456-1205 _______________________________________________ AccessD mailing list AccessD at databaseadvisors.com http://databaseadvisors.com/mailman/listinfo/accessd Website: http://www.databaseadvisors.com