rickyojr
February 25th, 2000, 12:24 AM
Is there a way to speed up the transfer the records from a recordset to a list view object?
|
Click to See Complete Forum and Search --> : OPtimize speed in transferring data to a listview rickyojr February 25th, 2000, 12:24 AM Is there a way to speed up the transfer the records from a recordset to a list view object? Serge_D February 25th, 2000, 03:47 PM You can use LockWindowUpdate API to stop any drawings in that ListView that will definetely will speed up the loading process. Here is an example: private Declare Function LockWindowUpdate Lib "user32" (byval hwndLock as Long) as Long private Sub Command1_Click() Dim rs as new ADODB.Recordset Dim xItem as ListItem 'I'm assuming that you already have recordset object opened 'with the appropriate records LockWindowUpdate ListView1.hWnd Do Until rs.EOF set xItem = ListView1.ListItems.Add(, , rs("MyField")) rs.MoveNext Loop 'Unlock ListView LockWindowUpdate 0 End Sub Serge Programmer Analyst SergeDymkov@hotmail.com Ravi Kiran February 26th, 2000, 12:26 AM LockWindowUpdate sometimes gives a flicker on the Desktop ( 0n WIn95), when released. (ie called with NULL )!. so check it out.. There are a couple of things you could try. If you have set the Sorted Property to TRUE, then each time you add a item, it tries to find out the correct place it fits in the list. So, if you are going to add a lot of records in one go, it would increase speed by first set the sorted property to false, a dd all recs in one go, and then set it to true . (the list will comeout correct anyway) II. You can try some kind of "Background" processing. Add few records, then add more with occassionally giving up control with DOEvents. set up visual indications that you are doing so. This type of programing requires that you do it correclty. when the process is still on, you will set a flag, and every where you wil check for that flag to be on before proceesing. A little out of place here, but i am giving some code i have at hand, which does this kind of a thing. Process a big file ( >5MB on most occasions) for Jpeg markers, and fill a list box with hits and with set of bytes after the marker: ... nBaM = CInt(txtBytesToDisp.Text) ' no. of bytes after marker. nl = UBound(m_cFileBuf) ' array size = file length lstJpgMarker.Clear nl = IIf(twobytes, nl - 1, nl) ' for two byte processing case Screen.MousePointer = vbHourglass for ii = 0 to nl - 1 If twobytes = false then addit = IIf(m_cFileBuf(ii) = cMarker(0), true, false) else addit = IIf((m_cFileBuf(ii) = cMarker(0)) And _ (m_cFileBuf(ii + 1) = cMarker(1)), true, false) End If If addit then lststr = vbNullString nBaM = IIf(ii + nBaM > nl - 1, nl - 1 - ii, nBaM) for jj = ii to ii + nBaM lststr = lststr & " " & Hex$(m_cFileBuf(jj)) & " " next jj lstJpgMarker.AddItem txtJpgMarker.Text & "@" & Str(ii) & "," & lststr lblNMarkers.Caption = Str(ii) & "/" & Str(nl - 1) If lstJpgMarker.NewIndex >= 30 then Screen.MousePointer = vbArrowHourglass If lstJpgMarker.NewIndex Mod 10 = 0 then DoEvents End If else DoEvents If bstopfill then Exit for End If End If next ii lblNMarkers.Caption = Str(lstJpgMarker.ListCount) Screen.MousePointer = vbDefault Exit Sub ... More to point: check the bold section. First i add 30 items w/o much ado, then change the cursor to Arror + Hourglass, to indicate that things are going on in the bg ( which also would be evident by scroll bar flicker and decreasing Scroll-bar tab, anyway) While things are being added you can scroll the list and it has "stop" support too. This section is not 100% fool-proof ( if i close the form, while the proc. is On the program will throw-up!) RK rickyojr February 27th, 2000, 10:38 PM Thanks I'll try It codeguru.com
Copyright Internet.com Inc., All Rights Reserved. |