MDB + ADO

Работа VB и СУБД (Access, MSSQL, MySQL, Oracle и пр.)
Правила форума
При создании новой темы не забывайте указывать используемую СУБД.
Diler
Начинающий
Начинающий
 
Сообщения: 4
Зарегистрирован: 11.04.2011 (Пн) 14:43

MDB + ADO

Сообщение Diler » 11.04.2011 (Пн) 15:13

Доброго времени суток. В общем суть проблемы такова. Нужно прикрутить к проекту VB6 MDB базу. Это я сделал с помощью ADODC и отображаю с помощью Datagrid. Все работает вполне нормально. Уже понял как отследить изменения, добавления и тд. Есть еще некоторые вопросы с одновременным редактированием одной и той же базы, но тут пока еще непонятно нужно будет это вообще или нет. С этим более-менее понятно.
Но вот следующий вопрос. Мне нужно на основе этих данных сделать гистограмму и график. Нарисовать это дело ручками несложно, благо опыт рисования :D кое-какой уже есть. Весь вопрос в том, как получить из таблицы эти данные. Получать из формы (из DataGrid)? Или все же открыть отдельный коннект на базу и получать уже оттуда? Больше склоняюсь к второму варианту, ибо насколько я помню обращение к формам идет медленнее чем к памяти. Но тут фактически пойдет обращение к файлу... :? Ну в общем решил делать по второму варианту. И вот тут я "поплыл". Вроде нашел подходящий класс - Recordset. А вот как с ним работать никак не разберусь. Помогите пожалуйста...
Код: Выделить всё
Dim rs1 As ADODB.Recordset

Set rs1 = New ADODB.Recordset

rs1.ActiveConnection = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\db1.mdb;Persist Security Info=False"
rs1.CursorLocation = adUseClient
rs1.Open "Таблица1", "Provider=Microsoft.Jet.OLEDB.4.0;" & _
    "Data Source=C:\db1.mdb;Persist Security Info=False", , , adCmdTable

Set Adodc1.Recordset = rs1 'вывожу в таблицу, чтобы посмотреть как работает. Этот способ работает нормально)
Set DataGrid1.DataSource = rs1


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

Есть еще вариант с ADODB.Connection
Код: Выделить всё
Dim rs1 As ADODB.Recordset
Dim cnn As ADODB.Connection
Set cnn = New ADODB.Connection
cnn.ConnectionString = "Provider=MSDASQL.1;Persist Security Info=False;Data Source=База данных MS Access;Mode=ReadWrite;Initial Catalog=" & "C:\db1.mdb"
cnn.CursorLocation = adUseClient
cnn.Open Таблица1, , , 3 'вот здесь ошибка. Не понимаю какой параметр ставить. Поэтому работоспособность нижеследующего кода оценить не могу
Dim strQuery As String
strQuery = "SELECT * FROM Таблица1 ORDER BY [ФИО Литейщика]" 'запрос пристрелочный, поэтому я просто вывожу всю таблицу, только отсортированную по фамилии

Rs = cnn.Execute(strQuery)
Set DataGrid1.DataSource = Rs ' тут просто пытаюсь вывести результат в DataGrid, чтобы посмотреть как работает


А может быть присоединить базу через RecordSet а оттуда уже и брать данные для DataGrid и для выборки, которая пойдет на гистограмму/график?
Я не понимаю почему, но по RecordSet'у почему то не нашелся гайд, в котором были бы описаны все, ну или хотя бы основные, свойства/методы/параметры... Хотя тут скорее сработал фактор криворукости и я его просто не нашел, ибо до конца не понимаю что конкретно надо искать.
Выручайте, други... в голове каша уже)) Просто с БД столкнулся вообще впервые, а делать надо. Буду благодарен за любой дельный совет или ссылки на источники.

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

Re: MDB + ADO

Сообщение alibek » 11.04.2011 (Пн) 16:52

ADODC использовать не нужно, работай непосредственно с ADODB.

Из таблицу выборку делать нельзя. Таблица (вернее рекордсет) — это и есть результат выборки (результат запроса в БД).

Set DataGrid1.DataSource = Rs — это и есть использование полученного рекордсета в качестве источника данных для грида.
Из этого же рекордсета и получаешь данные для графиков.

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

Можешь посмотреть некоторые примеры здесь: http://alibek09.narod.ru/vb/articles/vbsbook/index.html
Lasciate ogni speranza, voi ch'entrate.

Diler
Начинающий
Начинающий
 
Сообщения: 4
Зарегистрирован: 11.04.2011 (Пн) 14:43

Re: MDB + ADO

Сообщение Diler » 12.04.2011 (Вт) 15:12

спасибо alibek
Возникли еще вопросы. Понимаю, что покажутся смешными, но факт есть факт)

1.
alibek писал(а):ADODC использовать не нужно, работай непосредственно с ADODB.

Я не могу объявить Recoredset без размещения на форме adodc. Это нормально? Или я как-то не так объявляю?

2. Вроде разобрался с асинхронным соединением с базой, выполнением запросов по этому соединению и выводом их в датагрид. Но в нем данные только для чтения. Как можно включить редактирование? С adodc это как-то само собой получилось))) Там редактировалось и изменения сохранялись в базу.

3. Ну и самое интересное. Как уже было сказано, разобрался с подключением и загрузкой необходимых данных в RecordSet. Как можно получить доступ к этим данным? Это вроде делается через свойство Fields?

Ну и опять же буду благодарен за любой пинок в полезном направлении.
PS Если есть у кого ссылки, где более-менее понятно разбирается работа с adodb, скиньте пожалуйста.

Diler
Начинающий
Начинающий
 
Сообщения: 4
Зарегистрирован: 11.04.2011 (Пн) 14:43

Re: MDB + ADO

Сообщение Diler » 18.04.2011 (Пн) 13:40

Мда.... Вроде и форум довольно посещаемый, и предназначен для взаимопомощи коллегам по языку программирования, а тут такая оказия...
Тему можно закрывать.

HandKot
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 283
Зарегистрирован: 28.06.2006 (Ср) 13:34
Откуда: Sergiev Posad

Re: MDB + ADO

Сообщение HandKot » 19.04.2011 (Вт) 7:51

Я не могу объявить Recoredset без размещения на форме adodc. Это нормально? Или я как-то не так объявляю?

Имеено, не так объявляете

Как можно включить редактирование

при открытии рекордсета указать требуенмый тип Dynamic cursor

Как можно получить доступ к этим данным? Это вроде делается через свойство Fields

да, через коллекции rows и fields
I Have Nine Lives You Have One Only
THINK!

Diler
Начинающий
Начинающий
 
Сообщения: 4
Зарегистрирован: 11.04.2011 (Пн) 14:43

Re: MDB + ADO

Сообщение Diler » 21.04.2011 (Чт) 13:53

Ну в общем-то разобрался уже... Не в деталях конечно, но с помощью великого гугла, пинков по пердячей косточке от шефа и такой-то матери все вроде заработало.
Спасибо за помощь.


Вернуться в Базы данных

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

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

    TopList