powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Архивирование или слияние БД в VFP7
25 сообщений из 50, страница 1 из 2
Архивирование или слияние БД в VFP7
    #32940752
Zarina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Привет народ.
Я наверное ленивый программист,но...уж очень не хочется почему то думать,тем более,что один раз уже думала,но не получилось.
Нет ли у кого наработок по такому вот поводу(или где об этом можно почитать):
предположим раз в пол года мне нужно чистить БД и оставлять там информацию только за последние 3 месяца.
До этого я делала это всё руками,просто перекладывала копию БД (получалось в архиве несколько БД только за разные периоды ), а в рабочей удаляла и паковала ненужные записи, но вот дошло время и пора бы автоматизировать,а конкретно сливать в одну БД.
Надеюсь я понятно обьяснила.
Но тут и пошли всякие разные проблемы,одинаковое название БД и т.д и т.п.

Памажите...
Спасибо.
...
Рейтинг: 0 / 0
Архивирование или слияние БД в VFP7
    #32940779
leaf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а что вы собственно хотели бы услышать ?
чистить БД и оставлять там информацию только за последние 3 месяца
ну вот и пишите программку которая будет сохранять вошу базу в архив с именем скажем tabel2005_1_kv.dbf и т.п. потом откидываете оставшееся содержимое через дуршлаг и пакуете
вопрос скороее организационный чем интелектуальный
...
Рейтинг: 0 / 0
Архивирование или слияние БД в VFP7
    #32940797
Фотография Grumax_user
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Поле типа DATE не пробовали в базе завести? Тут уж что хотите делайте:
Delete for myTable.My_date<dlDate_delete удаляйте
или запросы для курсоров или представлений строите за определенный период времени...

Код: plaintext
 
Я во все дела суюсь -> всесторонне разовьюсь
...
Рейтинг: 0 / 0
Архивирование или слияние БД в VFP7
    #32941107
Zarina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо конечно за намёки интеллектуальности...

Дело не в удалении,а в слиянии.
Наверное мы друг друга не понимаем.
Конкретно, есть в архиве БД -test с инфой 01.01.2004-01.07.2004 .
В начале года я хочу в базу test добавить информацию с 02.07.04-01.01.2005 из работающей базы с таким же названием.
И при этом названия везде должны остаться одинаковы ,чтобы в случае чего при надобности запустить работающий .exe и посмотреть что нужно.
...
Рейтинг: 0 / 0
Архивирование или слияние БД в VFP7
    #32941188
leaf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вообщето я говорил про организацию а не про интелект

по поводу пополнения базы есть такая команда
append from for ......
а по поводу перезапуска программы просто при запуске устанавливаете нужную таблицу а потом у таблицы кроме имени есть такая штука как алиас
к чему это а к тому что имена у таблицы могут быть разные а алиас им можно дать такой какой вам нуно
ну если вы по прежнему не желаете организовываться что ж я не знаю чем еще помочь
...
Рейтинг: 0 / 0
Архивирование или слияние БД в VFP7
    #32941218
w3d
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ZarinaСпасибо конечно за намёки интеллектуальности...

Дело не в удалении,а в слиянии.
Наверное мы друг друга не понимаем.
Конкретно, есть в архиве БД -test с инфой 01.01.2004-01.07.2004 .
В начале года я хочу в базу test добавить информацию с 02.07.04-01.01.2005 из работающей базы с таким же названием.
И при этом названия везде должны остаться одинаковы ,чтобы в случае чего при надобности запустить работающий .exe и посмотреть что нужно.

то есть, по окончании какого-то периода начинается работа с чистой базой?
...
Рейтинг: 0 / 0
Архивирование или слияние БД в VFP7
    #32941230
Фотография Grumax_user
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ZarinaНаверное мы друг друга не понимаем.
Мало инфы...если структура таблиц базы одинакова, то проблем нет. Пишешь прогу, в ней Insert'ы для каждой таблицы в соот. с твоей спецификой
Код: plaintext
Insert into My_TableZip Select * From My_table && Betwееn( 02 . 07 . 04 , 01 . 01 . 05 )
Если структура изменилась, то надо сначала создать копию за 02.07.04-01.01.05, а затем в нее импортировать данные за 01.01.2004-01.07.2004...
З.Ы. Но я бы посоветовал хранить все данные в основной базе, просто имея дату созданной записи(документа), а что не угодно всегда можно удалить.

Код: plaintext
 
Я во все дела суюсь -> всесторонне разовьюсь
...
Рейтинг: 0 / 0
Архивирование или слияние БД в VFP7
    #32941284
Фотография Владимир СА
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
...
Рейтинг: 0 / 0
Архивирование или слияние БД в VFP7
    #32942570
Igor Korolyov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hi Zarina!

Переносить данные в "архив" имеет смысл лишь в случае ОЧЕНЬ больших
объёмов - т.е. когда дело доходит до нескольких миллионов записей/сотен
мегабайт на таблицу (а работать в основном требуется действительно лишь с
самыми последними данными, и к архиву обращения крайне редки).
Как делать - уже написали - это элементарно... Только проверками это всё
обвешать (ну например после копирования в архив инфы, она не удалилась из
основной базы - чтоб потом дубликатов не возникло надо проверять).

Posted via ActualForum NNTP Server 1.1
...
Рейтинг: 0 / 0
Архивирование или слияние БД в VFP7
    #32943691
Zarina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем спасибо за внимание и за советы.
А по-поводу последнего...
Игорь,я бы не морочила себе голову со всем этим потому как обьёмы таблиц не достигают такого как вы говорите,но ...
тут помимо этого есть другие причины.
Сервера не очень мощные на которых БД лежит ,плюс сеть такая же , в программе ну очень многов сяких расчётов (например в гриде идёт поиск по всеё таблице и расчёт) и по мере накопления -за несколько месяцев работы всё начинает ну настолько медленно работает , что хочется простьо застрелиться.Ну к примеру ходим Enter по Grid , по скорости я могла бы уже перейти на пятое поле а он только на второе перескочил.
Вот поэтому и морочусь.
...
Рейтинг: 0 / 0
Архивирование или слияние БД в VFP7
    #32943946
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ZarinaВсем спасибо за внимание и за советы.
А по-поводу последнего...
Игорь,я бы не морочила себе голову со всем этим потому как обьёмы таблиц не достигают такого как вы говорите,но ...
тут помимо этого есть другие причины.
Сервера не очень мощные на которых БД лежит ,плюс сеть такая же , в программе ну очень многов сяких расчётов (например в гриде идёт поиск по всеё таблице и расчёт) и по мере накопления -за несколько месяцев работы всё начинает ну настолько медленно работает , что хочется простьо застрелиться.Ну к примеру ходим Enter по Grid , по скорости я могла бы уже перейти на пятое поле а он только на второе перескочил.
Вот поэтому и морочусь.
А на это есть другие решения. Под общим названием "оптимизация".

У меня сильное подозрение, что Вы выполняете кучу лишней работы. Т.е. Ваш код, как минимум, сильно избыточный. Или же используется не самая оптимальная идеология построения приложения.

Чтобы при простом переходе по полям был такой тормоз. Это надо очень постараться. Точнее, надо совсем не думать
...
Рейтинг: 0 / 0
Архивирование или слияние БД в VFP7
    #32946156
Zarina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Владимир я очень рада за Вас,что Вы хорошо думаете!
Я бы попросила без оскорблений и намёков.
Если Вам нечего посоветовать то пожалуйста вообще ничего не говорите,по крайней мере мне!
...
Рейтинг: 0 / 0
Архивирование или слияние БД в VFP7
    #32946548
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ZarinaВладимир я очень рада за Вас,что Вы хорошо думаете!
Я бы попросила без оскорблений и намёков.
Если Вам нечего посоветовать то пожалуйста вообще ничего не говорите,по крайней мере мне!
Извините. Не хотел обидеть.

Просто, чтобы что-то советовать по поводу оптимизации надо знать, в чем причина такого тормоза при простом переходе по полям (записям) таблицы. ЭТО никак, никоим образом не может (точнее, не должно!) зависеть об объема базы данных. Если у Вас ТАКОЕ происходит - это наводит на не очень лестные выводы по поводу авторов кода.

Если уж совсем честно, то я вообще не вижу причин для обид. Посмотрите начало этого топика:
ZarinaЯ наверное ленивый программист,но...уж очень не хочется почему то думать,тем более,что один раз уже думала,но не получилось.
...
Рейтинг: 0 / 0
Архивирование или слияние БД в VFP7
    #32946865
Strong
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ZarinaПривет народ.
Я наверное ленивый программист,но...уж очень не хочется почему то думать,тем более,что один раз уже думала,но не получилось.
.......
Надеюсь я понятно обьяснила.
.....



все понятно ;-)))
...
Рейтинг: 0 / 0
Архивирование или слияние БД в VFP7
    #32948011
Zarina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте Владимир!
Видимо Вы опытный программист и Вам виднее касаемо оптимизации,а я только учусь можно сказать,занимаясь этим всего 2 года и это был мой первый проект.
А по поводу влияния обьёма таблиц:
я думаю ,что в моём случае влияет,потому как в каждом поле идёт поиск соответствия по нескольким таблицам и куча расчётов.Когда работает 3-4 юсера ничего ,а когда 15 тогда плохо.

Многие выделили мою фразу о ленивости,это была шутка во-первых,а во-вторых если бы я занималась только разработкой БД - разбиралсь бы лучше , но у меня много других занятий и обязанностей,а времени к сожалению как всегда не хватает.Поэтому попрошу всех кто читает или отвечает не смеяться надо мной!

Ещё раз спасибо за участие!!!
...
Рейтинг: 0 / 0
Архивирование или слияние БД в VFP7
    #32948046
Strong
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Zarina
А по поводу влияния обьёма таблиц:
я думаю ,что в моём случае влияет,потому как в каждом поле идёт поиск соответствия по нескольким таблицам и куча расчётов.Когда работает 3-4 юсера ничего ,а когда 15 тогда плохо.


Значит надо оптимизировать расчеты и поиск . Это никогда не поздно, глядишь и работы будет поменьше ;-).
С этого и надо начинать. Расскажите лучше про структуру вашей базы и основные принципы работы приложения.
...
Рейтинг: 0 / 0
Архивирование или слияние БД в VFP7
    #32948180
Zarina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Хорошо Strong!
Я Вам напишу код и приблизительный смысл (совсем всё не могу,если Вы посмотрите на мой e-mail то поймёте в какой структуре я работаю,а по сему не имею права),что вообще за расчёт происходит в полях Grid,если Вы расскажете как это можно оптимизировать -буду Вам очень бдагодарна .
Но только 9 марта.
Сейчас у нас активное отмечание 8 марта на работе,а дома у меня нет инета.
Договорились?
...
Рейтинг: 0 / 0
Архивирование или слияние БД в VFP7
    #32948223
Strong
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ок

______________________________________
с уважением: Strong
...
Рейтинг: 0 / 0
Архивирование или слияние БД в VFP7
    #32950898
Zarina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравстуйте Strong!
Вы ещё не передумали помочь ?
...
Рейтинг: 0 / 0
Архивирование или слияние БД в VFP7
    #32950969
Strong
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
не
...
Рейтинг: 0 / 0
Архивирование или слияние БД в VFP7
    #32950974
Фотография Redrik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Зарина! Вы настолько заинтриговали меня вот этим:
авторесли Вы посмотрите на мой e-mail то поймёте в какой структуре я работаю,а по сему не имею права
а затем вот этим:
Код: plaintext
1.
2.
Информация об авторе: Zarina
E-Mail: [color=red]скрыт[/color]
Работа: Об этом лучше не стоит
что я тоже готов помочь Вам...

P.S. Ваша проблема мне хорошо знакома - авось пригожусь...
...
Рейтинг: 0 / 0
Архивирование или слияние БД в VFP7
    #32951111
Zarina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Хорошо !
Суть того, что происходит состоит в следующем : представьте, что Вы работаете в ломбарде
Получаете от народа или предприятий ценные изделия .
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,то в субботу он был ,а сегодня утром я решила его скрыть!!!
А за помощь спасибо,буду только рада!
...
Рейтинг: 0 / 0
Архивирование или слияние БД в VFP7
    #32951395
Фотография Redrik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Честно говоря, код трудноват для понимания... :-(
Одно можно сказать абсолютно точно - большое количество calculate'ов, да ещё и с такими фильтрами, аж никак не способствует скорости работы программы!
Не проще ли было бы вычислять разницу между DOC и FAKT немного иначе?
Скажем, заполняет юзер эти две таблицы, а потом получает разницу между ними примерно так:
SELECT * FROM DOC INTO TABLE TMP_RAZN ... WHERE ... AND NOT IN (SELECT * FROM FAKT WHERE ...)
При наличии "правильных" индексов всё будет "летать"!

P.S. Интрига осталась... Ну не смотрел я раньше Ваш mail... ;-)
...
Рейтинг: 0 / 0
Архивирование или слияние БД в VFP7
    #32951515
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я пока внимательно код не смотрел. Вечером посмотрю подробнее. На вскидку, есть очень много "тонких" мест в приведенном коде, очень плохо влияющих на скорость.

Кстати, я правильно понимаю общую идею:

Есть ПЛАН (был введен ранее) и есть ФАКТ (который вводится сейчас в Grid). В процессе ввода ФАКТА надо рассчитать разницу (по некоему относительно сложному алгоритму) и отобразить ее в дополнительных столбцах.
...
Рейтинг: 0 / 0
Архивирование или слияние БД в VFP7
    #32951535
Zarina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ну для того ,чтобы нормально понять код нужно знать задачу,а она очень специфическая.

Я вообще то сначала сделала через SELECT, но он почему то переодически плохо себя вёл: или считал неправильно,я так понимаю фильтр неправильно в нём отрабатывал ,или вообще давал 0.
Правда это был простой запрос ,а не с вложенным как вы написали - попробую ещё раз.

1) А что SELECT быстрее работает чем CALCULATE ?

2) А как можно проверить за сколько времени отработает запрос, т.е вот сейчас у меня CALCULATE и я хочу знать , сколько он работает,потом поменяю на SELECT и хочу посмотреть разницу во времени?

Не пойму почему Вас так интересует мой e-mail ,а соответственно и структура где я работаю?
Если Вас это успокоит ,то в моём e-mail есть вот такой кусочек gov.ua
Понятно?
...
Рейтинг: 0 / 0
25 сообщений из 50, страница 1 из 2
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Архивирование или слияние БД в VFP7
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]