Как лучше организовать извлечение информации из базы данных

Работа VB и СУБД (Access, MSSQL, MySQL, Oracle и пр.)
Правила форума
При создании новой темы не забывайте указывать используемую СУБД.
_@@@
Начинающий
Начинающий
Аватара пользователя
 
Сообщения: 23
Зарегистрирован: 26.10.2006 (Чт) 15:27

Как лучше организовать извлечение информации из базы данных

Сообщение _@@@ » 13.08.2007 (Пн) 7:03

В общем, тока начал осваивать рекордсеты, для начала решил тупо написать свой GUI для телефонного справочника своего города. Делаю так:

Код: Выделить всё
Dim dbsDataBase As DAO.Database
Dim rstRecordSet As DAO.Recordset
Dim sTemp As String
Dim sFamil As String
sTemp = App.Path
If Not Right(sTemp, 1) = "\" Then
    sTemp = sTemp + "\"
End If
Set dbsDataBase = DAO.OpenDatabase(sTemp & "Base.mdb")
Set rstRecordSet = dbsDataBase.OpenRecordset("SELECT * FROM Clients;")
rstRecordSet.MoveFirst
Do While Not rstRecordSet.EOF 'Выполнять пока есть записи
    sFamil = rstRecordSet.Fields("FAM").Value
    fMain.lstView.ListItems.Add , sFamil, sFamil, 2, 2
    fMain.lstView.ListItems.Item(sFamil).SubItems.Item(1).Caption = rstRecordSet.Fields("Address").Value
    fMain.lstView.ListItems.Item(sFamil).SubItems.Item(2).Caption = rstRecordSet.Fields("Phone").Value
    rstRecordSet.MoveNext 'Перемещаемся к следующей записи
Loop


В целом все работает, но есть одно но. В таблице Phones лежит 11670 записей и их импорт в листвью занимает немного больше минуты . В то время как программа, из которой я скопипастил эту *.mdb'шку запускается за 5-6 секунд, да и сама таблица в Access грузится примерно столько же.

Собсно вопросы:

1) Что я делаю неправильно?
2) Какой самый быстрый способ передрать инфу из базы данных?
3) (чисто риторичекий, ответа не жду, хотелось бы услышать хотя бы пару аргументированных мнений) Чего лучше юзать: ADO или DAO?
4) Как приавильно (ну или хотя бы быстро) реализовать выдерание инфы из базы данных?
Здесь типа демократия,
На самом деле царство
Я так люблю свою страну
И ненавижу государство...

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

Сообщение alibek » 13.08.2007 (Пн) 8:23

1. Все. Во-первых, нет никакой необходимости загружать в список 11 тысяч записей. Во-вторых, здесь лучше использовать гриды в буфферизацией. Или хотя бы ListView, но виртуальный.
3. В поиске уже было. Если нет причин использовать именно DAO, используй ADO.

Вопросы 2 и 4 повторяют друг друга и первый вопрос.
Lasciate ogni speranza, voi ch'entrate.

_@@@
Начинающий
Начинающий
Аватара пользователя
 
Сообщения: 23
Зарегистрирован: 26.10.2006 (Чт) 15:27

Сообщение _@@@ » 13.08.2007 (Пн) 9:36

alibek писал(а):1. Все. Во-первых, нет никакой необходимости загружать в список 11 тысяч записей.

И правда... И вообще програмированием нефиг заниматься, и даэже подходить к кмопу не стоит, от него радиация и т.д. :lol: Раз спрашиваю, значит мне есть необходиммость это сделать.

alibek писал(а):Во-вторых, здесь лучше использовать гриды в буфферизацией. Или хотя бы ListView, но виртуальный.

Блин, да при чем здесь гриды? Даже еслию заменю добавление записей в листвью на

Код: Выделить всё
Debug.Print rstRecordSet.Fields("ХЗ").Value


прога один фиг грузится около минуты. Что значит что тормоза и косяки не в добавлении записей в список, а в самой обработке рекордсета.

alibek писал(а):3. В поиске уже было. Если нет причин использовать именно DAO, используй ADO.


Блин, и для кого я подчеркивал что мнения хотелось бы узнать аргументированные?

alibek писал(а):Вопросы 2 и 4 повторяют друг друга и первый вопрос

ну с ентим спорить не стану :P
Здесь типа демократия,
На самом деле царство
Я так люблю свою страну
И ненавижу государство...

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

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

_@@@ писал(а):Раз спрашиваю, значит мне есть необходиммость это сделать.

Нет. Ты просто это еще не понял.
Повторяю по словам -- нет никакой необходимости выводить в окне все 11 тысяч записей.
_@@@ писал(а):Блин, да при чем здесь гриды? Даже еслию заменю добавление записей в листвью на
Код: Выделить всё
Debug.Print rstRecordSet.Fields("ХЗ").Value


Было бы неплохо, если бы ты почитал, что собой представляют гриды.
Они уже ориентированы на работу с БД и тебе не нужно их заполнять по одной ячейки. Им достаточно указать источник данных, отображением и загрузкой данных они занимаются сами.
_@@@ писал(а):Блин, и для кого я подчеркивал что мнения хотелось бы узнать аргументированные?

Тогда читай первую половину ответа: в поиске есть.
Lasciate ogni speranza, voi ch'entrate.

VVitafresh
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1641
Зарегистрирован: 12.05.2005 (Чт) 14:44
Откуда: Херсон, UA

Сообщение VVitafresh » 13.08.2007 (Пн) 10:43

_@@@, а если в тел. справочнике нашего города 200 тыс. записей? Их тоже нужно все загружать в ListView?
А если это тел. справочник города-миллионника?

Прислушайся к alibek'у, он плохого не посоветует.
Никакую проблему невозможно решить на том же уровне, на каком она возникла. Нужно стать выше этой проблемы, поднявшись на следующий уровень.


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

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

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

    TopList