Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Ограничен ли Listbox по количеству выводимых строк? / 13 сообщений из 13, страница 1 из 1
12.03.2010, 18:50
    #36517534
bubek
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ограничен ли Listbox по количеству выводимых строк?
А у листбокса есть ограничение по количеству строк? Загрузил в него 34000 записей и теперь его Listcount возврашает -31812 ))) что может быть?
...
Рейтинг: 0 / 0
12.03.2010, 19:24
    #36517572
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ограничен ли Listbox по количеству выводимых строк?
bubekА у листбокса есть ограничение по количеству строк? Загрузил в него 34000 записей и теперь его Listcount возврашает -31812 ))) что может быть?

Индекс листбокса имеет тип Integer
Integer variables are stored as 16-bit (2-byte) numbers ranging in value from -32,768 to 32,767

то есть после числа 32768 он уходит в область отрицательных чисел
Если попытаетесь засунуть 65536 записей - будет overflow
...
Рейтинг: 0 / 0
12.03.2010, 19:44
    #36517594
bubek
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ограничен ли Listbox по количеству выводимых строк?
Shocker.Pro,

Ясно. Значит пока еще можно слепить формулу и манипулировать данными?
...
Рейтинг: 0 / 0
12.03.2010, 20:04
    #36517614
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ограничен ли Listbox по количеству выводимых строк?
bubekShocker.Pro,

Ясно. Значит пока еще можно слепить формулу и манипулировать данными?

Плохо себе представляю.

А еще плохо себе представляю, зачем понадобилось столько грузить в листбокс. Обычно манипуляции большим объемом данных решаются иначе: страничным пролистыванием, фильтрами....
...
Рейтинг: 0 / 0
12.03.2010, 20:18
    #36517631
bubek
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ограничен ли Listbox по количеству выводимых строк?
Shocker.Pro,

Обычно манипуляции большим объемом данных решаются иначе: страничным пролистыванием, фильтрами....

А это как?

Спасибо!
...
Рейтинг: 0 / 0
12.03.2010, 21:42
    #36517726
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ограничен ли Listbox по количеству выводимых строк?
Что как?

пример страничного пролистывания
все 12 тыщ топиков не выводятся на один экран

Фильтр - это фильтр. Выводится не все, а только то, что соответствует критериям.
например

Как частный случай - категоризация:
пример
слева дерево, справа топик
...
Рейтинг: 0 / 0
12.03.2010, 22:12
    #36517760
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ограничен ли Listbox по количеству выводимых строк?
В любом случае ДЛЯ ПОЛЬЗОВАТЕЛЯ наличие 30 тыщ строк в листбоке - бесполезная функция сама по себе. Ибо он все равно не сможет там толком ничего найти и выбрать.
...
Рейтинг: 0 / 0
13.03.2010, 07:10
    #36517974
bubek
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ограничен ли Listbox по количеству выводимых строк?
Shocker.Pro,
В итоге раздел магазина закончил, спасибо!

Выводить все непроданные номера из БД в листбокс надо, чтобы их продать.Точнее чтобы продавец видел, какой диапазон продать. Приложил скриншот раздела продажи. При выботе оператора связи выходят только его номера в листбокс.
Можешь еще посмотреть нижеследующий код продажи? Тут если продаешь более 500 номеров за раз, то идет задержка (надо ждать итога). Может посоветуешь, как его оптимизировать для производительности?

Private Sub cmdApprove_Click()
If Adodc1.Recordset.RecordCount <> 0 Then ' проверить БД на пустоту
Adodc1.Recordset.MoveFirst
If cmbDiler.Text <> "" And txtPrice.Text <> "" And lstSoldSIMs.ListCount <> 0 _
Or chkCash.Value = Checked Or chkNoCash.Value = Checked Then

For j = 0 To lstSoldSIMs.ListCount
Adodc1.Recordset.MoveFirst
For i = 0 To Adodc1.Recordset.RecordCount - 1
If Trim(Adodc1.Recordset("num")) = Val(lstSoldSIMs.List(j)) Then
Adodc1.Recordset("diler") = cmbDiler.Text
Adodc1.Recordset("datesold") = Date
Adodc1.Recordset("price") = txtPrice
Adodc1.Recordset("status") = "1"
'проверка вида оплать (полная, либо долг)
If chkCash.Value = Checked Then
Adodc1.Recordset("nodebt") = 1
ElseIf chkNoCash.Value = Checked Then
Adodc1.Recordset("fulldebt") = 1
End If
'конец проверки вида оплать (полная, либо долг)
Exit For
End If
Adodc1.Recordset.MoveNext
Next i
Next j
MsgBox "Покупка произведена успешно."
lstSoldSIMs.Clear
Else
MsgBox "Пожалуйста, заполните все данные."
End If
End If ' конец проверки БД на пустоту
End Sub

Заранее спасибо!
...
Рейтинг: 0 / 0
13.03.2010, 12:16
    #36518096
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ограничен ли Listbox по количеству выводимых строк?
можно было бы уже и научится пользоваться тэгом оформления кода....

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
Private Sub cmdApprove_Click()
If Adodc1.Recordset.RecordCount <>  0  Then ' проверить БД на пустоту
    Adodc1.Recordset.MoveFirst
If cmbDiler.Text <> "" And txtPrice.Text <> "" And lstSoldSIMs.ListCount <>  0  _
Or chkCash.Value = Checked Or chkNoCash.Value = Checked Then

For j =  0  To lstSoldSIMs.ListCount
    Adodc1.Recordset.MoveFirst
For i =  0  To Adodc1.Recordset.RecordCount -  1 
If Trim(Adodc1.Recordset("num")) = Val(lstSoldSIMs.List(j)) Then
    Adodc1.Recordset("diler") = cmbDiler.Text
    Adodc1.Recordset("datesold") = Date
    Adodc1.Recordset("price") = txtPrice
    Adodc1.Recordset("status") = "1"
        'проверка вида оплать (полная, либо долг)
        If chkCash.Value = Checked Then
            Adodc1.Recordset("nodebt") =  1 
        ElseIf chkNoCash.Value = Checked Then
            Adodc1.Recordset("fulldebt") =  1 
        End If
        'конец проверки вида оплать (полная, либо долг)
    Exit For
End If
    Adodc1.Recordset.MoveNext
Next i
Next j
    MsgBox "Покупка произведена успешно."
    lstSoldSIMs.Clear
Else
    MsgBox "Пожалуйста, заполните все данные."
End If
    End If ' конец проверки БД на пустоту
End Sub
...
Рейтинг: 0 / 0
13.03.2010, 12:17
    #36518097
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ограничен ли Listbox по количеству выводимых строк?
можно было бы уже и научится пользоваться тэгом оформления кода....

а еще рекомендую правильное форматирование вложенных условий и циклов для лучшего понимания, особенно посторонним программистом (каждое закрытие цикла и условия на одном уровне с открытием, вложенные команды с отступом и на одном уровне). Это также попмогает избежать логических ошибок.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
Private Sub cmdApprove_Click()
If Adodc1.Recordset.RecordCount <>  0  Then ' проверить БД на пустоту
  Adodc1.Recordset.MoveFirst
  If cmbDiler.Text <> "" And txtPrice.Text <> "" And lstSoldSIMs.ListCount <>  0  _
     Or chkCash.Value = Checked Or chkNoCash.Value = Checked Then
    For j =  0  To lstSoldSIMs.ListCount
      Adodc1.Recordset.MoveFirst
      For i =  0  To Adodc1.Recordset.RecordCount -  1 
        If Trim(Adodc1.Recordset("num")) = Val(lstSoldSIMs.List(j)) Then
          Adodc1.Recordset("diler") = cmbDiler.Text
          Adodc1.Recordset("datesold") = Date
          Adodc1.Recordset("price") = txtPrice
          Adodc1.Recordset("status") = "1"
          'проверка вида оплать (полная, либо долг)
          If chkCash.Value = Checked Then
            Adodc1.Recordset("nodebt") =  1 
          ElseIf chkNoCash.Value = Checked Then
            Adodc1.Recordset("fulldebt") =  1 
          End If
          'конец проверки вида оплать (полная, либо долг)
          Exit For
        End If
        Adodc1.Recordset.MoveNext
      Next i
    Next j
    MsgBox "Покупка произведена успешно."
    lstSoldSIMs.Clear
  Else
    MsgBox "Пожалуйста, заполните все данные."
  End If
End If ' конец проверки БД на пустоту

End Sub


теперь посмотрим....
...
Рейтинг: 0 / 0
13.03.2010, 12:27
    #36518111
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ограничен ли Listbox по количеству выводимых строк?
Попробуй заменить цикл поиска по рекордсету
For i = 0 To Adodc1.Recordset.RecordCount - 1
на метод рекордсета Find

мне кажется, это будет быстрее, но не факт.

Но подход, в принципе, порочен.
Для ускорения записи в базу, надо выполнить в нее запрос минуя рекордсет.
Запрос будет выглядеть примерно так:

Код: plaintext
1.
2.
UPDATE MyTable SET diler='Авангард', datesold='2010-03-13', price= 25 , status= 1 , nodebt= 0 , fulldebt= 1 
WHERE num IN ( 5 , 15 , 26 , 425 , 426 , 4865 )

точный синтаксис будет зависеть от используемой БД
...
Рейтинг: 0 / 0
13.03.2010, 18:24
    #36518466
bubek
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ограничен ли Listbox по количеству выводимых строк?
Тест выделения кода...

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
Private Sub cmdApprove_Click()
If Adodc1.Recordset.RecordCount <>  0  Then ' проверить БД на пустоту
    Adodc1.Recordset.MoveFirst
If cmbDiler.Text <> "" And txtPrice.Text <> "" And lstSoldSIMs.ListCount <>  0  _
Or chkCash.Value = Checked Or chkNoCash.Value = Checked Then

For j =  0  To lstSoldSIMs.ListCount
    Adodc1.Recordset.MoveFirst
For i =  0  To Adodc1.Recordset.RecordCount -  1 
If Trim(Adodc1.Recordset("num")) = Val(lstSoldSIMs.List(j)) Then
    Adodc1.Recordset("diler") = cmbDiler.Text
    Adodc1.Recordset("datesold") = Date
    Adodc1.Recordset("price") = txtPrice
    Adodc1.Recordset("status") = "1"
        'проверка вида оплать (полная, либо долг)
        If chkCash.Value = Checked Then
            Adodc1.Recordset("nodebt") =  1 
        ElseIf chkNoCash.Value = Checked Then
            Adodc1.Recordset("fulldebt") =  1 
        End If
        'конец проверки вида оплать (полная, либо долг)
    Exit For
End If
    Adodc1.Recordset.MoveNext
Next i
Next j
    MsgBox "Покупка произведена успешно."
    lstSoldSIMs.Clear
Else
    MsgBox "Пожалуйста, заполните все данные."
End If
    End If ' конец проверки БД на пустоту
End Sub
...
Рейтинг: 0 / 0
14.03.2010, 01:23
    #36518803
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ограничен ли Listbox по количеству выводимых строк?
bubekТест выделения кода...

для тестов есть ветка "тест"
...
Рейтинг: 0 / 0
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Ограничен ли Listbox по количеству выводимых строк? / 13 сообщений из 13, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]