Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Архивирование или слияние БД в VFP7
|
|||
|---|---|---|---|
|
#18+
Привет народ. Я наверное ленивый программист,но...уж очень не хочется почему то думать,тем более,что один раз уже думала,но не получилось. Нет ли у кого наработок по такому вот поводу(или где об этом можно почитать): предположим раз в пол года мне нужно чистить БД и оставлять там информацию только за последние 3 месяца. До этого я делала это всё руками,просто перекладывала копию БД (получалось в архиве несколько БД только за разные периоды ), а в рабочей удаляла и паковала ненужные записи, но вот дошло время и пора бы автоматизировать,а конкретно сливать в одну БД. Надеюсь я понятно обьяснила. Но тут и пошли всякие разные проблемы,одинаковое название БД и т.д и т.п. Памажите... Спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.03.2005, 12:23 |
|
||
|
Архивирование или слияние БД в VFP7
|
|||
|---|---|---|---|
|
#18+
а что вы собственно хотели бы услышать ? чистить БД и оставлять там информацию только за последние 3 месяца ну вот и пишите программку которая будет сохранять вошу базу в архив с именем скажем tabel2005_1_kv.dbf и т.п. потом откидываете оставшееся содержимое через дуршлаг и пакуете вопрос скороее организационный чем интелектуальный ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.03.2005, 12:33 |
|
||
|
Архивирование или слияние БД в VFP7
|
|||
|---|---|---|---|
|
#18+
Поле типа DATE не пробовали в базе завести? Тут уж что хотите делайте: Delete for myTable.My_date<dlDate_delete удаляйте или запросы для курсоров или представлений строите за определенный период времени... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.03.2005, 12:38 |
|
||
|
Архивирование или слияние БД в VFP7
|
|||
|---|---|---|---|
|
#18+
Спасибо конечно за намёки интеллектуальности... Дело не в удалении,а в слиянии. Наверное мы друг друга не понимаем. Конкретно, есть в архиве БД -test с инфой 01.01.2004-01.07.2004 . В начале года я хочу в базу test добавить информацию с 02.07.04-01.01.2005 из работающей базы с таким же названием. И при этом названия везде должны остаться одинаковы ,чтобы в случае чего при надобности запустить работающий .exe и посмотреть что нужно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.03.2005, 13:55 |
|
||
|
Архивирование или слияние БД в VFP7
|
|||
|---|---|---|---|
|
#18+
вообщето я говорил про организацию а не про интелект по поводу пополнения базы есть такая команда append from for ...... а по поводу перезапуска программы просто при запуске устанавливаете нужную таблицу а потом у таблицы кроме имени есть такая штука как алиас к чему это а к тому что имена у таблицы могут быть разные а алиас им можно дать такой какой вам нуно ну если вы по прежнему не желаете организовываться что ж я не знаю чем еще помочь ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.03.2005, 14:10 |
|
||
|
Архивирование или слияние БД в VFP7
|
|||
|---|---|---|---|
|
#18+
ZarinaСпасибо конечно за намёки интеллектуальности... Дело не в удалении,а в слиянии. Наверное мы друг друга не понимаем. Конкретно, есть в архиве БД -test с инфой 01.01.2004-01.07.2004 . В начале года я хочу в базу test добавить информацию с 02.07.04-01.01.2005 из работающей базы с таким же названием. И при этом названия везде должны остаться одинаковы ,чтобы в случае чего при надобности запустить работающий .exe и посмотреть что нужно. то есть, по окончании какого-то периода начинается работа с чистой базой? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.03.2005, 14:18 |
|
||
|
Архивирование или слияние БД в VFP7
|
|||
|---|---|---|---|
|
#18+
ZarinaНаверное мы друг друга не понимаем. Мало инфы...если структура таблиц базы одинакова, то проблем нет. Пишешь прогу, в ней Insert'ы для каждой таблицы в соот. с твоей спецификой Код: plaintext З.Ы. Но я бы посоветовал хранить все данные в основной базе, просто имея дату созданной записи(документа), а что не угодно всегда можно удалить. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.03.2005, 14:23 |
|
||
|
Архивирование или слияние БД в VFP7
|
|||
|---|---|---|---|
|
#18+
ZarinaНаверное мы друг друга не понимаем. Конкретно, есть в архиве БД -test с инфой 01.01.2004-01.07.2004 . В начале года я хочу в базу test добавить информацию с 02.07.04-01.01.2005 из работающей базы с таким же названием. И при этом названия везде должны остаться одинаковы ,чтобы в случае чего при надобности запустить работающий .exe и посмотреть что нужно. Если имеется меню, то создать Архивирование ... USE <path>\test.dbf IN 0 ALIAS Test_arxiv SELECT Test_arxiv APPEND FROM Test FOR BETWEEN(Test.Date,{02.07.2004},{01.01/2005}) USE IN Test_arxiv ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.03.2005, 14:36 |
|
||
|
Архивирование или слияние БД в VFP7
|
|||
|---|---|---|---|
|
#18+
Hi Zarina! Переносить данные в "архив" имеет смысл лишь в случае ОЧЕНЬ больших объёмов - т.е. когда дело доходит до нескольких миллионов записей/сотен мегабайт на таблицу (а работать в основном требуется действительно лишь с самыми последними данными, и к архиву обращения крайне редки). Как делать - уже написали - это элементарно... Только проверками это всё обвешать (ну например после копирования в архив инфы, она не удалилась из основной базы - чтоб потом дубликатов не возникло надо проверять). Posted via ActualForum NNTP Server 1.1 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.03.2005, 00:59 |
|
||
|
Архивирование или слияние БД в VFP7
|
|||
|---|---|---|---|
|
#18+
Всем спасибо за внимание и за советы. А по-поводу последнего... Игорь,я бы не морочила себе голову со всем этим потому как обьёмы таблиц не достигают такого как вы говорите,но ... тут помимо этого есть другие причины. Сервера не очень мощные на которых БД лежит ,плюс сеть такая же , в программе ну очень многов сяких расчётов (например в гриде идёт поиск по всеё таблице и расчёт) и по мере накопления -за несколько месяцев работы всё начинает ну настолько медленно работает , что хочется простьо застрелиться.Ну к примеру ходим Enter по Grid , по скорости я могла бы уже перейти на пятое поле а он только на второе перескочил. Вот поэтому и морочусь. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.03.2005, 14:06 |
|
||
|
Архивирование или слияние БД в VFP7
|
|||
|---|---|---|---|
|
#18+
ZarinaВсем спасибо за внимание и за советы. А по-поводу последнего... Игорь,я бы не морочила себе голову со всем этим потому как обьёмы таблиц не достигают такого как вы говорите,но ... тут помимо этого есть другие причины. Сервера не очень мощные на которых БД лежит ,плюс сеть такая же , в программе ну очень многов сяких расчётов (например в гриде идёт поиск по всеё таблице и расчёт) и по мере накопления -за несколько месяцев работы всё начинает ну настолько медленно работает , что хочется простьо застрелиться.Ну к примеру ходим Enter по Grid , по скорости я могла бы уже перейти на пятое поле а он только на второе перескочил. Вот поэтому и морочусь. А на это есть другие решения. Под общим названием "оптимизация". У меня сильное подозрение, что Вы выполняете кучу лишней работы. Т.е. Ваш код, как минимум, сильно избыточный. Или же используется не самая оптимальная идеология построения приложения. Чтобы при простом переходе по полям был такой тормоз. Это надо очень постараться. Точнее, надо совсем не думать ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.03.2005, 15:07 |
|
||
|
Архивирование или слияние БД в VFP7
|
|||
|---|---|---|---|
|
#18+
Владимир я очень рада за Вас,что Вы хорошо думаете! Я бы попросила без оскорблений и намёков. Если Вам нечего посоветовать то пожалуйста вообще ничего не говорите,по крайней мере мне! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.03.2005, 13:16 |
|
||
|
Архивирование или слияние БД в VFP7
|
|||
|---|---|---|---|
|
#18+
ZarinaВладимир я очень рада за Вас,что Вы хорошо думаете! Я бы попросила без оскорблений и намёков. Если Вам нечего посоветовать то пожалуйста вообще ничего не говорите,по крайней мере мне! Извините. Не хотел обидеть. Просто, чтобы что-то советовать по поводу оптимизации надо знать, в чем причина такого тормоза при простом переходе по полям (записям) таблицы. ЭТО никак, никоим образом не может (точнее, не должно!) зависеть об объема базы данных. Если у Вас ТАКОЕ происходит - это наводит на не очень лестные выводы по поводу авторов кода. Если уж совсем честно, то я вообще не вижу причин для обид. Посмотрите начало этого топика: ZarinaЯ наверное ленивый программист,но...уж очень не хочется почему то думать,тем более,что один раз уже думала,но не получилось. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.03.2005, 14:58 |
|
||
|
Архивирование или слияние БД в VFP7
|
|||
|---|---|---|---|
|
#18+
ZarinaПривет народ. Я наверное ленивый программист,но...уж очень не хочется почему то думать,тем более,что один раз уже думала,но не получилось. ....... Надеюсь я понятно обьяснила. ..... все понятно ;-))) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.03.2005, 16:19 |
|
||
|
Архивирование или слияние БД в VFP7
|
|||
|---|---|---|---|
|
#18+
Здравствуйте Владимир! Видимо Вы опытный программист и Вам виднее касаемо оптимизации,а я только учусь можно сказать,занимаясь этим всего 2 года и это был мой первый проект. А по поводу влияния обьёма таблиц: я думаю ,что в моём случае влияет,потому как в каждом поле идёт поиск соответствия по нескольким таблицам и куча расчётов.Когда работает 3-4 юсера ничего ,а когда 15 тогда плохо. Многие выделили мою фразу о ленивости,это была шутка во-первых,а во-вторых если бы я занималась только разработкой БД - разбиралсь бы лучше , но у меня много других занятий и обязанностей,а времени к сожалению как всегда не хватает.Поэтому попрошу всех кто читает или отвечает не смеяться надо мной! Ещё раз спасибо за участие!!! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.03.2005, 12:02 |
|
||
|
Архивирование или слияние БД в VFP7
|
|||
|---|---|---|---|
|
#18+
Zarina А по поводу влияния обьёма таблиц: я думаю ,что в моём случае влияет,потому как в каждом поле идёт поиск соответствия по нескольким таблицам и куча расчётов.Когда работает 3-4 юсера ничего ,а когда 15 тогда плохо. Значит надо оптимизировать расчеты и поиск . Это никогда не поздно, глядишь и работы будет поменьше ;-). С этого и надо начинать. Расскажите лучше про структуру вашей базы и основные принципы работы приложения. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.03.2005, 12:15 |
|
||
|
Архивирование или слияние БД в VFP7
|
|||
|---|---|---|---|
|
#18+
Хорошо Strong! Я Вам напишу код и приблизительный смысл (совсем всё не могу,если Вы посмотрите на мой e-mail то поймёте в какой структуре я работаю,а по сему не имею права),что вообще за расчёт происходит в полях Grid,если Вы расскажете как это можно оптимизировать -буду Вам очень бдагодарна . Но только 9 марта. Сейчас у нас активное отмечание 8 марта на работе,а дома у меня нет инета. Договорились? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.03.2005, 12:52 |
|
||
|
Архивирование или слияние БД в VFP7
|
|||
|---|---|---|---|
|
#18+
ок ______________________________________ с уважением: Strong ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.03.2005, 13:08 |
|
||
|
Архивирование или слияние БД в VFP7
|
|||
|---|---|---|---|
|
#18+
Здравстуйте Strong! Вы ещё не передумали помочь ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.03.2005, 11:55 |
|
||
|
Архивирование или слияние БД в VFP7
|
|||
|---|---|---|---|
|
#18+
не ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.03.2005, 12:15 |
|
||
|
Архивирование или слияние БД в VFP7
|
|||
|---|---|---|---|
|
#18+
Зарина! Вы настолько заинтриговали меня вот этим: авторесли Вы посмотрите на мой e-mail то поймёте в какой структуре я работаю,а по сему не имею права а затем вот этим: Код: plaintext 1. 2. P.S. Ваша проблема мне хорошо знакома - авось пригожусь... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.03.2005, 12:17 |
|
||
|
Архивирование или слияние БД в VFP7
|
|||
|---|---|---|---|
|
#18+
Хорошо ! Суть того, что происходит состоит в следующем : представьте, что Вы работаете в ломбарде Получаете от народа или предприятий ценные изделия . 1) У поставщика ( так назовём условно всех кто вам сдаёт чего-нибудь) есть документы где зафиксировано ,что он вам сдаёт - металл , его вес,проба и т.д - таблица DOC 2) Вы в свою очередь перевешиваете ,проверяете и составляете свою характеристику - таблица FAKT 3) Содержимое документов поставщика и ваших могут не совпадать и тогда это должно быть зафиксировано в 3 месте - таблица RAZN и не просто галочка ,что вот мол не совпадает, а полностью вынесена запись которая не совпадает. Из этого всего вы составляете один документ , где всё это записано. Пользователь который составляет этот документ заносит информацию сначала в DOC , потом в FAKT и в гриде который привязан к таблице FAKT идет расчёт и сравнение с DOC Так вот сие происходящее : local lclig,; lcchis,; lchimch,; lcsum_vst,; lcriz_v,; lcriz_sum,; lcsum,; lcid,; arrFakt(3),; lc_id_V,; lcFilter_V,; lcfilter_M,; lnrecno local array arrDoc(2) arrDoc(1)=0 arrDoc(2)=0 local array arrVst(1) arrVst(1)=0 lcOldArea=Alias() IF !EMPTY(fakt.c_met) and between(val(c_met),1,100) SELECT fakt lcmet=alltr(fakt.c_met) lcproba=alltr(fakt.proba) lc_id_V=alltr(fakt.id_V) lcrecno_f_m=Recno() lcFilter_V='AllTrim(Fakt.idAkt)+AllTrim(fakt.idRec)==AllTrim(AktVRec.idAkt)+AllTrim(AktVRec.idRec)' - (фильтр этот документ и именно это изделие в документе ) lcfilter_M='alltr(c_met)==alltr(lcmet) and alltr(proba)==alltr(lcproba)' ************************************************************** && если есть вставки пересчитываем их общий вес (имеется в ввиду если в изделии есть драгоценные камни помимо метала ) LOCATE FOR between(val(c_met),200,300) IF FOUND() lnRecno=Recno('fakt') && первая запись с вставкой (она может быть не одна) calculate sum(IIF(fakt.c_od=[1],fakt.vst,Round(fakt.vst*0.2,2))); for &lcFilter_V; and alltrim(fakt.id_V)==alltrim(lc_id_V); to array arrVst SELECT fakt LOCATE FOR RECNO()=lnrecno ELSE arrVst(1)=0 ENDIF ************************************************************** && пересчитываем характеристики метала и заносим в соответствующие поля грида SELECT Fakt go record lcrecno_f_m lclig=round(fakt.zag-fakt.sk-arrVst(1),2) This.Parent.Parent.Column5.Text1.VALUE=lclig lcsum=round(fakt.cina*(fakt.lig+fakt.him_lig),2) This.Parent.Parent.Column11.Text1.VALUE=lcsum IF alltrim(fakt.proba)=='900/750' lcchis=Round(fakt.lig*0.81,2) ELSE lcchis=Round((fakt.lig*val(fakt.proba))/1000,2) ENDIF REPLACE fakt.chis with lcchis ************************************************************** && теперь считаем разницу в весе и сумме между тем ,что в DOC и FAKT SELECT fakt lcrecno_f_m=recno() calculate sum(fakt.lig),sum(fakt.him_lig),sum(fakt.sum_z); for &lcFilter_M; to array arrFakt SELECT fakt LOCATE FOR RECNO()=lcrecno_f_m SELECT doc lcrecno=Recno('doc') calculate sum(doc.lig),sum(doc.sum_z); for &lcFilter_M; to array arrDoc SELECT doc LOCATE FOR RECNO()=lcrecno lcriz_v=arrFakt(1)+arrFakt(2)-arrDoc(1) lcriz_sum=arrFakt(3)-arrDoc(2) && заносим разницу в соответствующие поля SELECT fakt LOCATE FOR alltr(fakt.c_met)==alltr(lcmet) and alltr(fakt.proba)==alltr(lcproba) This.Parent.Parent.Column14.Text1.Value=lcriz_s This.Parent.Parent.Column13.Text1.Value=lcriz_v LOCATE FOR RECNO()=lcrecno_f_m Thisform.Refresh() && проверка правильности пересчёта одной их характеристик метала IF fakt.lig+fakt.sk+arrVst(1)=fakt.zag ELSE messagebox("Stop!",[]) ENDIF ELSE ENDIF SELECT &lcOldArea Thisform.Refresh() Вот такой расчёт происходит практически в каждом поле грида который привязан к FAKT и помимо этого в AfterRowColChange грида идёт проверка, что если эта запись вынесена в таблицу RAZN содержимое полей должно совпадать ,если не совпадает заменить. ------------------------------------------------------- Привет Redrik! Что касаемо моего e-mail,то в субботу он был ,а сегодня утром я решила его скрыть!!! А за помощь спасибо,буду только рада! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.03.2005, 12:55 |
|
||
|
Архивирование или слияние БД в VFP7
|
|||
|---|---|---|---|
|
#18+
Честно говоря, код трудноват для понимания... :-( Одно можно сказать абсолютно точно - большое количество calculate'ов, да ещё и с такими фильтрами, аж никак не способствует скорости работы программы! Не проще ли было бы вычислять разницу между DOC и FAKT немного иначе? Скажем, заполняет юзер эти две таблицы, а потом получает разницу между ними примерно так: SELECT * FROM DOC INTO TABLE TMP_RAZN ... WHERE ... AND NOT IN (SELECT * FROM FAKT WHERE ...) При наличии "правильных" индексов всё будет "летать"! P.S. Интрига осталась... Ну не смотрел я раньше Ваш mail... ;-) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.03.2005, 14:41 |
|
||
|
Архивирование или слияние БД в VFP7
|
|||
|---|---|---|---|
|
#18+
Я пока внимательно код не смотрел. Вечером посмотрю подробнее. На вскидку, есть очень много "тонких" мест в приведенном коде, очень плохо влияющих на скорость. Кстати, я правильно понимаю общую идею: Есть ПЛАН (был введен ранее) и есть ФАКТ (который вводится сейчас в Grid). В процессе ввода ФАКТА надо рассчитать разницу (по некоему относительно сложному алгоритму) и отобразить ее в дополнительных столбцах. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.03.2005, 15:22 |
|
||
|
Архивирование или слияние БД в VFP7
|
|||
|---|---|---|---|
|
#18+
Ну для того ,чтобы нормально понять код нужно знать задачу,а она очень специфическая. Я вообще то сначала сделала через SELECT, но он почему то переодически плохо себя вёл: или считал неправильно,я так понимаю фильтр неправильно в нём отрабатывал ,или вообще давал 0. Правда это был простой запрос ,а не с вложенным как вы написали - попробую ещё раз. 1) А что SELECT быстрее работает чем CALCULATE ? 2) А как можно проверить за сколько времени отработает запрос, т.е вот сейчас у меня CALCULATE и я хочу знать , сколько он работает,потом поменяю на SELECT и хочу посмотреть разницу во времени? Не пойму почему Вас так интересует мой e-mail ,а соответственно и структура где я работаю? Если Вас это успокоит ,то в моём e-mail есть вот такой кусочек gov.ua Понятно? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.03.2005, 15:27 |
|
||
|
|

start [/forum/topic.php?fid=41&msg=32951515&tid=1594668]: |
0ms |
get settings: |
7ms |
get forum list: |
12ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
42ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
59ms |
get tp. blocked users: |
1ms |
| others: | 205ms |
| total: | 340ms |

| 0 / 0 |
