Что можно придумать вместо ДатаСет ?

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
student-uni
Бывалый
Бывалый
 
Сообщения: 242
Зарегистрирован: 01.10.2005 (Сб) 18:54

Что можно придумать вместо ДатаСет ?

Сообщение student-uni » 19.11.2007 (Пн) 11:48

в .НЕТ я бы выкачал данные в ДатаСет и потом с ними работал.

в ВБ 6 я попоробовал создать структуру с необходимыми типами полеи как в базе данных
и заполняю массив таких структур с помощю рекордсет

Но длится это необычаино долго. Напр 300 000 записеи вынимаются до 20 минут в завсти от загрузки СКЛ-Сервера (2000)

Вопрос:
кто может что посоветовать для ускорения выборки данных
Код прилагается

Спасибо
Код: Выделить всё
'вот структура, определена в отдельном модуле
Public Type KnrPlz
    Knr As Long
    PLZ As String
End Type

'а это текст доступа к бд

   Dim KnrPlzCount, index As Long ' indexes

    Dim sSQL As String
    Dim con As ADODB.Connection
    Dim rst As ADODB.Recordset
    Set con = New ADODB.Connection
    Set rst = New ADODB.Recordset
    Set con = New ADODB.Connection
    Set rst = New ADODB.Recordset
    con.CommandTimeout = 40
    con.ConnectionString = sADODSN
    con.Mode = adModeReadWrite
    con.Open

' это запрос
    sSQL = " SELECT  * FROM ... "

'отрываем рекордсет и пробегаем его доконца
rst.Open sSQL, con, adOpenStatic, adLockOptimistic

узнаем число записеи в РекордСете
KnrPlzCount = rst.RecordCount

создаем экземпляр нашеи структуры, точнее массив такого типа
Dim KPE() As KnrPlz

переопределяем размер, чтоб поместить все записи
ReDim KPE(KnrPlzCount)

'рекордсет пробегаем доконца
If rst.EOF Then
       
    Else
        While Not rst.EOF
'достаем значения полеи в записи и присваиваем их елементам структуры
                KPE(index).PLZ = CStr(rst!PLZ)
                KPE(index).Knr = CLng(rst!Nr)             
                index = index + 1
                rst.MoveNext
        Wend
    End If
   
    rst.Close
    con.Close
    Set con = Nothing

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 19.11.2007 (Пн) 12:10

А зачем перегонять данные из рекордсета в структуру?
Почему бы не использовать рекордсет?
Lasciate ogni speranza, voi ch'entrate.

student-uni
Бывалый
Бывалый
 
Сообщения: 242
Зарегистрирован: 01.10.2005 (Сб) 18:54

Сообщение student-uni » 19.11.2007 (Пн) 12:18

Мне нужно выбрать данные по сложному критерию
1. Столбцов в оригинале значительно больше
2. Далее я Работаю с массивом структур и не трогаю больше базу данных.
3. Мне необходимо набрать из данных определенное количество удовлетворяющее неким условиям
и если их не хватило вновь проитись по данным и добрать недостаюшее количество ослабив критерии.
Если я все ето буду делать на открытом соединении - программа вообше умрет.
Поетому я сначала копирую данные в массив структур и дальше делаю с ним все что хочу
Но как сказано, процесс копирования в массив структур занимает тоже много времени
Вопрос - может я что не так делаю ? Может есть в ВБ6 более красивое средство ?
Спасибо

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 19.11.2007 (Пн) 12:21

Используй отвязанный рекордсет.
Lasciate ogni speranza, voi ch'entrate.

student-uni
Бывалый
Бывалый
 
Сообщения: 242
Зарегистрирован: 01.10.2005 (Сб) 18:54

Сообщение student-uni » 19.11.2007 (Пн) 12:23

Подскажите а как ето по Англииски

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 19.11.2007 (Пн) 13:35

После того, как рекордсет будет открыт, сделай Set rs.ActiveConnection = Nothing. Естественно, рекордсет будет клиентским.
После этого используй Find или Filter для поиска (желательно поля, по которым будет осуществляться поиск, проиндексировать).
Lasciate ogni speranza, voi ch'entrate.


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 59

    TopList  
cron