Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Работа с данными

Страница: 1 |

 

  Вопрос: Массив и RecordSet Добавлено: 20.11.03 19:18  

Автор вопроса:  cresta
Как можно заставить RecordSet работаь без DataGrid так же быстро, как и с ним?
Поясню вопрос:
DataGrid, связанный с RecordSet, заполняется за 1,5 сек.
Пытаюсь заполнить массив значениями из RecordSet - время возрастает до 24 сек
(неприемлимая величина)
Выяснил, что львиная доля задержки приходится на RecordSet.MoveNext(22 сек
без считывания в массив, просто голый цикл от 0 до RS.RecordCount)
Может, кто-нибудь знает как заставить массив получить значения из RecordSet так же
быстро, как и DataGrid???
Заранее благодарен за помощь.

Ответить

  Ответы Всего ответов: 4  

Номер ответа: 1
Автор ответа:
 Emigrant



Вопросов: 7
Ответов: 22
 Профиль | | #1 Добавлено: 20.11.03 21:21

Какое количнство записей имеешь?

Ответить

Номер ответа: 2
Автор ответа:
 cresta



Вопросов: 117
Ответов: 1538
 Профиль | | #2 Добавлено: 20.11.03 23:17

минимум 50000 максимум 80000.

В общем добился результата 2 сек для 50000

использовал переменную типа Variant как массив   и метод GetRows объекта RecordSet

varDataRows = RS.GetRows(recCount),

и затем TreeView заполняю:

TV.Nodes.Add , , Trim$(CStr(varDataRows(1, i))), Trim$(CStr(varDataRows(1, i))), 2, 3

2 сек в принципе уже нормально, хотя аппетит приходит всегда не кстати

Ответить

Номер ответа: 3
Автор ответа:
 Emigrant



Вопросов: 7
Ответов: 22
 Профиль | | #3 Добавлено: 21.11.03 00:11

Слушай, а зачем ты выводишь в TreeView? Не проще ли в ListView. Добавляешь VScroll.

dim db as dao.database

dim rst as dao.recordset

set db=opendatabase(path and name)

set rst =db.openrecordset(name table with query)

rst.movelast

if err<>3021 then

rst.MoveFirst
rst.Move (VScroll1.Value)

for z=0 to rst.recordcount-1

ListViewEv.ListItems.Add z + 1, "", VScroll1.Value + z + 1
        ListViewEv.ListItems(z + 1).ForeColor = rst!Color
          
        ListViewEv.ListItems(z + 1).SubItems(1) = rst!Name
        ListViewEv.ListItems(z + 1).SubItems(2) = rst!Adress
       rst.movenext

next z

end if

Ответить

Номер ответа: 4
Автор ответа:
 cresta



Вопросов: 117
Ответов: 1538
 Профиль | | #4 Добавлено: 21.11.03 00:41
Да я использую и Tree  и  List, есть 50000 наименований, я их сортирую в 500 разных папок(это TreeView), по 100 в каждой(ListView)  а по событию NodeClick  уже раскрываю конкретную папку. Просто задача была распихать все пункты куда надо т.е. сформировать категории. А код посмотрю, может ещё быстрее получится.Спасибо

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам