MSHFlexGrid не хочет заполняться!

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Princess
Начинающий
Начинающий
 
Сообщения: 13
Зарегистрирован: 18.11.2004 (Чт) 12:41

MSHFlexGrid не хочет заполняться!

Сообщение Princess » 19.11.2004 (Пт) 0:41

Пытаюсь заполнить этот самый грид записями примерно так:
...
Set rsKaList = New ADODB.Recordset
...
Set MSHFlexGrid.Recordset = rsKaList
...
Все бы ничего, но почему у меня количество записей около 24000, а в этот грид попадает только 1771 первых?
Не могу уже больше, уже все настройки у него меняла и так и сяк. Все время одно и то же число - 1771!!!

Sedge
Alternative Choice
Alternative Choice
Аватара пользователя
 
Сообщения: 1049
Зарегистрирован: 16.05.2002 (Чт) 18:23
Откуда: Somewhere-In-The-Net

Сообщение Sedge » 19.11.2004 (Пт) 1:04

А каким запросом выборка делается?

Ennor
Конструктивный критик
Конструктивный критик
 
Сообщения: 2504
Зарегистрирован: 18.12.2001 (Вт) 3:58
Откуда: Калуга -> Москва

Сообщение Ennor » 19.11.2004 (Пт) 11:46

Скорее всего, банально памяти не хватает на твоей машине. Флекс - он же не резиновый... Попробуй на другой тачке, с другим количеством рамы, и посмотри, изменится ли это число.

Princess
Начинающий
Начинающий
 
Сообщения: 13
Зарегистрирован: 18.11.2004 (Чт) 12:41

Сообщение Princess » 19.11.2004 (Пт) 12:27

Sedge писал(а):А каким запросом выборка делается?


Выборка делается просто select * из таблицы, в которой уже собраны запросами все необходимые записи. В таблице 24000 записей и выборку тоже попадают 24000, я проверила.

Princess
Начинающий
Начинающий
 
Сообщения: 13
Зарегистрирован: 18.11.2004 (Чт) 12:41

Сообщение Princess » 19.11.2004 (Пт) 12:31

Ennor писал(а):Скорее всего, банально памяти не хватает на твоей машине. Флекс - он же не резиновый... Попробуй на другой тачке, с другим количеством рамы, и посмотри, изменится ли это число.


Памяти у меня 512, должно хватать. У меня есть тут еще один Grid, самописный. Если вставить их оба в форму и заполнить, то в самописный попадают все записи, а в Flex только 1771! Только этот самописный меня в этом конкретном случае не устраивает, нужен именно MSHFlexGrid.

Tuco
Постоялец
Постоялец
 
Сообщения: 508
Зарегистрирован: 18.06.2003 (Ср) 16:37
Откуда: Подмосковье

Сообщение Tuco » 19.11.2004 (Пт) 12:36

Немного не в тему, но я читал в MSDN от 2003 г, что MSHFlexGrid отображает что-то чуть больше 2000 строк. И там приведён способ обойти эту проблему. Хотя странно, у меня база 192000 строк полностью вмещается в грид, правда я её через рекордсет гружу.... :-)
"There's more than one way to do it!"

hCORe
VB - Экстремал
VB - Экстремал
Аватара пользователя
 
Сообщения: 2332
Зарегистрирован: 22.02.2003 (Сб) 15:21
Откуда: parent directory

Сообщение hCORe » 19.11.2004 (Пт) 12:40

Вот та самая статья:
http://support.microsoft.com/default.aspx?scid=kb;en-us;194653

По-моему, надо проинсталлировать SP6 для VB. И все будет хорошо 8)
Моду создают модоки, а распространяют модозвоны.

Princess
Начинающий
Начинающий
 
Сообщения: 13
Зарегистрирован: 18.11.2004 (Чт) 12:41

Сообщение Princess » 19.11.2004 (Пт) 13:23

hCORe писал(а):Вот та самая статья:
http://support.microsoft.com/default.aspx?scid=kb;en-us;194653

По-моему, надо проинсталлировать SP6 для VB. И все будет хорошо 8)


У меня уже стоит SP6

Ennor
Конструктивный критик
Конструктивный критик
 
Сообщения: 2504
Зарегистрирован: 18.12.2001 (Вт) 3:58
Откуда: Калуга -> Москва

Сообщение Ennor » 19.11.2004 (Пт) 13:50

Хорошо, а если не привязывать рекордсет к гриду, а вручную добавлять строки? Понимаю, что геморно и медленно, но все же...

Princess
Начинающий
Начинающий
 
Сообщения: 13
Зарегистрирован: 18.11.2004 (Чт) 12:41

Сообщение Princess » 19.11.2004 (Пт) 19:08

Ennor писал(а):Хорошо, а если не привязывать рекордсет к гриду, а вручную добавлять строки? Понимаю, что геморно и медленно, но все же...


Я попробовала вручную, по одному элементу. Все заполнилось, но это очень долго. Совершенно мне не подходит:(
Не пойму, почему он не хочет заполняться по нормальному...

Dzhon
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 236
Зарегистрирован: 09.12.2003 (Вт) 13:30
Откуда: Россия, Омск

Сообщение Dzhon » 19.11.2004 (Пт) 22:16

Рекордсет привязывается к MSHFG через DataSourse
Код: Выделить всё

With rs 'ессено ранее объявлен
        .CursorLocation = adUseClient
        .Open strSQL, pCon, , adLockOptimistic
End With

Set hfgZayv.DataSource = rs

Princess
Начинающий
Начинающий
 
Сообщения: 13
Зарегистрирован: 18.11.2004 (Чт) 12:41

Сообщение Princess » 19.11.2004 (Пт) 23:52

Dzhon писал(а):Рекордсет привязывается к MSHFG через DataSourse
Код: Выделить всё

With rs 'ессено ранее объявлен
        .CursorLocation = adUseClient
        .Open strSQL, pCon, , adLockOptimistic
End With

Set hfgZayv.DataSource = rs


А никакой разницы. Я и так и так пробовала. Одинаково. Грузятся только первые 1771:(

FaKk2
El rebelde gurú
El rebelde gurú
Аватара пользователя
 
Сообщения: 2031
Зарегистрирован: 09.03.2003 (Вс) 22:10
Откуда: Los Angeles

Сообщение FaKk2 » 20.11.2004 (Сб) 6:14

Код что ли приведи...
Обмозгуем
Для получения ответа надо продемонстрировать качества, позволяющие стать компетентным — внимательность, вдумчивость, наблюдательность, желание активно участвовать в выработке решения.

Dzhon
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 236
Зарегистрирован: 09.12.2003 (Вт) 13:30
Откуда: Россия, Омск

Сообщение Dzhon » 20.11.2004 (Сб) 7:31

Princess писал(а):А никакой разницы. Я и так и так пробовала. Одинаково. Грузятся только первые 1771:(


Принцесса! У меня порядка 8500 строк и проблем никаких..............

Код: Выделить всё
Private Sub Command1_Click()
Dim con As New ADODB.Connection
Dim rs As New ADODB.Recordset
Dim strSQL, SF As String
Dim i As Long


With con
    .ConnectionString = "Provider=Microsoft.Jet.OLEDB.3.51;Persist Security Info=False;" & _
    "Data Source=C:\Program Files\Microsoft Visual Studio\VB98\BIBLIO.MDB;Mode=ReadWrite"
    .ConnectionTimeout = 15
    .Open
End With
strSQL = "SELECT * FROM Titles"
With rs
    .CursorLocation = adUseClient
    .Open strSQL, con, adOpenDynamic
End With

Set Me.MSHFlexGrid1.DataSource = rs

rs.Close
con.Close
Set rs = Nothing
Set con = Nothing
'-------------------------------------
SF = ";"
For i = 0 To Me.MSHFlexGrid1.Rows - 2
    SF = SF + "|" + CStr(i + 1)
Next i

Me.MSHFlexGrid1.FormatString = SF
End Sub

Ennor
Конструктивный критик
Конструктивный критик
 
Сообщения: 2504
Зарегистрирован: 18.12.2001 (Вт) 3:58
Откуда: Калуга -> Москва

Сообщение Ennor » 21.11.2004 (Вс) 1:12

Princess писал(а):Я попробовала вручную, по одному элементу. Все заполнилось, но это очень долго. Совершенно мне не подходит:(
Не пойму, почему он не хочет заполняться по нормальному...

Ага, значит, все данные по крайней мере на месте :)
У флекса есть такое свойство - Redraw (Boolean). Так вот, перед заполнением выставляй его в False, а по окончании - в True. Поверь мне, будет гораздо быстрее.

Princess
Начинающий
Начинающий
 
Сообщения: 13
Зарегистрирован: 18.11.2004 (Чт) 12:41

Сообщение Princess » 22.11.2004 (Пн) 1:27

Ennor писал(а):
Princess писал(а):Я попробовала вручную, по одному элементу. Все заполнилось, но это очень долго. Совершенно мне не подходит:(
Не пойму, почему он не хочет заполняться по нормальному...

Ага, значит, все данные по крайней мере на месте :)
У флекса есть такое свойство - Redraw (Boolean). Так вот, перед заполнением выставляй его в False, а по окончании - в True. Поверь мне, будет гораздо быстрее.


Так у меня это стоит. Или вставить и делать по одному элементу? По одному мне по любому не подходит. У меня еще более-менее выполняется, не так уж и долго, но с этим будут работать пользователи, а у них там такое старье есть:( Полчаса будет делаться. А одно из требований к задаче как раз минимизировать время насколько возможно.

Princess
Начинающий
Начинающий
 
Сообщения: 13
Зарегистрирован: 18.11.2004 (Чт) 12:41

Сообщение Princess » 22.11.2004 (Пн) 1:28

Люди, может у него буфер какой-то, в который все не помещается? Завтра приду на работу и тогда напишу полный код:(

Princess
Начинающий
Начинающий
 
Сообщения: 13
Зарегистрирован: 18.11.2004 (Чт) 12:41

Сообщение Princess » 22.11.2004 (Пн) 21:08

Private Sub FillGrd()
Dim rsKaList As New ADODB.Recordset, tSql As String
Dim Cmd As ADODB.Command

Set Cmd = New ADODB.Command
Set rsKaList = New ADODB.Recordset
Set Cmd.ActiveConnection = cn

tSql = "select * From #CrossProtocol"
rsKaList.Open tSql, cn

GrdCross.Redraw = False
Set GrdCross.Recordset = rsKaList
rsKaList.Close
GrdCross.Redraw = True

With GrdCross
' .FormatString = "Параметр|Контрагент|Адрес|Номер|Название|Актуальность|В работе|Исполнитель|Подразделение|"
.ColWidth(0) = 2000
.ColWidth(1) = 300
.ColWidth(2) = 2000
.ColWidth(3) = 800
.ColWidth(4) = 5000
.ColWidth(5) = 2000
.ColWidth(6) = 1000
.ColWidth(7) = 2000
End With

Set rsKaList = Nothing
Set cn = Nothing
cn.Execute "drop table #CrossProtocol"

End Sub

Может кто увидит, что здесь не так:(

Dzhon
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 236
Зарегистрирован: 09.12.2003 (Вт) 13:30
Откуда: Россия, Омск

Сообщение Dzhon » 23.11.2004 (Вт) 16:07

Princess писал(а):Private Sub FillGrd()
Dim rsKaList As New ADODB.Recordset

Set rsKaList = New ADODB.Recordset


GrdCross.Redraw = True

With GrdCross
' .FormatString = "Параметр|Контрагент|Адрес|Номер|Название|Актуальность|В работе|Исполнитель|Подразделение|"
.ColWidth(0) = 2000
.ColWidth(1) = 300
.ColWidth(2) = 2000
.ColWidth(3) = 800
.ColWidth(4) = 5000
.ColWidth(5) = 2000
.ColWidth(6) = 1000
.ColWidth(7) = 2000
End With


End Sub

(

На первый взгляд ничего не увидел, только не пойму зачем рекордсет дважды определять(хотя разницы никакой)? И еще может Redraw = True после форматирования грида поставить?


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

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

Сейчас этот форум просматривают: Yandex-бот и гости: 2

    TopList