Модераторы: feodorv, GremlinProg, xvr, Fixin
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> ListView и база данных 
:(
    Опции темы
Letchik
Дата 10.6.2010, 12:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 50
Регистрация: 5.1.2010
Где: UGTB

Репутация: нет
Всего: нет



Всем привет!
Имеется база данных. Массив структур с данными о сотрудниках фирмы. Надо вывести все записи в ListView. Просто? А теперь читаем дальше smile Понятное дело, что записи нужно будет изменять, добавлять и тому подобное. Тоесть база данных у нас динамическая. Проблема вот в чём: сам ListView имеет свои индексы для записей, а у базы данных свои индексы. Как их согласовать друг с другом? Вообще, как это делаетя. Не имею представления.
Как мог - объяснил. Надеюсь все всё поняли smile 
PM MAIL Skype   Вверх
Dem_max
Дата 10.6.2010, 12:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1780
Регистрация: 12.4.2007

Репутация: 16
Всего: 39



Цитата

Как их согласовать друг с другом? 


Ну если у тебя базе данных индексы не идут как 4,9,1,7,0,6 а по порядку 1,2,3,4 то какие проблемы ?


--------------------
Американские программисты долго не могли понять, почему русские при зависании Windоws всё время повторяют "Твой зайка написал" ("Yоur bunnу wrоte")
PM MAIL   Вверх
Letchik
Дата 10.6.2010, 13:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 50
Регистрация: 5.1.2010
Где: UGTB

Репутация: нет
Всего: нет



Данные надо будет сортировать по группам. В группе могут содержаться данные с любыми индексами и в любом порядке, будь то 1, 3, 10, 123; или 20, 30, 32.
У меня есть идея, которая заключается в том, чтобы создать массив из элементов типа int, номер элемента будет соответствовать номеру строки в ListView, а присвоенное ему значение - индексу записи в БД.
Однако ListView должен иметь возможность сортироваь таблицу при щелчке по заголовку. Это значит, что мой массив должен будет обновляться чёрт знает как!
PM MAIL Skype   Вверх
Earnest
Дата 10.6.2010, 19:33 (ссылка) |    (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5962
Регистрация: 17.6.2005
Где: Рязань

Репутация: 33
Всего: 183



Проще всего сохранить связь между таблицей БД и лист-вью, записывая в Data каждого элемента номер записи (или ключ записи). И тасуй себе элементы списка на здоровье.


--------------------
...
PM   Вверх
Letchik
Дата 13.6.2010, 11:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 50
Регистрация: 5.1.2010
Где: UGTB

Репутация: нет
Всего: нет



Что-то вроде этого?

Код

struct PERSON            //Главная структура. Всё вертится вокруг неё
{
char fname[100];       //Имя
char lname[100];       //Фамилия
int ID;                        //Номер записи
}


Я правильно понял?

Это сообщение отредактировал(а) Letchik - 13.6.2010, 11:11
PM MAIL Skype   Вверх
Dem_max
Дата 13.6.2010, 12:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1780
Регистрация: 12.4.2007

Репутация: 16
Всего: 39



Я правильно понял?
Нет не правильно, ты в итоге в свою структуру и которая будет не одна, пытаешься перетащить базу данных в память программы.
Earnest,  пытается сказать что нужно хранить соответствие полей в ListView с полями базы данных.

Код

struct PERSON            //Главная структура. Всё вертится вокруг неё
{
   int ID_table;                        //Номер записи в ListView
   int ID_base;                        //Номер записи в базе данных
}



--------------------
Американские программисты долго не могли понять, почему русские при зависании Windоws всё время повторяют "Твой зайка написал" ("Yоur bunnу wrоte")
PM MAIL   Вверх
Letchik
Дата 13.6.2010, 21:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 50
Регистрация: 5.1.2010
Где: UGTB

Репутация: нет
Всего: нет



Так. Значит выходит, что мы напрямую работаем с файлом. Добавил (изменил/удалил) запись - сразу записывается в файл. А в память мы только загружаем вышеприведённую структуру. Верно?
PM MAIL Skype   Вверх
Earnest
Дата 15.6.2010, 06:44 (ссылка) |    (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5962
Регистрация: 17.6.2005
Где: Рязань

Репутация: 33
Всего: 183



Letchik, конечно нет. Ты спрашивал, как быть, если в списке элементы по разному сортируются. Я тебе написала, как сохранить связь - записать номер или ид-р записи в элемент лист-вью: член lParam структуры LVITEM, через которую ты помещаешь данные в список. О том, где хранить сами записи БД и речи не было. Что касается этого, то все зависит от свойств БД. Приличная БД должна сама заботиться о своей эффективности. 
Но если ты называешь базой данных нечто доморощенное, то другое дело. Здесь возможны 2 подхода: если данных немного, грузи сразу все в память и не парься. Поверь, кучи проблем ненужных избежишь. Есть только 2 случая, когда все в память нельзя: очень много данных или многопользовательский доступ. Во-втором случае лучше использовать "настоящую" БД. В первом, собственно, тоже, но можно обойтись хешированием. Например, загружаешь в память только то, что сейчас отображается в списке. Да, и чтобы избежать двойного расхода памяти, список (лист-вью) должен быть виртуальным. 
Под "большим" объемом данных (которые нельзя загрузить целиком в память) я понимаю данные размером в районе гигабайта и больше. Да честно говоря и это я бы загрузила через файл-маппинг. 


--------------------
...
PM   Вверх
Letchik
Дата 15.6.2010, 07:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 50
Регистрация: 5.1.2010
Где: UGTB

Репутация: нет
Всего: нет



Ах вот оно что! 
Огромное СПАСИБО!
Всё ясно теперь!  smile 
Я хотел поступить так же, но не нашёл подходящего элемента структуры для этой цели, а lParam, мне казалось, используется в других целях. 

Это сообщение отредактировал(а) Letchik - 15.6.2010, 07:57
PM MAIL Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Системное программирование и WinAPI"
Fixin
GremlinProg
xvr
feodorv
  • Большое количество информации и примеров с использованием функций WinAPI можно найти в MSDN
  • Описание сообщений, уведомлений и примеров с использованием компонент WinAPI (BUTTON, EDIT, STATIC, и т.п.), можно найти в MSDN Control Library
  • Непосредственно, перед созданием новой темы, проверьте заголовок и удостоверьтесь, что он отражает суть обсуждения.
  • После заполнения поля "Название темы", обратите внимание на наличие и содержание панели "А здесь смотрели?", возможно Ваш вопрос уже был решен.
  • Приводите часть кода, в которой предположительно находится проблема или ошибка.
  • Если указываете код, пользуйтесь тегами [code][/code], или их кнопочными аналогами.
  • Если вопрос решен, воспользуйтесь соответствующей ссылкой, расположенной напротив названия темы.
  • Один топик - один вопрос!
  • Перед тем как создать тему - прочтите это .

На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы .


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема »


 




[ Время генерации скрипта: 0.1168 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.