powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Архивирование или слияние БД в VFP7
50 сообщений из 50, показаны все 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
Архивирование или слияние БД в VFP7
    #32951582
Sergey Ch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Zarinaв моём e-mail есть вот такой кусочек gov.ua Понятно?
Да, теперь это страшно опасно для жизни...
...
Рейтинг: 0 / 0
Архивирование или слияние БД в VFP7
    #32951651
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ZarinaНу для того ,чтобы нормально понять код нужно знать задачу,а она очень специфическая.
Не обязательно. Т.е. да, желательно понимать то, что делаешь. Но есть целый ряд чисто формальных приемов (не зависящих от конкретной задачи), которые, например, я использую уже "на автомате". Я знаю, что так будет быстрее. В Вашем коде эти формальные приемы сплошь и рядом нарушаются.

ZarinaЯ вообще то сначала сделала через SELECT, но он почему то переодически плохо себя вёл: или считал неправильно,я так понимаю фильтр неправильно в нём отрабатывал ,или вообще давал 0.
Правда это был простой запрос ,а не с вложенным как вы написали - попробую ещё раз.
Правила сравнения символьных строк в "обычных" командах регулирует настройка SET EXACT, а в команде Select-SQL настройка SET ANSI. Эти настройки похожи по сути, но все-таки есть отличия. Особенно при использовании символов тождественного равенства. Что само по себе есть не очень хорошо.

Zarina1) А что SELECT быстрее работает чем CALCULATE ?
В общем случае, без разницы. Но есть ряд факторов, которые могут замедлить (или ускорить) как выполнение Select-SQL, так и CALCULATE. Т.е. надо смотреть по конкретной задаче.

Zarina2) А как можно проверить за сколько времени отработает запрос, т.е вот сейчас у меня CALCULATE и я хочу знать , сколько он работает,потом поменяю на SELECT и хочу посмотреть разницу во времени?
Делается большая тестовая таблица с огромным количеством записей (не менее миллиона). Запоняется всяким мусором и запускаются нужные команды. Причем надо запускать несколько раз, поскольку FoxPro умеет кешировать данные. Первый запрос, как правило, выпоняется медленне последующих.
...
Рейтинг: 0 / 0
Архивирование или слияние БД в VFP7
    #32951794
Strong
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
SELECT fakt 
LOCATE FOR RECNO()=lnrecno
слабо заменить
Код: plaintext
GO lnrecno IN "fakt "

и т.д.

Сделай в таблицах fact , doc, индексное поле с уникальным номером и все связи производи по нему, больше seek меньше locate.
наример fact.id = doc.fact_id



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

______________________________________
с уважением: Strong
...
Рейтинг: 0 / 0
Архивирование или слияние БД в VFP7
    #32951922
Zarina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ВладимирМ
Кстати, я правильно понимаю общую идею:

Есть ПЛАН (был введен ранее) и есть ФАКТ (который вводится сейчас в Grid). В процессе ввода ФАКТА надо рассчитать разницу (по некоему относительно сложному алгоритму) и отобразить ее в дополнительных столбцах.

Сказать ,чтобы ПЛАН был введён ранее не совсем наверное правильно,потому как его можно менять и в процессе введения ФАКТ.
На форме есть 2 грида : один - ПЛАН (в коде DOC ) , а второй ФАКТ.
Таблицы отфильтрованы по id документа и id записи.
Процесс составления документа : рассмотрела изделие, вношу информацию в ПЛАН , в ФАКТ .
В гриде ФАКТА идёт расчёт который я писала (расчёт идёт по конкретной позиции , а не по всему документу сразу. Плюс в одной позиции может быть несколько записей,чтобы было понятнее - например берём золотой браслет- он состоит из жёлтого и белого золота и плюс в нём драгоценный камень .Так вот когда вносим ,то отдельной строкой вес жёлтого золота,отдельной белого,отдельной камня . И в таблицах есть idrec - код позиции, и id - это индекс записи внутри позиции).
И тут же если нужно,ставлю галочку добавить эту запись в 3 таблицу .

ВладимирМ В Вашем коде эти формальные приемы сплошь и рядом нарушаются.
Расскажите плис где и как это исправить?

А при чём тут SET ANSI я ведь сравниваю не символьные строки и чиста в основном.Или я чего то не понимаю?
А вообще у меня отключено и SET ANSI и SET EXACT.

Strong
GO lnrecno IN "fakt "

Сделай в таблицах fact , doc, индексное поле с уникальным номером и все связи производи по нему, больше seek меньше locate.
наример fact.id = doc.fact_id

GO лучше чем LOCATE ?

Индексное поле - конкретно id документа у меня уникально и связь идёт по нему во всех таблицах.

Strongзабыл спросить по какому событию это происходит ?
И еще я бы добавил в табличку столбиков и делал все расчеты при вставке и изменении в таблицу, а потом только сравнивал, смысла пересчитывать при простом перемещении по таблице нет.

происходит по LostFocus
...
Рейтинг: 0 / 0
Архивирование или слияние БД в VFP7
    #32951953
leaf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
знаете зорина можете на меня обижаться но всё же
тот код который Вы привели не отличаеться особой остротой мысли ну например
arrDoc(1)=0
arrDoc(2)=0


можно свести к одной строке : store 0 to arrDoc
код будет компактнее и читабельнее
скажете мелочь - согласен но у Вас в программе сплошные локейты ни одной команы сик красивые но абсолютно не нужные макроподстановки короче говоря что не строка то нужна дороботка
хотя конечно я не знаю специфики задачи
всё очень смахивает на "гнилой код"
Вам еще очень многому нужно учиться
а пока у Вас больше гонору чем навыка проще надо быть и люди к Вам потянуться
зы
а то что Вы работаете при правительстве Украины если я правильно понял мне до лампочки например я живу в России а у нас свободная страна
...
Рейтинг: 0 / 0
Архивирование или слияние БД в VFP7
    #32951979
leaf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вот смотрите мы пишем про одно и то же

**************************************************************
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

******моё
GOTO lcrecno_f_m IN Fakt
This.Parent.Parent.Column5.Text1.VALUE=round(fakt.zag-fakt.sk-arrVst(1),2)
This.Parent.Parent.Column11.Text1.VALUE=round(fakt.cina*(fakt.lig+fakt.him_lig),2)
REPLACE fakt.chis with IIF(alltrim(fakt.proba)=='900/750',Round(fakt.lig*0.81,2);
,Round((fakt.lig*val(fakt.proba))/1000,2)) IN Fakt

не говоря о много другом
...
Рейтинг: 0 / 0
Архивирование или слияние БД в VFP7
    #32951989
leaf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
зы
очень не люблю когда маузером перод носом машут
особенно девушки в кожанках
желаю Вам стать очень большим человеком
...
Рейтинг: 0 / 0
Архивирование или слияние БД в VFP7
    #32952017
leaf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
и потом редактировать таблицу в гриде это не есть хорошо
...
Рейтинг: 0 / 0
Архивирование или слияние БД в VFP7
    #32952021
leaf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
это не ексель знаете ли
...
Рейтинг: 0 / 0
Архивирование или слияние БД в VFP7
    #32952072
Zarina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
leafВам еще очень многому нужно учиться
а пока у Вас больше гонору чем навыка проще надо быть и люди к Вам потянуться

Насчёт учиться согласна,и об этом говорила в своём ответе Владимиру.
А вот насчёт гонора абсолютно с Вами не согласна,потому как мне кажется ,что гонора много у тех кто сразу начинает оскорблять или намекать,а ведь все мы начинаем с малого и если кто-то достигает высого уровня - не надо с высока смотреть на других,что вот мол как этого можно не знать или не додуматься или что-то ещё в таком духе.
Вы вот тоже с каким то наездом и недовольством ,а может быть и презрением высказались в своих ответах. А зачем? Ведь можно было просто сказать....

leafа то что Вы работаете при правительстве Украины если я правильно понял мне до лампочки например я живу в России а у нас свободная страна

У нас тоже свободная страна!!!
Но Вы наверное не работаете в гос. структуре , а по сему я думаю не можете об этом рассуждать.
...
Рейтинг: 0 / 0
Архивирование или слияние БД в VFP7
    #32952087
leaf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
увы не могу себе позволить роскоши заработать нормальную пенсию в гос структуре так деньги нужны сейчас
так что тут мы тоже думаем по разному
может и перегнул насчет маузера каюсь Вы мне верите?
В наше время никому верить низя... Мне моно хе-хе (Мюллер)
Но характерец у Вас железный эт точно
...
Рейтинг: 0 / 0
Архивирование или слияние БД в VFP7
    #32952090
leaf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а на счет прыгания из области в область и макроподстановках и всего остального подумате на досуге
...
Рейтинг: 0 / 0
Архивирование или слияние БД в VFP7
    #32952115
Zarina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
leaf Но характерец у Вас железный эт точно

А Вы так хорошо разбираетесь в людях,что по нескольким сообщениям сделали такой вывод? Или Вы по совместительству психолог ?

leafа на счет прыгания из области в область и макроподстановках и всего остального подумате на досуге

Обязательно подумаю и не только над этим, вот соберу все советы ...
...
Рейтинг: 0 / 0
Архивирование или слияние БД в VFP7
    #32952127
leaf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ну вопервых мне не 20 лет как Вам поэтому я кое-что понимаю в людях но и не 50 - 60 так что я еще помню что такое юношеский максимализм все с этого начинали
удачи Вам
главное палку не перегибайте проще с людми проще не обязательно круговую оборону держать она провацирует на нападение
...
Рейтинг: 0 / 0
Архивирование или слияние БД в VFP7
    #32952145
Zarina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Это Вы по фотографии решили,что мне 20?
Однако я хорошо выгляжу
Мне далеко не 20...

leaf
удачи Вам


Спасибо!!!
...
Рейтинг: 0 / 0
Архивирование или слияние БД в VFP7
    #32952300
Фотография Redrik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Зарина, а чем Вам не понравилось моё предложение из двух SELECT'ов?
Конечно, оно несколько упрощенное для "отлова" необходимых Вам расхождений, но, как мне кажется, можно не особо напрягаясь приспособить его для Вашей задачи... И выполнять этот код разово при "закрытии" вводимых документов... В общем мысли есть и рискну утверждать, что в нужном направлении! ;-) Единственное, что мешает более конкретному ответу - Ваша "загадочность"! :-( Было бы очень неплохо выложить кусочки (или образцы "от фонаря") Ваших таблиц и требуемый от этих кусочков результат - после этого Вы могли бы рассчитывать на соцсоревнование - кто быстрее Вам поможет! :-)

P.S. Присоединяюсь к Sergey Ch - gov.ua действительно наводит ужас! ;-) Что можно предположить - sbu? mvd? sta? KGB???

P.P.S. А если я Вам назову номер своей лицензии ДСТСЗИ? ;-) Можно будет рассчитывать на хоть немного меньший уровень секретности? ;-)
Вы же должны знать чей это департамент и на какую деятельность даются лицензии... ;-)

P.P.P.S. Я на фотографии тоже значительно моложе... Хе-хе...
...
Рейтинг: 0 / 0
Архивирование или слияние БД в VFP7
    #32952359
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Возможно многое из того, что я скажу далее Вам и так известно, но я исходил из написанного Вами кода. А он предполагает некоторую безграмотность в базовых понятиях.

Основа оптимизиации (здесь - ускорения) - это индексы. Нет индексов - нет оптимизации. Есть индексы - оптимизация возможна. Разумеется, кроме использования индексов есть и другие способы оптимизации, но все они на порядок медленнее, да и возможны в очень специфических случаях.

FoxPro не подерживает индексы с переменной длиной ключа. Т.е. если выражение индекса имеет вид AllTrim(MyField), то FoxPro, конечно, уберет ведущие пробелы, но затем самостоятельно (по собственной инициативе) добавит концевые пробелы до некоторой фиксированной длины.

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

А как же ведущие пробелы? А их надо отсекать принудительно на стадии ввода данных. Самый простой способ - это указать свойство Format = "T". Это не самый лучший способ, поскольку его можно обойти, но указание этого свойства на уровне свойств поля таблицы в 90% случаев вполне достаточно.

В результате, Ваше выражение фильтра

AllTrim(Fakt.idAkt)+AllTrim(fakt.idRec)==AllTrim(AktVRec.idAkt)+AllTrim(AktVRec.idRec)

Заменяется таким выражением

Fakt.idAkt=AktVRec.idAkt AND fakt.idRec=AktVRec.idRec

При этом я предполагаю:

1) Сравниваемые поля имеют одинаковую размерность (количество символов)
2) Ни в одной записи у этих полей нет ведущих пробелов
3) По каждому полю построен простой индекс в той сортировке (idxCollate()) в которой Вы собственно и работаете (SET COLLATE) в данный момент

При выполнении этих условий такое выражение фильтра будет оптимизировано (будут использовны индексы) и результат сравнения будет абсолютно идентичен первому выражению

Аналогично выражение фильтра

alltr(c_met)==alltr(lcmet) and alltr(proba)==alltr(lcproba)

Заменяется выражением

c_met=m.lcMet AND proba=m.lcProba

Разумеется, при формировании переменных m.lcMet и m.lcProba отсекать пробелы НЕ НАДО!

Кстати, сложение символьных строк подобным образом - это верный путь к ошибкам. Например:

"11"+"1" == "1"+"11"

Т.е. сравнение вернет истину, при абсолютно не корректном результате. Необходимо всегда оставлять под каждое символьное выражение фиксированное количество символов.

=================
Вы используете для поиска команду LOCATE. Надеюсь, Вы в курсе, что активный индекс тормозит ее выполнение. Т.е. перед выполнение команды LOCATE следует сбросить главный индекс (потом можно его восстановить).

SELECT fakt
SET ORDER TO 0
LOCATE FOR ...

То же самое справедливо и для команды CALCULATE. При сброшенном главном индексе скорость ее выполнения резко повышается.

====================
Как уже заметили ранее, переход на запись по GO на порядок быстрее поиска по LOCATE. Т.е. для возврата на старую запись следует использовать команду

GO m.lnRecno IN fakt

====================
Приведенный код - это перерасчет в результате изменение содержимого одной (текущей записи). Логично было бы убедиться, что такое изменение имело место быть. А не просто переход из однойго поля (записи) в другое. Т.е. надо запомнить значение поля при входе (When) и сравнить со значением при выходе. Если есть отличия, то запускать эту процедуру проверки.

Промежуточное значение можно записать в свойство TAG. Оно есть у каждого объекта FoxPro и представляет собой просто текст комментария никак не влияющий на работу программы. Единственное ограничение - он имеет символьный тип данных.

====================
Из приведенного кода я не совсем понял - будет ли модифицировано после расчет только та же самая запись или возможна модификация и других записей таблицы. Если модификация затрагивает всегда только текущую запись таблицы, то нет смысла делать пересчет по всем записям. Надо просто вычесть из суммы старое значение и прибавить новое. Безо всяких дополнительных CALCULATE.

====================
Вы говорите, что на форме 2 грид "отфильтрованы по id документа и id записи". Не совсем понял, что Вы имеет в виду, но если речь идет о SET FILTER или SET KEY, то советовал бы отказаться от их использования в пользу параметризированных LOCAL VIEW.

В отличии от наложенных фильтров, процесс открытия LOCAL VIEW несколько замедленый, но зато потом в процессе работы с Grid - никаких тормозов. Для фильтров ситуация прямо противоположная - быстрое открытие, но постоянное "притормаживание" при перемещении по записям.

Использование LOCAL VIEW отменяют все выше изложенные ограничения для индексов (т.е. код можно оставить без изменений), поскольку LOCAL VIEW - это выборка (результат выполнения Select-SQL) в которой, разумеется, нет индексов. Поэтому оптимизаци невозможна в принципе. Конечно, если не построить эти индексы при открытии Local View. Но не думаю, что это оправдано в данном случе.

====================
Ну, есть еще замечания по стилю. Но это уже мелочи. На скорость принципиального влияния не оказывают. Чтобы оптимизировать код еще больше надо уже знать собственно предметную область. Что именно этот код делает и для чего. Все что я описал выше - это замечания, основанные на приведенном коде абсолютно без какой-либо связи с поставленной задачей. Те самые "формальные" правила.
...
Рейтинг: 0 / 0
Архивирование или слияние БД в VFP7
    #32952372
Igor Korolyov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hi Zarina!

1) Советую очень крепко подумать над конструкцией типа
ALLTRIM(что-то)+ALLTRIM(то-то) == ALLTRIM() + ALLTRIM() -
поэкспериментировать с данными :) Это в общем случае НЕПРАВИЛЬНАЯ
констукция - в лучшем случае (в "что-то" никогда нет хвостовых и ведущих
пробелов, или первое всегда цифры а второе всегда буквы) - избыточная.
2) GO номер_записи ВСЕГДА быстрее ЛЮБОГО LOCATE.
3) Пересчитывать по LostFocus в принципе можно, но тогда уж добавь код
проверяющий что данные реально были изменены (либо сравнив с предварительно
запомненными "начальными", либо через свойство-флажок, выставляемый в
InteractiveChange и снимаемый после перерасчёта).
4) Пихать данные в Grid.Column.Text1.Value - по меньшей мере неразумно -
сделай себе курсор с нужным числом полей, и работай с курсором, а про то как
он отображается вообще забудь. Кстати если сделать всё именно на курсоре, то
наверняка будет проще организовать пересчёт и то, сколько данных было в
ТАБЛИЦЕ, уже не будет иметь никакого значения.
5) Код собственно пересчёта стоит вынести в специально созданный метод
формы, или вообще в свободную процедуру, а из обработчиков LostFocus или
AfterRowColChange уже эту процедуру вызывать.

Posted via ActualForum NNTP Server 1.1
...
Рейтинг: 0 / 0
Архивирование или слияние БД в VFP7
    #32952538
Strong_Guest
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Zarina попробуйте оптимизировать код и обязательно раскажите о результатах,
ВладимирМ и многие другие (да не обидятся неперечисленные) дали вам много информации к размышлению,
2 ВладимирМ
Спасибо вам ВладимирМ за неленивость в постах, это здорово что есть люди которые чтобы помочь человеку не лень написать пол странички и более. Лично для меня это подобно подвигу.
Я рад что есть такие люди.
...
Рейтинг: 0 / 0
Архивирование или слияние БД в VFP7
    #32952871
Zarina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Привет!
Прежде всего присоединяюсь к Strong_Guest в его словах.
Всем огромное спасибо за помощь,небезразличие к чужим проблемам! Я приму всё к сведению и буду учиться!
RedrikЗарина, а чем Вам не понравилось моё предложение из двух SELECT'ов?
Ну почему же не понравилось ,я говорила ,что делала ,но без вложенного SELECT и что попробую и Ваш вариант.

Redrik
Что можно предположить - sbu? mvd? sta? KGB???

Вы неугомонны...
Не попроще - НБУ
...
Рейтинг: 0 / 0
Архивирование или слияние БД в VFP7
    #32954310
Фотография Redrik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ZarinaВы неугомонны... Не попроще - НБУ
:-))) А скрывать это зачем? ;-)

Конечно, НБУ большая контора... а вдруг??? Фамилия Ивченко Вам ничего не говорит? (конечно в департаменте информационных систем! впрочем, сорри, точного названия подразделения не знаю...)

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

Хочу ещё раз сказать спасибо Вам и ВладимируМ .
Воспользовавшись Вашими советами (правда не в том проекте который обсуждался) а в проекте с которого собственно начался весь разговор - слияние БД,код который выполнялся 10 мин,теперь выполняется 1 мин.

А ещё хотела бы задать вопрос ВладимируМ.
Вы написали множество советов,в частности про команду LOCATE.
Вот у меня на столе лежит 4 книги по фоксу и не в одной не написаны подобные нюансы.
Скажите пожалуйста где можно почитать,посмотреть более глубоко и широко .
Может какие то конкретные источники посоветуете?
...
Рейтинг: 0 / 0
Архивирование или слияние БД в VFP7
    #32955855
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ZarinaВы написали множество советов,в частности про команду LOCATE.
Вот у меня на столе лежит 4 книги по фоксу и не в одной не написаны подобные нюансы.
Скажите пожалуйста где можно почитать,посмотреть более глубоко и широко .
Может какие то конкретные источники посоветуете?
На самом деле, книги на такие нюансы и не рассчитаны. Теоретически, все это есть в стандартном HELP к любой версии FoxPro.

Например, открываете HELP по команде LOCATE и обязательно увидите ссылку на статью вроде " Optimizing Applications " или " Using Rushmore... " в том же Help. Да и раздел "See Also", тоже дает информацию к размышлению.

Проблема только в том, что все это в стандартном HELP "рассыпано" по многим статьям и "размазано" по разным разделам каждой статьи. Что, вобщем-то, и логично. Цель статьи - это сформировать некое целостное представление по рассматриваемой проблеме или команде, а не по конкретной задаче .

По сути, единственный источник - это практика и конференции. По другому не получается Каждый стремиться получить информацию по своей задаче , а не общее представление "в целом".

Впрочем, кое-какие попытки предпринимаются. Но они далеки от идеала именно в силу специфики задачи.
...
Рейтинг: 0 / 0
Архивирование или слияние БД в VFP7
    #32956527
Фотография Redrik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ZarinaНу как это зачем скрывать?!
Я ведь присягу подписывала как гос.служащий и разглашение информации подсудное дело.
Разве Вы давали присягу "не разглашать" место своей работы? :-)

ZarinaФамилия Ивченко мне о многом говорит,потому как она один из моих непосредственных начальников.А называется это Департамент информатизации.
Я всего лишь один из выпускников кафедры, которой руководит её муж... ;-)
Но, помимо учёбы, мы с ним работали и над другими задачами, так что я был не совсем "рядовым" студентом... Чем чёрт не шутит - может Ваше начальство помнит каков был вкус у нежинских огурчиков лет эдак 12-13 назад, во времена дичайшей нищеты и дефицита... :-)))

ZarinaА где работаете Вы?
Обычный ЧП! ;-) С госслужбой порвал давно и, возможно, навсегда! ;-)
...
Рейтинг: 0 / 0
50 сообщений из 50, показаны все 2 страниц
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Архивирование или слияние БД в VFP7
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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