На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! Правила раздела Visual C++ / MFC / WTL (далее Раздела)
1) На Раздел распространяются все Правила Форума.
2) Перед тем, как создать новый топик, убедитесь, что Вы читали Правила создания тем в Разделе.
3) Вопросы, не связанные с программированием (настройки MS Visual Studio, книги, библиотеки и т.д.),
обсуждаются в разделе C/C++: Прочее
4) Вопросы разработки .NET (Windows Form, C++/CLI и т.п.) приложений на Visual C++/C# обсуждаются в разделе .NET.
5) Нарушение Правил может повлечь наказание со стороны модераторов.

Полезные ссылки:
user posted image FAQ Раздела user posted image Обновления для FAQ Раздела user posted image Поиск по Разделу user posted image MSDN Library Online
Модераторы: ElcnU
Страницы: (5) [1] 2 3 ... Последняя » все  ( Перейти к последнему сообщению )  
> правильное программирование БД , MFC + SQLite
    Здравствуйте продолжаю сериию тему из цикла "правильное программирование" :D
      Так и в чем вопрос то? Или ты тут будешь какие то лекции с примерами выкладывать? :unsure:
        не лекций не будет я больше практик :D
        щас небольшую базу данных слобаю и буду пробовать правильно её программировать c MFC и SQLite.
          так дело пошло, БД взял учебную под названием chinook.db, для практики сойдет, в ней 11 таблиц, но вопрос не в ней.

          я уже начал писать демку, настроил SQLite3, все пучком :).

          проблема возникла с выводом на экран, дело в том что я вывожу во вьюшку, которая имеет полосы прокрутки, чтобы отображать все данные в окне, и настраиваю режим преобразования в CExample1View::OnInitialUpdate, но здесь мне надо получить высоту шрифта, чтобы настроить окно вывода по высоте шрифта * число строк результата запроса, я не знаю как получить ее здесь она доступна тока в OnDraw,но OnDraw вызывается уже после OnInitialUpdate, таже фигня и с шириной окна, неизвестна ширина шрифта. хз че делать :wacko::
          ExpandedWrap disabled
            void CExample1View::OnInitialUpdate()
            {  
                CScrollView::OnInitialUpdate();
             
                int recordCount = 0;
             
                if (mIsDbConnected)
                {
                    // Получаем число записей в наборе данных
                    CSqlStatement* stmt = mSQLiteDB.Statement(_T("SELECT COUNT(*) FROM albums"));
                    ASSERT(stmt);
                    stmt->NextRow();
                    recordCount = stmt->ValueInt(0);
                    delete stmt;
                }  
             
                // устанавливаем размеры окна
                // MM_HIMETRIC = 0.01 mm                
                const int cY = высота шрифта * recordCount; // <--- здесь надо знать параметры шрифта вывода
                const int cX = ширина таблицы;          // <---
             
                CSize sizeTotal(cX, cY);
                CSize sizePage(sizeTotal.cx / 2, sizeTotal.cy / 2);
                CSize sizeLine(sizeTotal.cx / 50, sizeTotal.cy / 50);
                
                SetScrollSizes(MM_HIMETRIC, sizeTotal, sizePage, sizeLine);
            }

          в OnDraw вывожу данные.
          Сообщение отредактировано: Cfon -
            так с этим разобралси как два пальца :D
            ExpandedWrap disabled
              void CExample1View::OnInitialUpdate()
              {
                  CScrollView::OnInitialUpdate();
               
               
              .............................
               
               
                  CClientDC dc(this);
                  TEXTMETRIC tm{ 0 };
                  LOGFONT lf{ 0 };
               
                  _tcscpy_s(lf.lfFaceName, _T("Consolas"));
                  lf.lfHeight = 500;
                  lf.lfWeight = FW_BOLD;
                  SetFont(lf, &dc);
                  
                  dc.SetMapMode(MM_HIMETRIC);
                  dc.GetTextMetrics(&tm);
                  TRACE(_T("tmHeight = %d, tmAveCharWidth = %d\n"), tm.tmHeight, tm.tmAveCharWidth);
               
               
              ...........................
               
                  CSize sizeTotal(cX, cY);
                  CSize sizePage(sizeTotal.cx / 2, sizeTotal.cy / 2);
                  CSize sizeLine(sizeTotal.cx / 50, sizeTotal.cy / 50);  
                  SetScrollSizes(MM_HIMETRIC, sizeTotal);            
              }


            немного терпения скоро будет и про БД :D
            Сообщение отредактировано: Cfon -
              вот для начала :D

              Прикреплённый файлПрикреплённый файлExample1.zip (78,25 Кбайт, скачиваний: 130)

              этот архив можно не смотреть, а смотрите весь процесс написания этого демо на GitHub: https://github.com/Cfon/MFCSQLite3Demo
              где я пишу как есть в прямом эфире без цензуры :D
              совершаю ошибки естественно, исправляю показываю как надо программировать не боясь ошибится, настоящий программист тот кто все время пишет! :writer:

              почему GitHub? все просто сюда большие файлы нельзя прилепить :D
              Сообщение отредактировано: Cfon -
                Цитата Cfon @
                проблема возникла с выводом на экран, дело в том что я вывожу во вьюшку, которая имеет полосы прокрутки, чтобы отображать все данные в окне, и настраиваю режим преобразования в CExample1View::OnInitialUpdate, но здесь мне надо получить высоту шрифта


                А высоту шрифта можно получить только из БД, подскажите как получить высоту шрифта!
                  Цитата ter_nk_ @
                  А высоту шрифта можно получить только из БД, подскажите как получить высоту шрифта!

                  По разному например из диалога выбора шрифта.
                    версия без поддержки страничного просмотра данных готова :D
                    1. сделал отображение данных во вьюшку с прокруткой
                    2. выбор таблиц из меню и тулбара
                    3. юзал архитектуру документ-вид

                    пока вопросов нет :D

                    след шаг юзать страничный просмотр данных по 50 строк, а то глючит просмотр при большом кол-ве отображаемых данных 140 мил точно не потянет :D
                    Сообщение отредактировано: Cfon -
                      вот ссылка на актуальный проект :D
                      https://github.com/Cfon/MFCSQLite3Demo

                      смотрите и учитесь вместе со мной, но или просто критикуйте :D
                      Сообщение отредактировано: Cfon -
                        реализовал страничный просмотр данных по 50 строк, юзал не сильно мудреный сиквел :
                        SELECT * FROM table LIMIT 50 OFFSET n

                        навигация при помощи меню, кнопок на тулбаре, а также кнопок на вьюшке под таблицей с выборкой данных

                        демо выложу на GitHub позже :D

                        след шаг реализовать сортировку и причесать данные(в первом демо данные всех таблиц шли как есть, надо заменить магические числа на нормальные имена, возможно выкинуть часть полей, с тем чтобы уменьшить объём выводимой инфы на экран с возможностью дальнейшей детализации например по клику на кнопку :)
                          Я кстати смотрел твою пилотную версию в 6 сообщении которую ты выкладывал. Там много критики назрело на самом деле. Но мне реально лень было отписывать. Может потом найду время посмотрю твои последние версии, прокоментирую. Но точно не на выходных )
                            Велком ;)
                              залил на GitHub (Example1.1.zip)
                              смотрите след маленький шажок :D
                              https://github.com/Cfon/MFCSQLite3Demo

                              пс. предыдущие версии не удаляю, чтобы проследить всю историю шажков :D
                              Сообщение отредактировано: Cfon -
                                Функция сортировки добавлена, для этого юзал след сиквел:
                                SELECT * FROM table ORDER BY field ASC LIMIT 50 OFFSET n;

                                Сама функциональность реализована добавлением списка на тулбар.

                                https://github.com/Cfon/MFCSQLite3Demo


                                :D обнаружен косяк! замедление работы при сортировке больших данных, видимо запрос на получение всех данных даже с учетом лимита не эффективен и данные всеравно получаются все в память! буду пробовать решить через добавление ограничения запроса WHERE:
                                SELECT * FROM table WHERE field = 'value' ORDER BY field LIMIT 50 OFFSET n;
                                Сообщение отредактировано: Cfon -
                                0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                                0 пользователей:


                                Рейтинг@Mail.ru
                                [ Script execution time: 0,0471 ]   [ 19 queries used ]   [ Generated: 28.03.24, 20:36 GMT ]