Страницы: 1
RSS
Теоретический вопрос - 2 файла: 1 как пользовательский интерфейс; 2-й как БД
 
Всем привет.  
 
У меня возник чисто теоретический вопрос. Кто-нибудь знает/делал/слышал о таком методе:    
Допустим нам необходимо создать какую-то базу данных и мы знаем, что данных (количество строк) за 1 месяц будет ... ну, скажем, 2000 строк, столбцов одинаковое количество 20 штук. Так вот, есть написанный пользовательский интерфейс к этой БД (форма, кнопочки, текстбоксы и т.д.), всё работает нормально. Но мучает вопрос, что эта БД будет пухнуть на глазах и через год-два-пять-десять будет весит очень много, т.е. и открываться и закрываться и пересчитываться будет очень долго. (формат файла *.xlsb)  
Вот у меня возникла идея, может хранить эту БД в соседнем файле, а в рабочем оставить только интерфейс (форму с кнопками). Но всё равно придётся открывать этот большой файл постоянно (т.е. он постоянно будет открыт)  
 
Кто такое делал? Есть ли какие советы или ещё чего? Может стоит создать базу в access, а обращаться к ней через Excel (хм, тоже извращение...)  
 
P.S. У меня такое ощущения, что меня заставляют взять бедного ослика и пытаться от него добиться скорости болида формулы один )) Т.е. человек (не я) хочет реализовать БД в Excel - там продажи, приходы, учёт, весь анализ и т.д. Мне-то, конечно, без разницы, человек платит - я работаю, и что будет через 5 лет мне должно быть без разницы, но я беспокоюсь ....  
А то вдруг он ко мне через 5 лет придёт и скажет - АААА, Паша, всё тормозит..... и т.д.
 
Идея не нова и вполне здрава:-) Если выборки из базы делать запросами, то все будет летать независимо от ее размера. Я правда с трудом могу себе представить таблицу в 100000 записей, которые нужны ежеминутно. Один из подходов - архивировать устаревшие данные, удаляя их из основной базы. И то, если они действительно нужны для анализа, статистики и т.д.
Я сам - дурнее всякого примера! ...
 
Запросами это типа "SELECT * FROM [Database$] WHERE [Кол-во] > 0" ?
 
Ну да. Сразу отбирать только нужные записи.
Я сам - дурнее всякого примера! ...
 
а этот второй файл (БД) его нужно будет открывать или таким запросом можно из закрытой книги вытащить?
 
я знаю у нас R_Dmitry специалист по БД и разным запросам ) Надо его послушать, что скажет )))  
 
P.S. Дим (R_Dmitry), сколько твои курсы будут стоить для меня обучить меня азам Access'a? ) Я уже знаю умные слова например,... "реалиционные базы", если надо ещё что выучу )  
 
P.S. Иногда я очень жалею, что не знаю Access (((
 
ADO сам обо всем позаботится:-) Можно прямо в эксе, через меню данные создать запрос.
Я сам - дурнее всякого примера! ...
 
Павел, если очень хочется, то можно в Access-е один раз создать все необходимые таблицы в одном mdb-файле, а потом забыть про Access, и уже в Excel-е заполнять, модифицировать, обрабатывать эти таблицы с помощью ADO.  
 
Но можно все сделать и в Excel-е, достаточно лишь предусмотреть на каждый год (или квартал, или месяц) свою базу данных (книгу). Обычно прошлогодняя информация еще нужна иногда для сравнения и трендов, а позапрошлогодняя уже вряд ли. Поэтому количество обрабатываемых файлов (книг) стабилизируется на уровне нескольких штук, в зависимости от выбранного интервала.  
Преимущество этого варианта - одна платформа, нужен опыт только по Excel-ю, что у Вас давно уже имеется с избытком :-)  
 
Что касается разделения книг, то по-моему обязательно нужно разделять книгу с кодом (она должна быть одна), и книги с данными (их может быть сколько угодно). С минимумом кода в книгах данных, только для вызова основного кода.
 
{quote}{login=Ластик}{date=07.02.2012 06:46}{thema=}{post}я знаю у нас R_Dmitry специалист по БД и разным запросам ) Надо его послушать, что скажет )))  
 
P.S. Дим (R_Dmitry), сколько твои курсы будут стоить для меня обучить меня азам Access'a? ) Я уже знаю умные слова например,... "реалиционные базы", если надо ещё что выучу )  
 
P.S. Иногда я очень жалею, что не знаю Access ((({/post}{/quote}  
Мне тоже требуется, да все руки никак не дойдут)  
 
 
Здравствуйте, Владимир!  
>Что касается разделения книг, то по-моему обязательно нужно разделять книгу с кодом (она должна быть одна), и книги с данными (их может быть сколько угодно). С минимумом кода в книгах данных, только для вызова основного кода.  
Золотые слова : )  
 
>Но можно все сделать и в Excel-е, достаточно лишь предусмотреть на каждый год (или квартал, или месяц) свою базу данных (книгу).  
Сейчас таким извращением как раз и занимаюсь)  
 
Но все-таки база данных должна быть базой.
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук


https://github.com/nervgh
 
Владимир,    
 
1) про создать таблицы в mdb файле и забыть. - вариант, как мне кажется хороший, т.к. я считаю, что если строк больше 5000, то лучше для этого подойдёт БД (Access и далее). Но я вот слабо представляю работу с mdb файлом. Вот, например, в таблице у нас 5000 записей, и мне нужно заменить в 200-й строке в 5-м столбце (поле) данные с 5 на 10 - как это сделать - я мало себе представляю. Если в Excel мы мы можем указать, например, так Cells(200,5) = 10, то через ADO....    
 
2) Ну, видно, так человеку и придётся делать, удалять (сохранять копии) старых данных в другой файл (архив базы)  
 
3) касательно разделения книги с кодом и книг с данными - встаёт вопрос как редактировать данные в книгах. Допустим у нас есть книги с данными "Продажи.xls", "Аукционы.xls" - чтобы занести любые данные в них - их сперва нужно открыть, а так же чтобы считать из них данные - их тоже нужно открыть, да? Или как предлагал Сергей через ADO вытягивать инфо.    
Может у кого-нибудь есть небольшой пример    
1) вытягивания инфо из закрытой книги через ADO?    
2) занесение инфо в закрытую (или открытую) книгу через ADO (или тут обычными средствами можно обойтись, типа, Workbooks.Open... и вперёд    
 
Просто сейчас человек собирается делать все базы в одном файле, но я уже сейчас вижу (общий план мне не рассказывали, я только сейчас начинаю понимать объёмы работы, как разработчика, так и своей и будущего пользователя этого файла)  
 
P.S. Что-то я подвяз с последним проектом, в том плане, что уже напрограммировал почти 3000 на сегодняшний день (в день по 300-450 строк пишу), код уже оптимизирую как могу, там классы, словари, массивы, функции и т.д. Но много форм с большим наборов контролов на каждой. Пока пропишешь каждому ComboBox списки заполнения, потом выгрузки всех контролов на лист....    
Кстати, я уже стал специалистом по ListView )))) Заказчик в них влюбился и теперь понимая, что они медленнее в обработке, чем ListBox работаем с ними )) Я уже и так беру массив с листа и циклом загоняю в ListView и так же обратно, сперва в массив из ListView, а потом массив сразу на лист, но всё равно, циклы у ListView проигрывают ListBox.List = array. А заказчик всё не унимается ... всё генерирует идеи каждый день, отчёт за отчётом, каждый день новая база, формы записи данных на лист, формы поиска, редактирования, удаления данных из БД ....  
 
Кстати, сегодня нужно было обработать 25 TextBox на форме, чтобы нельзя было вводить буквы туда (только цифры), если у обычного TextBox есть событие _Exit, то когда я оформил Класс, то в списке событий уже в Классе этого события не было, там есть Change, KeyPress и т.д. Но нет Exit. Пришлось немного переделывать с события Exit на Keypress. ПРосто я раньше думал, что события, что в форме у контрола, что в Классе должны быть одинаковыми, т.к. это один и тот же контрол.    
 
P.S. я спать (
 
Привет Паша, как уже сказ Владимир данные должны храниться отдельно.  
Но... ели данных мало то естественно их удобнее хранить в одной книге с пользовательским интерфейсом.  
Мой принцип выбора хранения данных скорее отталкивается от многопользовательского доступа.  
Все же главное не где хранить данные, а в каком виде, какова структура. Я имею ввиду сможешь ли ты быстро обрабатывать необходимые данные и получать требуемый результат.Если хранение данных организовано правильно, то и управлять ими будет легко из любого приложения.  
30% времени разработки уходит именно на создание структуры и логики , 40 % на создание форм, украшательство и тому подобное, 20 % на написание кода, и остальное на тестирование и комментарии. Хотя конечно бывает по разному :).  
--------------  
Паш по поводу обучения.... какой с меня учитель, я сам постоянно учусь... да и времени особо нету, если нужна помощь можешь сбросить мне на почту структуру данных я посмотрю и порекомендую как лучше все организовать.(естественно бесплатно).  
по запросам для Jet могу порекомендовать в очередной раз М.Грабер "Понимание SQL"
Спасибо
 
Пример базы прилагаю.    
Сейчас это выглядит как - один из листов в файле. и по нему говорят будут большие движения (большое накопление данных). Смысл его хранить в этом же файле, я особо не вижу. Сейчас к этому листу прикручено 2 формы. 1 - форма ввода нового аукциона (грубо говоря - для каждого столбца своё окошко, куда вводят данные) и 2-я форма - форма с 10 фильтрами (год, месяц, поставщик и т.д.) и ListView (аналог ListBox'a), в котором фильтруется вся информация по фильтрам (указали год - в ListView из 1000 строк показывается указанный год и т.д.)  
 
Просто на этом листе нет никаких вычислений и смысл его держать на листе я не вижу, вот ищу способ, куда его можно перекинуть - в другой Excel файл или же в mdb базу. Тут мне нужно понимать, чтобы из базы в, допустим, 20.000 строк быстро вытянуть нужные данные на ListBox (ListVies) - откуда удобнее и откуда быстрее будет это сделать  
 
P.S. Я спать, не спал с 14.00 часов вчерашнего дня.... и так каждый день )))
 
пока собирался с мыслями и делал пример файла забыл написать "Привет, Дим" ))) Сорри )
 
{quote}{login=Ластик}{date=07.02.2012 10:21}{thema=}{post}Я спать, не спал с 14.00 часов вчерашнего дня.... и так каждый день ))){/post}{/quote}  
Зря. Здоровый сон нужен для того, чтобы голова работала : )
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук


https://github.com/nervgh
 
Твою таблицу я бы разбил на  8 таблиц :).  
Сделал бы view(запросы)для отчетов с нужными наборами полей и данных и оставил бы их на сервере access.    
90% нужных отчетов можно получить с помощью сводной.  
останеться реализовать формы заполнения и редактирования справочников, и форма заполнения таблицы фактов (1 таблица). ну и собственно все... :)
Спасибо
 
Можно неопытному слово молвить? Так сказать, взгляд со стороны начинающего.  
1. Если база небольшая (1000-2000 строк), нет смысла разделять книги на базу и управление.  
2. Если база большая, разделение самой базы на книги (поквартально, по годам...) влечет за собой усложнение обработки сводной информации.
 
Ну и еще добавлю, что при переходе на хранение данных в базе данных, главное убедить (именно УБЕДИТЬ) заказчика отказаться от привычного в excel Copy Paste, а все данные заполнять через специальные формы. Как только пользователю дают возможность заполнять данные как ему заблагорассудиться, сразу начнуться проблемы : "Почему это не посчиталось, а почему это не выбралось и т.д."
Спасибо
 
Спасибо, Дим. Буду разбираться.  
Сегодня поговорил с заказчиком, попытался объяснить, что такие объёмы лучше хранить в БД, а не в Excel. Но получил ответ, что - давай пока всё сделаем в Excel, поработаем год, а там видно будет.  
По поводу базы аукционов мне было сказано, что за год может быть до 100.000 аукционов. Я увеличил базу (кол-во строк) до 100.000 - ну, в принципе, работать можно )) Главный тормоз - это ListView, если его заменить на ListBox, то вывод 100.000 и 16 столбцов происходит быстро (секунда-две). Поэтому в крайнем случае можно будет удалить ListView и поставить на форму ListBox.    
Кстати. файл со 100.000 строк на листе, с моим кодов в 2700 строк кода и 600 строк комментариев, с 9 формами с большим количеством контролов на них (до 80 контролов), весит всего 2мб в формате *.xlsb  
 
Но для себя нужно знать и уметь хранить данные в *.mdb, а работать с ней через форму в Excel. Поэтому конечно нужно разобраться с этим вопросом будет.  
Всем спасибо, буду потихоньку пробовать. Дмитрий набросал пример таблиц для mdb, нужно будет попробовать создать эту таблицу (там говорят связи нужно разные устанавливать... и т.д., я пока в этом 0 )  
 
Владимир (aka Kuzmich) мне сегодня ещё примеры кинул работы с базой Access через Excel, буду разбираться.    
 
Ещё раз всем спасибо!
 
{quote}{login=Ластик}{date=07.02.2012 09:38}{thema=}{post}Спасибо, Дим. Буду разбираться.  
Сегодня поговорил с заказчиком, попытался объяснить, что такие объёмы лучше хранить в БД, а не в Excel. Но получил ответ, что - давай пока всё сделаем в Excel, поработаем год, а там видно будет.  
По поводу базы аукционов мне было сказано, что за год может быть до 100.000 аукционов. Я увеличил базу (кол-во строк) до 100.000 - ну, в принципе, работать можно )) Главный тормоз - это ListView, если его заменить на ListBox, то вывод 100.000 и 16 столбцов происходит быстро (секунда-две). Поэтому в крайнем случае можно будет удалить ListView и поставить на форму ListBox.    
Кстати. файл со 100.000 строк на листе, с моим кодов в 2700 строк кода и 600 строк комментариев, с 9 формами с большим количеством контролов на них (до 80 контролов), весит всего 2мб в формате *.xlsb  
 
Но для себя нужно знать и уметь хранить данные в *.mdb, а работать с ней через форму в Excel. Поэтому конечно нужно разобраться с этим вопросом будет.  
Всем спасибо, буду потихоньку пробовать. Дмитрий набросал пример таблиц для mdb, нужно будет попробовать создать эту таблицу (там говорят связи нужно разные устанавливать... и т.д., я пока в этом 0 )  
 
Владимир (aka Kuzmich) мне сегодня ещё примеры кинул работы с базой Access через Excel, буду разбираться.    
 
Ещё раз всем спасибо!{/post}{/quote}  
Со "связями" поможем , обращайся.
Спасибо
Страницы: 1
Наверх