Работа с DataGrid

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

Работа с DataGrid

Сообщение Dumm » 04.12.2013 (Ср) 21:03

Всем привет. Подключаюсь к базе. Данные выбираю через ADODB.Recordset.
Код: Выделить всё
Public oCnn As Object
Public oRst As Object

Sub Main()

Set oCnn = CreateObject("ADODB.Connection")
oCnn.ConnectionString = "Provider=OraOLEDB.Oracle.1;Persist Security Info=False;User ID=BTIZ;Password=****;Data Source=SOUTH"

Set oRst = CreateObject("ADODB.Recordset")
Set oRst.ActiveConnection = oCnn

oRst.CursorType = adOpenKeyset
oRst.LockType = adLockBatchOptimistic
oRst.CursorLocation = adUseClient

'Здесь выбираю данные
oRst.Source = "SELECT * FROM OTIZ_SCHEDULE"
oRst.Open

'Присваиваю их DataGrid
frmMain.Text3.Text = oRst.RecordCount
Set frmMain.DataGrid1.DataSource = oRst

End Sub

Так все работает. Но потом пытаюсь данные получать через ADODB.Command
Код: Выделить всё
Public oCnn As Object
Public oCmd As Object
Public oRst As Object

Sub Main()

Set oCnn = CreateObject("ADODB.Connection")
oCnn.ConnectionString = "Provider=OraOLEDB.Oracle.1;Persist Security Info=False;User ID=BTIZ;Password=****;Data Source=SOUTH"

Set oCmd = CreateObject("ADODB.Command")
Set oCmd.ActiveConnection = oCnn

Set oRst = CreateObject("ADODB.Recordset")
Set oRst.ActiveConnection = oCnn

oRst.CursorType = adOpenKeyset
oRst.LockType = adLockBatchOptimistic
oRst.CursorLocation = adUseClient

'Выбираю данные
oCmd.CommandText = "SELECT * FROM OTIZ_SCHEDULE"
'Передаю результирующий набор Recorset'у
Set oRst = oCmd.Execute

'Присваиваю DataGrid, причем oRst.RecordCount выдает -1
frmMain.Text3.Text = oRst.RecordCount
'... а здесь выдается ошибка.
Set frmMain.DataGrid1.DataSource = oRst

End Sub

То так выдается ошибка
Run-time error '7004':
The rowset is not bookmarkable.

В чем здесь дело?

ger_kar
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1957
Зарегистрирован: 19.05.2011 (Чт) 19:23
Откуда: Кыргызстан, Иссык-Куль, г. Каракол

Re: Работа с DataGrid

Сообщение ger_kar » 04.12.2013 (Ср) 21:30

Ну так надо открыть окно 'Locals Window' и посмотреть что тебе возвращает рекордсет.
А возвращает он тебе набор записей не поддерживающий закладки, т.е. скорее всего adOpenForwardOnly.
А получается так потому, что ты создаешь один рекордсет, а тебе
'Передаю результирующий набор Recorset'у
Set oRst = oCmd.Execute
Возвращает другой, а ссылка на первый зануляется. Поэтому передается то, что установилось автоматом при создании рекордсета, а твои установки
Код: Выделить всё
oRst.CursorType = adOpenKeyset
oRst.LockType = adLockBatchOptimistic
oRst.CursorLocation = adUseClient
Уходят в небытие вместе с первым рекордсетом
Хочешь, что-бы данные возвратились в первый открывай его так: oRst.Open oCmd
Бороться и искать, найти и перепрятать

Dumm
Начинающий
Начинающий
 
Сообщения: 21
Зарегистрирован: 27.05.2012 (Вс) 16:39

Re: Работа с DataGrid

Сообщение Dumm » 05.12.2013 (Чт) 19:14

Получилось. Большое спасибо.

Nik_Lviv
Начинающий
Начинающий
 
Сообщения: 2
Зарегистрирован: 14.05.2007 (Пн) 14:05

Re: Работа с DataGrid

Сообщение Nik_Lviv » 24.10.2014 (Пт) 21:14

Помогите.
В Datagrid виводятся дание с listbox с помощю создания базы даних.
Даные в Datagrid могут менятся, и мне нужно просумировать одну из колонок.
Я дeлаю цикл
For i = 0 To text1.text - 1 (тут есть номер количества записей, например 25)
Suma = CCur(DataGrid2.Columns(4).CellValue(DataGrid2.RowBookmark(i))) * CCur(DataGrid2.Columns(5).CellValue(DataGrid2.RowBookmark(i)))
Suma_zagalna = Format(Suma_zagalna + Suma, "########0.00")
next i

на екране видно только 13 записей, остальные просматриваются через полосы прокрутки.
И при виполнение цикла когда i=14 вилазит ошибка 6148 invalid row number.
Я понимаю что ето изза того что RowBookmark работает с видимой частю контрола, и ему по барабану сколько там строк вопщем.
Но как же бить.
Или надо возвращать дание в recordset а там сумировать?
Помогите

ger_kar
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1957
Зарегистрирован: 19.05.2011 (Чт) 19:23
Откуда: Кыргызстан, Иссык-Куль, г. Каракол

Re: Работа с DataGrid

Сообщение ger_kar » 25.10.2014 (Сб) 6:59

Гриды бывают разные, о каком конкретно гриде идет речь?
Бороться и искать, найти и перепрятать


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

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

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

    TopList