|
|
|
Удаление записей замучало....
|
|||
|---|---|---|---|
|
#18+
помечаю на удаление кнопка delete IF MESSAGEBOX("Âû òàê õîòèòå?",20,"Âíèìàíèå!")=6 SET DELETED ON DELETE IN dopoln DELETE IN osnown SKIP -1 IN dopoln SKIP -1 IN osnown thisform.Refresh() ELSE _screen.ActiveForm.Refresh() ENDIF кнопка выход SET DELETED OFF IF MESSAGEBOX("Âûõîäèòü èç ôîðìû?",4+32+256, "Âûõîä")=6 PACK IN osnown PACK IN dopoln endif _screen.ActiveForm.Release() ELSE _screen.ActiveForm.Refresh() ENDIF вроде должно работать,но если нет записей на удаление то начинает fox материться.... пробовал вставлять if deleted()=.t. ... ещё вот так if deleted("osnown")=.t. по всякому короче... может как то не так ищу? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.12.2007, 21:04 |
|
||
|
Удаление записей замучало....
|
|||
|---|---|---|---|
|
#18+
P.S. Простите за орфографию:В кнопке выхода один endif конечно лишний...лишнего накопировал. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.12.2007, 21:49 |
|
||
|
Удаление записей замучало....
|
|||
|---|---|---|---|
|
#18+
Как матерится Фокс? Можно подробнее? У Вас как минимум два подозрительных места. 1) Когда вы вклюяаете DELETED, удаляете записи и делаете SKIP-1. - нужно набороот DELETED OFF - а то непннятно откуда скипать - от удаленной или от той что осталась. По идее, до смещения текущая запись при удалении не уходит. Но Вы то с нее сходите. Тем более дело происходит в двух областях и в GUI интерфейсе. Это тоже может внести неопределенность. PS. При DELETED OFF данные удаляются - если Вы сомневаетесь. 2) Вы вызываете ПАК. А это требует монопольного доступа. Если Вы в форме - то вряд ли доступ Ваш монопольный. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.12.2007, 22:24 |
|
||
|
Удаление записей замучало....
|
|||
|---|---|---|---|
|
#18+
как я понял,то я сначала просто помечаю текущую запись на удаление,а потом просто ухожу на запись назад,при этом она не помечается.Разве не так?(skip'ает он от удалённой)А при отсутствии записи на удаоение он говорит про уникальный индекс.Если же помеченная запись есть на удаление,то всё отлично проходит. P.S.если так проще,то я сделаю после пометки thisform.prosteel.click() Скачайте архив,добавьте записи по вкусу,потом удалите.....а потом попробуйте без пометки на удаление. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.12.2007, 10:15 |
|
||
|
Удаление записей замучало....
|
|||
|---|---|---|---|
|
#18+
Во-первых, в Вашем проекте я не нашел кнопку "Выход", поэтому проверить Ваши слова нет никакой возможности. Во-вторых, ТАК удаление записей никогда не делают. Да, по команде DELETE записи только помечаются как удаленные, но физическое удаление записей (команда PACK) выносится в отдельные служебные процедуры. В процессе работы выполнять PACK - это искать себе приключений. Общая логика примерно такая: -) В главном стартовом файле делается глобальная настройка SET DELETED ON -) В процессе работы приложения записи только помечаются как удаленные командой DELETE -) Создается отдельный пункт меню, по которому все пользователи выгоняются из программы и выполняется упаковка базы данных. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.12.2007, 10:36 |
|
||
|
Удаление записей замучало....
|
|||
|---|---|---|---|
|
#18+
вставил такой код на destroy формы If Used("osnown") AND Used("dopoln") Use in osnown Use in dopoln Use d:\проект\data\osnown.dbf in 0 exclusive Use d:\проект\data\dopoln.dbf in 0 exclusive endif PACK IN dopoln PACK IN osnown ну а помечаю так MESSAGEBOX("Вы так хотите?",20,"Внимание!") SET DELETED ON DELETE IN dopoln DELETE IN osnown thisform.prosteel.Click() ну а под выходом я имел виду Х на форме(у меня уже столько версий,что не успеваю следить,убрал я там что или оставил)простите душевно... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.12.2007, 11:00 |
|
||
|
Удаление записей замучало....
|
|||
|---|---|---|---|
|
#18+
Еще раз: В процессе работы приложения команда PACK - НЕ ИСПОЛЬЗУЕТСЯ. Она выносится в ОТДЕЛЬНЫЙ пункт меню. Конечно, можно и так, как Вы. Но поскольку Вы откровенно "плаваете" в том, что именно делаете, то Вас еще ждет много удивительных открытий Успехов! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.12.2007, 11:35 |
|
||
|
Удаление записей замучало....
|
|||
|---|---|---|---|
|
#18+
До книжек ты похоже так и не добрался lihach... вроде должно работать,но если нет записей на удаление то начинает fox материться.... А что он должен делать если удалять нечего? Вместо слова "материться" принято писать выдает сообщение об ошибке " тут текст сообщения " и указывать строку на которой ошибка произошла Ошибка в твоем коде не на DELETE, a на SKIP вероятней всего Перед удалением проверь указатель на записи или нет. Примерно так: Код: plaintext 1. 2. 3. Вот это _screen.ActiveForm.Refresh() не всегда обозначает ту форму из которой вызывается. Если нужно форму из которой вызываешь - используй thisform.Refresh() Вот это не надо: Код: plaintext 1. SET DELETE не надо туда-сюда переключать. Написал в DE.BeforeOpenTable() SET DELETED ON и все. PS Когда книжки читать пойдешь? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.12.2007, 14:56 |
|
||
|
Удаление записей замучало....
|
|||
|---|---|---|---|
|
#18+
Dima TPACK делается для уменьшения размера таблицы, а не решения проблемы уникальности ключа в таблице. Согласен на все 100% (иначе и не могло быть). Но раз уж зашел разговор об уникальных ключах и удаленных записях - прведу один случай, когда я прокололся с этим (это было на FoxPro/Lan2.0(DOS)). Если удалить запись с ключом например k=17 - на удаление запись помечается, но уникальный индекс - как и следовало ожидать - не перестраивается. Далее вы могли тогда в старом Фоксе добавить 2-ю запись с тем же k=17. Integrity тогда не было. Теперь уникальный индекс брал первую - то есть удаленную - запись. И при deleted on не показывал ничего. А вторая - неудаленная - запись не бралась уникальным индексом. Я не проверял это на VFP - но сейчас я думаю ситуация должна быть такая: запись с k=17 удалена и при deleted on не отображается. В то же время вставить новую запись с k=17 Вам должен не позволить контейтер dbc. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.12.2007, 17:47 |
|
||
|
Удаление записей замучало....
|
|||
|---|---|---|---|
|
#18+
2 apapacy Вы путаете термины. Точнее, они Вас вводят в заблуждение. В FP2.x существовали индексы только 2 типов: Regular и Unique Так вот, индекс типа Unique никак не контролировал уникальность записей. Т.е. вообще. Ему было не важно, сколько записей имеют одно и то же значение. И статус удаленная/ не удаленная для него тоже роли не играл. Этот индекс отображал уникальные значения. По сути, это был просто своеобразный фильтр, наложенный на таблицу. А уж какая из одинаковых записей будет отображена - заранее предсказать невозможно. Просто первая попавшаяся. В VFP были введены два новых типа индекса: Candidat и Primary. Вот эти типы реально следят за уникальностью данных. Они просто не дадут возможности ввести две записи с одинковым значением. Причем для них также не имеет значение помечена ли запись как удаленная или нет. Уникальность контролируется среди всех записей без исключения. Подробнее по индексам можно посмотреть здесь http://www.foxclub.ru/articles/index.php?id=35 В VFP9 добавлен еще один тип индексов: Binary. Он используется только и исключительно с целью ускорения поиска по логическим полям или выражениям. Например, по выражению Deleted(). Ну, а насчет генерации уникальных значений, так это решается через дополнительные таблицы. Никогда нельзя присвавать новой записи значение удаленной записи. Даже если запись была физически удалена. Потом никому же не докажешь, что запись удаляли! Да и с контролем уникальности возни меньше. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.12.2007, 21:25 |
|
||
|
Удаление записей замучало....
|
|||
|---|---|---|---|
|
#18+
Михаил, да я это же и гвоврил. Просто для меня это было в свое время вроде граблей. Хотел обратить внимание, раз уж зашла речь об удаленных записях и уникальных индексах. Что б кто прочитал - не наступил. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.12.2007, 21:50 |
|
||
|
Удаление записей замучало....
|
|||
|---|---|---|---|
|
#18+
Дико извиняюсь, не Михаил, ВладимирМ. Действительно, очень стыдно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.12.2007, 21:52 |
|
||
|
Удаление записей замучало....
|
|||
|---|---|---|---|
|
#18+
ВладимирМ Этот индекс отображал уникальные значения. По сути, это был просто своеобразный фильтр, наложенный на таблицу. А уж какая из одинаковых записей будет отображена - заранее предсказать невозможно. Просто первая попавшаяся. 5 - , Владимир. Всегда отображается запись с меньшим RECNO(), то есть заведенная раньше. (Нарушаем 1НФ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.12.2007, 21:59 |
|
||
|
Удаление записей замучало....
|
|||
|---|---|---|---|
|
#18+
А никто не говорил что я спец(я вообще впервые месяц назад увидел fox) в foxpro,просто темы курсовой другой не было,так и пришлось выбрать эту("Создание простейшей базы данных в FoxPro"). Вот и втянулся.... P.s.Купил книжку Visual FoxPro 9.0 Т.В.Мусина....Сижу читаю...Согласно ей косяков я не наделал великих. Ну так заработал же и такой способ,чем он не нравится Вам,я откровенно говоря не понимаю.Ну не программерски,по ламерски.Так я не волшебник,я только учусь. А главное про открытия:С моим способом удаления что-то не так?Он мне сюрпризов не принесёт в последний момент?А то мне после праздников здавать. А так,всех с НГ! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.12.2007, 14:18 |
|
||
|
Удаление записей замучало....
|
|||
|---|---|---|---|
|
#18+
lihach... P.s.Купил книжку Visual FoxPro 9.0 Т.В.Мусина....Сижу читаю...Согласно ей косяков я не наделал великих. Молодец :) lihachНу так заработал же и такой способ,чем он не нравится Вам,я откровенно говоря не понимаю.Ну не программерски,по ламерски.Так я не волшебник,я только учусь. А главное про открытия:С моим способом удаления что-то не так?Он мне сюрпризов не принесёт в последний момент?А то мне после праздников здавать. А так,всех с НГ! Что не так - несколько раз объяснили. Если тебя это устраивает - сдавай. При сдаче будет работать так же как и у тебя. Если при тестировании сюрпризов нет, то и при сдаче не будет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.12.2007, 17:54 |
|
||
|
Удаление записей замучало....
|
|||
|---|---|---|---|
|
#18+
Отлично!Тестирую,пока проблем не возникало. P.S.Сижу,почитываю литературку...Чувтсвую ещё пару примочек сделаю к проекту... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.12.2007, 20:59 |
|
||
|
Удаление записей замучало....
|
|||
|---|---|---|---|
|
#18+
Вообще не работаю напрямую с таблицами, а только с лок genview и запросами, поэтому удаляется все просто и влюбое время, 1)запоминаю Id строки в view 2) открываю табл в Exclus 3) нахожу строку delete pack 4) закрываю таблицу. Один раз написана проц на удаление и все :) Напрямую с таблицами работать нельзя! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.01.2008, 05:45 |
|
||
|
Удаление записей замучало....
|
|||
|---|---|---|---|
|
#18+
Rom_ewВообще не работаю напрямую с таблицами, а только с лок genview и запросами, поэтому удаляется все просто и влюбое время, 1)запоминаю Id строки в view 2) открываю табл в Exclus 3) нахожу строку delete pack 4) закрываю таблицу. Один раз написана проц на удаление и все :) Напрямую с таблицами работать нельзя! А теперь запустите Ваше приложение два раза (симуляция многопользовательского режима) и посмотрите, куда Вас пошлет FoxPro. Еще раз. НЕЛЬЗЯ использовать команды требующие эксклюзивного доступа к таблицам (например, PACK) в процессе работы приложения. Как курсовая - сойдет. В реальном приложении этого делать нельзя. Будут неразрешимые конфликты совместного доступа. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.01.2008, 14:08 |
|
||
|
Удаление записей замучало....
|
|||
|---|---|---|---|
|
#18+
Я тут никому не мешаю?Вроде как Я сдаю курсовую...База будет использоваться на 1 компьютере,никаких совметных доступов.По теме курсовой,база должна быть наипростейшая,но т.к. препод меня не переваривает,то всё должно быть без сучка и задоринки.Поэтому надо всё предусмотреть... P.S.сам он в fox'е не рубит(праям как я практически) и код разбирать не будет.Так что все старания идут на интерфейс и на сам факт работы программы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.01.2008, 14:27 |
|
||
|
Удаление записей замучало....
|
|||
|---|---|---|---|
|
#18+
Вообще надо убрать это удаление!Сделал запрос(есть тема на форуме моя),так результат в форму вывел.Всё конечно работает,находит всё нараз,но результат поиска то он из курсора берёт,выводит на форму на ту же.Так вот моё удление тут не применимо.Я ж просматриваю и перелистываю курсор,а не мои таблицы. А если препод спросит,как удалить,скажу что никак.. У кого-нить новаторские идеи по этому поводу есть?Или правда без удаления обойтись? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.01.2008, 14:41 |
|
||
|
Удаление записей замучало....
|
|||
|---|---|---|---|
|
#18+
lihach , тебе ведь ВладимирМ написал: запусти приложение два раза на одной машине. Второй раз тебя пошлет. Твой препод кликнет несколько раз вместо одного по ярлыку проги, запустится несколько копий и вылезет куча ругани при попытке удаления. Так что тебе Владимир не зря советует не использовать команды, требующие монопольного доступа. Если же расчитывать на работу в данном конкретном случае только на одной машине, то следует хотя бы учитывать и обрабатывать при запуске приложения возможнось запуска нескольких копий одновременно. Как вариант, для этого можно объявить и использовать АПИ функции типа FindWindow, BringWindowToTop, ShowWindow, IsIconic, SetForegroundWindow, SetActiveWindow. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.01.2008, 14:49 |
|
||
|
Удаление записей замучало....
|
|||
|---|---|---|---|
|
#18+
Новаторские идеи по поводу чего? Удаление из курсора? Так Rom_ew дал общее направление. По коду записи в курсоре ищете удаляемую запись в исходной таблице и удаляете найденную запись. Однако поскольку Вы игнорируете все советы и идете "своим путем", то скажите, что удалять нельзя. Вам ведь все равно с FoxPro не работать. Сдадите курсовую и забудете. Зачем же забивать голову всякой ерундой... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.01.2008, 15:02 |
|
||
|
Удаление записей замучало....
|
|||
|---|---|---|---|
|
#18+
для ВладимирМ: Уточняю, таблица открывается на долю секунды в Excl, а все пользователи которые работают одновременно с одной базой - все работают на запросах и view - все таблицы закрыты почти всегда, поэтому никогда Fox не орет на удаление. И самое главное - вообще отказался от Data Environment(формы) и других Wiz (поэтому переписывал всю прогу 1.5 года) Насчет того, что вообще не удалять строки, даже не думайте - Все ненужное надо убирать физически обязательно, чтобы не забивать ДБ (иначе через несколько лет база будет забита хламом ) Правда удаление можно делать и в конце сесии, но тогда придется иметь ввиду все время метки на удаление, что очень неудобно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.01.2008, 18:58 |
|
||
|
Удаление записей замучало....
|
|||
|---|---|---|---|
|
#18+
Да всё не так!Я конечно же прислушиваюсь к ответам,но общего плана у меня не было, и поэтому так всё и получается. Сначала сделал удаление,потом понял,что нужно организовать поиск.Сделал поиск,а тут на тебе!А мой то способ удаления не подходит!Надо заново делать всё... Простите уж неумеху...Больше с такими глупыми вопросами не появлюсь.Буду разбираться своими мозгами. P.S.Раньше никогда не занимался базами данных,даже боялся их,а теперь даже понравилось с ними работать,довольно интересно,я б даже сказал.Поэтому бросать это дело точно не буду.Попробую ещё что-нибудь сотворить,а там уж срок сдачи меня не будет поджимать,буду тихо и спокойно разбираться,допускать ошибки,и сам их исправлять. Всем спасибо за помощь,если что,буду искать по форуму,или загуглюсь. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.01.2008, 20:18 |
|
||
|
Удаление записей замучало....
|
|||
|---|---|---|---|
|
#18+
Rom_ewдля ВладимирМ: Уточняю, таблица открывается на долю секунды в Excl, а все пользователи которые работают одновременно с одной базой - все работают на запросах и view - все таблицы закрыты почти всегда, поэтому никогда Fox не орет на удаление. Надеюсь, Вы в курсе, что View, по своей сути, это обычный Select-SQL. Для его выполнения таблица должна быть открыта обязательно. Если таблица не открыта, то она будет открыта автоматически, вне зависимости от Ваших желаний. Надеюсь, Вы в курсе, что команда PACK осуществляет создание таблицы заново . Т.е. просто переписывает не удаленные записи в новую таблицу, потом удаляет старую и переименовывает новую. Причем это сопровождается коррекцией индексов и мемо-полей. При достаточно большом объеме таблиц эта операция может занимать до нескольких минут ! Следовательно имеем следующую ситуацию: один пользователь запустил выполнение команды PACK и эта операция выполняется довольно долго. В этот момент, другой пользователь захотел открыть View. Для открытия View необходимо открыть таблицу. Но таблица открыта другим пользователем в режиме Exclusive. Значит, данный пользователь идет со своим желанием далеко и надолго. Он просто физически не может работать с приложением, пока другой пользователь не завершит упаковку. Если Вы пока не столкнулись с такой ситуацией, то это означает две вещи: 1) Объем таблиц не велик 2) Количество пользователей мало Rom_ewИ самое главное - вообще отказался от Data Environment(формы) и других Wiz (поэтому переписывал всю прогу 1.5 года) Факт использования или не использования DataEnvironment на весь этот процесс не оказывает вообще никакого влияния. DataEnvironment - это визуализация настройки среды окружения для формы или отчета. Вы либо пишите весь код открытия вручную (что, видимо, Вы и сделали), либо просто визуально в DataEnvironment указываете какие таблицы и связи между таблицами Вам нужны. Кроме того, есть специальные настройки в DataEnvironment: AutoOpenTables и AutoCloseTables. Если установить их значения в .F., то, фактически, это и будет отказ от автоматического открытия таблиц при загрузке формы и такого же автоматического закрытия таблиц при выгрузке формы. И наконец, ничто не мешает после загрузки формы вручную закрыть уже не нужные промежуточные таблицы. В общем, Вы сделали распространенную ошибку - начали кодить не разобравшись с возможностями и логикой работы инструмента. А теперь и признать это ошибкой не так-то просто. Даже самому себе. Зря что ли 1,5 года переписывал? Rom_ewНасчет того, что вообще не удалять строки, даже не думайте - Все ненужное надо убирать физически обязательно, чтобы не забивать ДБ (иначе через несколько лет база будет забита хламом ) Правда удаление можно делать и в конце сесии, но тогда придется иметь ввиду все время метки на удаление, что очень неудобно. Насчет того, чтобы не удалять строки я говорил не Вам. Кроме того, я говорил это в определенном контексте, а не "вообще". Если бы Вы внимательно читали то, что я советовал в данной теме, то увидели бы, что я советовал вынести процесс упаковки в отдельные служебные модули. Вне зависимости от конкретной формы. Не в конце сессии, а периодически раз в неделю, раз в месяц, раз в год. В зависимости от интенсивности удаления записи в Вашем приложении. Ведь Вы делаете такие операции как резервное хранение, мелкий ремонт базы и т.д. и т.п. Вот в список подобных процедур и включить процедуру упаковки данных. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.01.2008, 10:54 |
|
||
|
|

start [/forum/topic.php?fid=41&msg=35041077&tid=1588318]: |
0ms |
get settings: |
5ms |
get forum list: |
9ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
32ms |
get topic data: |
6ms |
get forum data: |
2ms |
get page messages: |
45ms |
get tp. blocked users: |
1ms |
| others: | 207ms |
| total: | 311ms |

| 0 / 0 |
