Этот баннер — требование Роскомнадзора для исполнения 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 |
|
||
|
Архивирование или слияние БД в VFP7
|
|||
|---|---|---|---|
|
#18+
Zarinaв моём e-mail есть вот такой кусочек gov.ua Понятно? Да, теперь это страшно опасно для жизни... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.03.2005, 15:36 |
|
||
|
Архивирование или слияние БД в VFP7
|
|||
|---|---|---|---|
|
#18+
ZarinaНу для того ,чтобы нормально понять код нужно знать задачу,а она очень специфическая. Не обязательно. Т.е. да, желательно понимать то, что делаешь. Но есть целый ряд чисто формальных приемов (не зависящих от конкретной задачи), которые, например, я использую уже "на автомате". Я знаю, что так будет быстрее. В Вашем коде эти формальные приемы сплошь и рядом нарушаются. ZarinaЯ вообще то сначала сделала через SELECT, но он почему то переодически плохо себя вёл: или считал неправильно,я так понимаю фильтр неправильно в нём отрабатывал ,или вообще давал 0. Правда это был простой запрос ,а не с вложенным как вы написали - попробую ещё раз. Правила сравнения символьных строк в "обычных" командах регулирует настройка SET EXACT, а в команде Select-SQL настройка SET ANSI. Эти настройки похожи по сути, но все-таки есть отличия. Особенно при использовании символов тождественного равенства. Что само по себе есть не очень хорошо. Zarina1) А что SELECT быстрее работает чем CALCULATE ? В общем случае, без разницы. Но есть ряд факторов, которые могут замедлить (или ускорить) как выполнение Select-SQL, так и CALCULATE. Т.е. надо смотреть по конкретной задаче. Zarina2) А как можно проверить за сколько времени отработает запрос, т.е вот сейчас у меня CALCULATE и я хочу знать , сколько он работает,потом поменяю на SELECT и хочу посмотреть разницу во времени? Делается большая тестовая таблица с огромным количеством записей (не менее миллиона). Запоняется всяким мусором и запускаются нужные команды. Причем надо запускать несколько раз, поскольку FoxPro умеет кешировать данные. Первый запрос, как правило, выпоняется медленне последующих. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.03.2005, 15:54 |
|
||
|
Архивирование или слияние БД в VFP7
|
|||
|---|---|---|---|
|
#18+
Код: plaintext 1. Код: plaintext и т.д. Сделай в таблицах fact , doc, индексное поле с уникальным номером и все связи производи по нему, больше seek меньше locate. наример fact.id = doc.fact_id ______________________________________ с уважением: Strong ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.03.2005, 16:35 |
|
||
|
Архивирование или слияние БД в VFP7
|
|||
|---|---|---|---|
|
#18+
забыл спросить по какому событию это происходит ? И еще я бы добавил в табличку столбиков и делал все расчеты при вставке и изменении в таблицу, а потом только сравнивал, смысла пересчитывать при простом перемещении по таблице нет. ______________________________________ с уважением: Strong ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.03.2005, 16:43 |
|
||
|
Архивирование или слияние БД в VFP7
|
|||
|---|---|---|---|
|
#18+
ВладимирМ Кстати, я правильно понимаю общую идею: Есть ПЛАН (был введен ранее) и есть ФАКТ (который вводится сейчас в 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 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.03.2005, 17:18 |
|
||
|
Архивирование или слияние БД в VFP7
|
|||
|---|---|---|---|
|
#18+
знаете зорина можете на меня обижаться но всё же тот код который Вы привели не отличаеться особой остротой мысли ну например arrDoc(1)=0 arrDoc(2)=0 можно свести к одной строке : store 0 to arrDoc код будет компактнее и читабельнее скажете мелочь - согласен но у Вас в программе сплошные локейты ни одной команы сик красивые но абсолютно не нужные макроподстановки короче говоря что не строка то нужна дороботка хотя конечно я не знаю специфики задачи всё очень смахивает на "гнилой код" Вам еще очень многому нужно учиться а пока у Вас больше гонору чем навыка проще надо быть и люди к Вам потянуться зы а то что Вы работаете при правительстве Украины если я правильно понял мне до лампочки например я живу в России а у нас свободная страна ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.03.2005, 17:28 |
|
||
|
Архивирование или слияние БД в VFP7
|
|||
|---|---|---|---|
|
#18+
вот смотрите мы пишем про одно и то же ************************************************************** 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 не говоря о много другом ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.03.2005, 17:36 |
|
||
|
Архивирование или слияние БД в VFP7
|
|||
|---|---|---|---|
|
#18+
зы очень не люблю когда маузером перод носом машут особенно девушки в кожанках желаю Вам стать очень большим человеком ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.03.2005, 17:39 |
|
||
|
Архивирование или слияние БД в VFP7
|
|||
|---|---|---|---|
|
#18+
и потом редактировать таблицу в гриде это не есть хорошо ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.03.2005, 17:49 |
|
||
|
Архивирование или слияние БД в VFP7
|
|||
|---|---|---|---|
|
#18+
это не ексель знаете ли ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.03.2005, 17:50 |
|
||
|
Архивирование или слияние БД в VFP7
|
|||
|---|---|---|---|
|
#18+
leafВам еще очень многому нужно учиться а пока у Вас больше гонору чем навыка проще надо быть и люди к Вам потянуться Насчёт учиться согласна,и об этом говорила в своём ответе Владимиру. А вот насчёт гонора абсолютно с Вами не согласна,потому как мне кажется ,что гонора много у тех кто сразу начинает оскорблять или намекать,а ведь все мы начинаем с малого и если кто-то достигает высого уровня - не надо с высока смотреть на других,что вот мол как этого можно не знать или не додуматься или что-то ещё в таком духе. Вы вот тоже с каким то наездом и недовольством ,а может быть и презрением высказались в своих ответах. А зачем? Ведь можно было просто сказать.... leafа то что Вы работаете при правительстве Украины если я правильно понял мне до лампочки например я живу в России а у нас свободная страна У нас тоже свободная страна!!! Но Вы наверное не работаете в гос. структуре , а по сему я думаю не можете об этом рассуждать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.03.2005, 18:05 |
|
||
|
Архивирование или слияние БД в VFP7
|
|||
|---|---|---|---|
|
#18+
увы не могу себе позволить роскоши заработать нормальную пенсию в гос структуре так деньги нужны сейчас так что тут мы тоже думаем по разному может и перегнул насчет маузера каюсь Вы мне верите? В наше время никому верить низя... Мне моно хе-хе (Мюллер) Но характерец у Вас железный эт точно ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.03.2005, 18:11 |
|
||
|
Архивирование или слияние БД в VFP7
|
|||
|---|---|---|---|
|
#18+
а на счет прыгания из области в область и макроподстановках и всего остального подумате на досуге ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.03.2005, 18:13 |
|
||
|
Архивирование или слияние БД в VFP7
|
|||
|---|---|---|---|
|
#18+
leaf Но характерец у Вас железный эт точно А Вы так хорошо разбираетесь в людях,что по нескольким сообщениям сделали такой вывод? Или Вы по совместительству психолог ? leafа на счет прыгания из области в область и макроподстановках и всего остального подумате на досуге Обязательно подумаю и не только над этим, вот соберу все советы ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.03.2005, 18:26 |
|
||
|
Архивирование или слияние БД в VFP7
|
|||
|---|---|---|---|
|
#18+
ну вопервых мне не 20 лет как Вам поэтому я кое-что понимаю в людях но и не 50 - 60 так что я еще помню что такое юношеский максимализм все с этого начинали удачи Вам главное палку не перегибайте проще с людми проще не обязательно круговую оборону держать она провацирует на нападение ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.03.2005, 18:33 |
|
||
|
Архивирование или слияние БД в VFP7
|
|||
|---|---|---|---|
|
#18+
Это Вы по фотографии решили,что мне 20? Однако я хорошо выгляжу Мне далеко не 20... leaf удачи Вам Спасибо!!! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.03.2005, 18:41 |
|
||
|
Архивирование или слияние БД в VFP7
|
|||
|---|---|---|---|
|
#18+
Зарина, а чем Вам не понравилось моё предложение из двух SELECT'ов? Конечно, оно несколько упрощенное для "отлова" необходимых Вам расхождений, но, как мне кажется, можно не особо напрягаясь приспособить его для Вашей задачи... И выполнять этот код разово при "закрытии" вводимых документов... В общем мысли есть и рискну утверждать, что в нужном направлении! ;-) Единственное, что мешает более конкретному ответу - Ваша "загадочность"! :-( Было бы очень неплохо выложить кусочки (или образцы "от фонаря") Ваших таблиц и требуемый от этих кусочков результат - после этого Вы могли бы рассчитывать на соцсоревнование - кто быстрее Вам поможет! :-) P.S. Присоединяюсь к Sergey Ch - gov.ua действительно наводит ужас! ;-) Что можно предположить - sbu? mvd? sta? KGB??? P.P.S. А если я Вам назову номер своей лицензии ДСТСЗИ? ;-) Можно будет рассчитывать на хоть немного меньший уровень секретности? ;-) Вы же должны знать чей это департамент и на какую деятельность даются лицензии... ;-) P.P.P.S. Я на фотографии тоже значительно моложе... Хе-хе... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.03.2005, 21:35 |
|
||
|
Архивирование или слияние БД в VFP7
|
|||
|---|---|---|---|
|
#18+
Возможно многое из того, что я скажу далее Вам и так известно, но я исходил из написанного Вами кода. А он предполагает некоторую безграмотность в базовых понятиях. Основа оптимизиации (здесь - ускорения) - это индексы. Нет индексов - нет оптимизации. Есть индексы - оптимизация возможна. Разумеется, кроме использования индексов есть и другие способы оптимизации, но все они на порядок медленнее, да и возможны в очень специфических случаях. 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. Но не думаю, что это оправдано в данном случе. ==================== Ну, есть еще замечания по стилю. Но это уже мелочи. На скорость принципиального влияния не оказывают. Чтобы оптимизировать код еще больше надо уже знать собственно предметную область. Что именно этот код делает и для чего. Все что я описал выше - это замечания, основанные на приведенном коде абсолютно без какой-либо связи с поставленной задачей. Те самые "формальные" правила. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.03.2005, 23:32 |
|
||
|
Архивирование или слияние БД в VFP7
|
|||
|---|---|---|---|
|
#18+
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 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.03.2005, 00:19 |
|
||
|
Архивирование или слияние БД в VFP7
|
|||
|---|---|---|---|
|
#18+
Zarina попробуйте оптимизировать код и обязательно раскажите о результатах, ВладимирМ и многие другие (да не обидятся неперечисленные) дали вам много информации к размышлению, 2 ВладимирМ Спасибо вам ВладимирМ за неленивость в постах, это здорово что есть люди которые чтобы помочь человеку не лень написать пол странички и более. Лично для меня это подобно подвигу. Я рад что есть такие люди. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.03.2005, 09:18 |
|
||
|
Архивирование или слияние БД в VFP7
|
|||
|---|---|---|---|
|
#18+
Привет! Прежде всего присоединяюсь к Strong_Guest в его словах. Всем огромное спасибо за помощь,небезразличие к чужим проблемам! Я приму всё к сведению и буду учиться! RedrikЗарина, а чем Вам не понравилось моё предложение из двух SELECT'ов? Ну почему же не понравилось ,я говорила ,что делала ,но без вложенного SELECT и что попробую и Ваш вариант. Redrik Что можно предположить - sbu? mvd? sta? KGB??? Вы неугомонны... Не попроще - НБУ ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.03.2005, 11:33 |
|
||
|
Архивирование или слияние БД в VFP7
|
|||
|---|---|---|---|
|
#18+
ZarinaВы неугомонны... Не попроще - НБУ :-))) А скрывать это зачем? ;-) Конечно, НБУ большая контора... а вдруг??? Фамилия Ивченко Вам ничего не говорит? (конечно в департаменте информационных систем! впрочем, сорри, точного названия подразделения не знаю...) Успехов! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.03.2005, 19:11 |
|
||
|
Архивирование или слияние БД в VFP7
|
|||
|---|---|---|---|
|
#18+
Здравствуйте REDERIK! Ну как это зачем скрывать?! Я ведь присягу подписывала как гос.служащий и разглашение информации подсудное дело. Вот например в прошлом году у меня была ситуация: в транспорте вытянули кошелёк и пропуск на работу. Так вот мало того ,что писала обьяснительную очень подробную, так ещё и наши соответствующие органы вели расследование и мне месяц не давали постоянного пропуска,на работу ходила с временным! А ведь это всего лишь пропуск с моей фотографией.... Фамилия Ивченко мне о многом говорит,потому как она один из моих непосредственных начальников.А называется это Департамент информатизации. А где работаете Вы? Хочу ещё раз сказать спасибо Вам и ВладимируМ . Воспользовавшись Вашими советами (правда не в том проекте который обсуждался) а в проекте с которого собственно начался весь разговор - слияние БД,код который выполнялся 10 мин,теперь выполняется 1 мин. А ещё хотела бы задать вопрос ВладимируМ. Вы написали множество советов,в частности про команду LOCATE. Вот у меня на столе лежит 4 книги по фоксу и не в одной не написаны подобные нюансы. Скажите пожалуйста где можно почитать,посмотреть более глубоко и широко . Может какие то конкретные источники посоветуете? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.03.2005, 10:57 |
|
||
|
Архивирование или слияние БД в VFP7
|
|||
|---|---|---|---|
|
#18+
ZarinaВы написали множество советов,в частности про команду LOCATE. Вот у меня на столе лежит 4 книги по фоксу и не в одной не написаны подобные нюансы. Скажите пожалуйста где можно почитать,посмотреть более глубоко и широко . Может какие то конкретные источники посоветуете? На самом деле, книги на такие нюансы и не рассчитаны. Теоретически, все это есть в стандартном HELP к любой версии FoxPro. Например, открываете HELP по команде LOCATE и обязательно увидите ссылку на статью вроде " Optimizing Applications " или " Using Rushmore... " в том же Help. Да и раздел "See Also", тоже дает информацию к размышлению. Проблема только в том, что все это в стандартном HELP "рассыпано" по многим статьям и "размазано" по разным разделам каждой статьи. Что, вобщем-то, и логично. Цель статьи - это сформировать некое целостное представление по рассматриваемой проблеме или команде, а не по конкретной задаче . По сути, единственный источник - это практика и конференции. По другому не получается Каждый стремиться получить информацию по своей задаче , а не общее представление "в целом". Впрочем, кое-какие попытки предпринимаются. Но они далеки от идеала именно в силу специфики задачи. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.03.2005, 14:45 |
|
||
|
Архивирование или слияние БД в VFP7
|
|||
|---|---|---|---|
|
#18+
ZarinaНу как это зачем скрывать?! Я ведь присягу подписывала как гос.служащий и разглашение информации подсудное дело. Разве Вы давали присягу "не разглашать" место своей работы? :-) ZarinaФамилия Ивченко мне о многом говорит,потому как она один из моих непосредственных начальников.А называется это Департамент информатизации. Я всего лишь один из выпускников кафедры, которой руководит её муж... ;-) Но, помимо учёбы, мы с ним работали и над другими задачами, так что я был не совсем "рядовым" студентом... Чем чёрт не шутит - может Ваше начальство помнит каков был вкус у нежинских огурчиков лет эдак 12-13 назад, во времена дичайшей нищеты и дефицита... :-))) ZarinaА где работаете Вы? Обычный ЧП! ;-) С госслужбой порвал давно и, возможно, навсегда! ;-) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.03.2005, 17:55 |
|
||
|
|

start [/forum/topic.php?all=1&fid=41&tid=1594668]: |
0ms |
get settings: |
8ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
56ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
71ms |
get tp. blocked users: |
2ms |
| others: | 244ms |
| total: | 414ms |

| 0 / 0 |
