:: Visual Foxpro, Foxpro for DOS
модификация таблиц в БД согласно эталонной
zilot
Автор

Сообщений: 48
Дата регистрации: 11.10.2004
Господа лисоводы, как граммотно провести программную модификацию таблиц БД на серваке согласно эталонной.




------------------
Fox - всем фокусам фокус!
Ratings: 0 negative/0 positive
Re: модификация таблиц в БД согласно эталонной
boba

Сообщений: 6269
Откуда: Медвежьи озера-
Дата регистрации: 26.03.2001
Не знаю, грамотно это или нет, мы так делаем
Проект и exe содержать 3 свободных вмороженных таблицы, содержащих список баз данных, таблиц в них, полей в таблицах, их типах, длине, дефолтах, индексах-именах, выражения итд
Перед посылкой клиентам очередной версии программы запускаем программу, которая считывает всю информацию с наших таблиц. При запуске заказчиком новой екзе, полученной от нас, программа видит, что версия сменилаь, пытается захватить эксклузив и идет по вмороженным таблицам и сравнивает их теми, что есть реально. Если видит, что какой то таблицы нет-делает ее. Если добавлено поле ( изменен его тип или длина) делает эти изменения. Так же с индексами.
Если база каким то образом поломалась у клиента, этот же блок отремонтирует ее. Иногда таблицы приходится ронять из базы и присоединять назад, иногда полностью стирать cdx
Поскольку в 6 версии validate database recover нельзя делать из екзе, вморожен еще и голый контейнер базы, на случай, если сломался он.




------------------
не имей 100 рублей, а имей сто друзей
Ratings: 0 negative/0 positive
Re: модификация таблиц в БД согласно эталонной
zilot
Автор

Сообщений: 48
Дата регистрации: 11.10.2004
это получается, что нужно постоянно отслеживать изменения структур таблиц и самой БД и записывать их в эти 3 таблицы?




------------------
Fox - всем фокусам фокус!
Ratings: 0 negative/0 positive
Re: модификация таблиц в БД согласно эталонной
Каратаев

Сообщений: 3978
Откуда: Алматы
Дата регистрации: 04.12.2001
Как понять "отслеживать"... Изменения в структуре сам же программер и делает. Написал себе небольшую програмулину, которая делает "слепок" с моих таблиц и заодно генерит программу переиндексации. У пользователя в проге по некоему флагу запускается блок обновления структуры БД... ну все, как Владимир Журавлев написал... А при подготовке нового дистрибутива для пользователя я по своему усмотрению включаю в дистрибутив этот самый файл-флаг, при наличии которого и запускается обновление, затем файл удаляется. И все.




------------------
Никогда не бывает настолько плохо, чтобы не могло быть еще хуже.
Ratings: 0 negative/0 positive
Re: модификация таблиц в БД согласно эталонной
boba

Сообщений: 6269
Откуда: Медвежьи озера-
Дата регистрации: 26.03.2001
Конечно нужно самому отслеживать, если вы добавили поля или таблицы или индексы или что то там изменили
Допустим, вы не отследили этого
Добавили новое поле в талицу и вынесли его на форму. Даете клиенту, а у него этого поля нет-форма даст ошибку
В приципе в 7 версии фокса появились события баз данных
В принципе, если не вы изменили базу, а кто то другой и не занес эти изменения в эталонную структуру, так в сыбытие изменить таблицу или базу можно прописать автоматическое заполнение вмороженных таблиц, содержащих эталонную структуру.
Но это как то снимает с программиста отвественность за то, что он делает




------------------
не имей 100 рублей, а имей сто друзей
Ratings: 0 negative/0 positive
Re: модификация таблиц в БД согласно эталонной
zilot
Автор

Сообщений: 48
Дата регистрации: 11.10.2004
> У пользователя в проге по некоему флагу запускается блок обновления структуры БД... ну все, как Владимир Журавлев написал...[color=Blue][/color]

А где это он писал?




------------------
Fox - всем фокусам фокус!
Ratings: 0 negative/0 positive
Re: модификация таблиц в БД согласно эталонной
zilot
Автор

Сообщений: 48
Дата регистрации: 11.10.2004
А когда запись изменений будет срабатывать?
И можно ли где подробнее прочитать про события БД (VFP8SP1)?




------------------
Fox - всем фокусам фокус!
Ratings: 0 negative/0 positive
Re: модификация таблиц в БД согласно эталонной
region
Я такие вещи стараюсь держать весьма строго. Вариантов отслеживания можно придумать много, вот, например, один, который я предпочитаю:
В каталоге с самой БД лежит свободная табличка, где написан номер реализации программы, которой разрешено подключаться к данной БД. Если не соответствует или отказ в попытке подключения или запрос на преобразование. Эсли этой таблички нет, то вопрос на как минимум тестирование структуры является обязательным, и при успешном окончании все-равно эта табличка будет создана.
Ratings: 0 negative/0 positive
Re: модификация таблиц в БД согласно эталонной
AleksM

Сообщений: 17881
Дата регистрации: 11.11.2003
Из того что рассказывал Boba на вчерашней встрече, я понял что первый вошедший пользователь захватывает базу в эксклюзив, делается проверка и корректировка структуры, потом база отпускается и далее работают уже с обновленной базой.




------------------
Лучше переесть, чем недоспать.
Не спеши, а то успеешь.
Ratings: 0 negative/0 positive
Re: модификация таблиц в БД согласно эталонной
boba

Сообщений: 6269
Откуда: Медвежьи озера-
Дата регистрации: 26.03.2001
При открытой базе данных modi data
на сером фоне базы правая кнопка мыши или в меню датабейс
идете в меню и ищете плашку свойства самая нижняя
Правая кнопка мыши -список событий
Щелкаете нужное вам -выскакиват затравка такого события
Скажем , если нужно запретить кому то открыть таблицу и известным именем
возвращаете в коде события .f.
PROCEDURE dbc_BeforeOpenTable(cTableName)
*Just before a table or view is opened. Return .F. to prevent table or view being opened.
IF ATC("dvds",cTableName)#0 AND UPPER(ALLTRIM(INPUTBOX(DVDLOGIN_LOC,DVDLOGINCAP_LOC)))#"ADMIN"
* Since this is a sample, we will ignore password, however, you can enforce it by returning .F.
* RETURN .F.
RETURN .T.
ENDIF
ENDPROC
Если нужно отслеживать изменения таблиц -код сохранения структуры можно положить в aftermodifytable,
Таблицы, в которые сохраняете структуру базы сами в этой базе быть не должны
Так можно сделать полный аудит, кто когда что добавлял, менял итд




------------------
не имей 100 рублей, а имей сто друзей
Ratings: 0 negative/0 positive
Re: модификация таблиц в БД согласно эталонной
XAndy

Сообщений: 3803
Откуда: Киев
Дата регистрации: 05.02.2004
Если уже есть собственный словарь БД (описание структуры БД), то логично не ручками лазить в БД и изменять структуру, после чего не забывать обновлять словарь, а сделать собственный интерфейс ведения словаря с функцией обновления структуры БД по нему.

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

Можно завести в БД табличку с версиями БД и в программе должны быть процедуры обновления для каждой версии. Если скажем, текущая версия БД 2.1.35, а обновление делается до 2.1.41, то последовательно выполняются процедуры апдейта для всех существовавших промежуточных версий. Кстати, бывает полезно различать версии программы и базы данных, номер версии БД должен быть зашит в самой БД, а номер софта - в нем. И программа должна знать, с какими версиями БД она может работать.

Это все может показаться надуманной ерундой , но если проект более-менее большой и софт используется во многих организациях (у меня были сотни) - другого решения, более приемлемого для сопровождения, я не знаю.
Ratings: 0 negative/0 positive
Re: модификация таблиц в БД согласно эталонной
Igor Korolyov

Сообщений: 34580
Дата регистрации: 28.05.2002
Hi zilot!

Я всегда ВСЕ изменения в структуру таблиц делал не через диалоги MODI STRU и
им подобные, а путём написания команд ALTER TABLE, INDEX ON и т.д.
Соответственно эти команды я вносил в prg-ку, на основе которой потом и
получался "модуль обновления". Кроме того я в dbc храню в Comment номер
версии, потому все изменения я делаю "пачками" (т.е. в модуле обновления
прописаны ВСЕ изменения, окружённые условными блоками) - и могу от любой
"старой" версии перейти к последней - по очереди выполнятся все необходимые
блоки - лишние выполнены не будут.
Этот-же номер проверяется и в программах работающих с базой. Теоретически
можно сравнивать на >= (исходим из того, что поля НЕ удаляются, и более
новая версия БД обратно совместима со старой - т.е. "расширяет" её) но я
обычно сравниваю на точное равенство...




------------------
WBR, Igor
Ratings: 0 negative/0 positive
Re: модификация таблиц в БД согласно эталонной
Каратаев

Сообщений: 3978
Откуда: Алматы
Дата регистрации: 04.12.2001
zilot
А где это он писал?
Я имел ввиду сам механизм обновления, описанный Владимиром, а не конкретную фразу "по некоему флагу".
У меня сделано по пути создания словаря БД+ сам контейнер БД+програмка переиндексации. Все таблицы, индексы, вьюшки - все корректно изменяется у пользователя.




------------------
Никогда не бывает настолько плохо, чтобы не могло быть еще хуже.
Ratings: 0 negative/0 positive
Re: модификация таблиц в БД согласно эталонной
IGOR_SMIRNOVSKY

Сообщений: 132
Откуда: СПб
Дата регистрации: 02.03.2005
2zilot

Слепок с таблиц делается в момент создания новой версии (т.е. *.exe).
Должна быть спец. программуля такая.




------------------
дураком помру
Ratings: 0 negative/0 positive
Re: модификация таблиц в БД согласно эталонной
zilot
Автор

Сообщений: 48
Дата регистрации: 11.10.2004
А что если сделать так:
просканить эталонный каталог с БД,записав структуры таблиц в dbf.
Создать такие же dbf для рабочих таблиц.
Модифицировать рабочие таблицы, сравнивая структурые dbf(Alter-SQL).
Скопировать в рабочий каталог эталонные индексные файлы и контейнер БД.
Выполняем переиндексацию модифицированных рабочих таблиц.




------------------
Fox - всем фокусам фокус!
Ratings: 0 negative/0 positive
Re: модификация таблиц в БД согласно эталонной
IGOR_SMIRNOVSKY

Сообщений: 132
Откуда: СПб
Дата регистрации: 02.03.2005
2zilot
2Igor Korolyov

А зачем так сложно ? Последовательно отрабатывать переходы от версии к версии.
Для корректной работы достаточно, чтобы номер версии БД и софта совпадали.
Ну и изменяй структуры существующих таблиц и индексы, создавай новые пустые
от любой (младшей) версии до текущей. Новые справочники ? Это другой вопрос.
Или я не понял




------------------
дураком помру
Ratings: 0 negative/0 positive
Re: модификация таблиц в БД согласно эталонной
Naomi

Сообщений: 1796
Дата регистрации: 09.10.2003
In USA 90% of VFP data use Stonefield. At my former job I wrote DataDictionary application myself... Here we're using Stonefield.
Ratings: 0 negative/0 positive
Re: модификация таблиц в БД согласно эталонной
Igor Korolyov

Сообщений: 34580
Дата регистрации: 28.05.2002
Hi IGOR_SMIRNOVSKY!

Не вижу ничего сложного. Зато в разных точках установки могут находится
разные версии (ну пропустил кто-то очередной апдейт ) и любая из них
может быть "доведена" до нужной кондиции.




------------------
WBR, Igor
Ratings: 0 negative/0 positive
Re: модификация таблиц в БД согласно эталонной
Igor Korolyov

Сообщений: 34580
Дата регистрации: 28.05.2002
Hi All!

Подход Stonefield насколько я помню основан на собственных расширениях
метаданных (т.е. именно на "словарях данных" как тут многие писали). Из
явных минусов - цена и необходимость интегрироваться с этим продуктом (на
что не все могут пойти)... Хотя продукт несомненно мощный, автор -
достойнейший человек и крупный специалист (увы сейчас AFAIK он несколько
отошел от фокса).




------------------
WBR, Igor
Ratings: 0 negative/0 positive
Re: модификация таблиц в БД согласно эталонной
zilot
Автор

Сообщений: 48
Дата регистрации: 11.10.2004
>IGOR_SMIRNOVSKY
>Ну и изменяй структуры существующих таблиц и индексы, создавай новые пустые

Так мне же нужно, чтобы существующие записи в рабочих таблицах, которые нужно модифицировать, сохранялись, а если я их буду добавлять в пустышки таблиц новой БД, то они могут не соответствовать ее правилам и соответственно не добавиться.
Или я не так понимаю?




------------------
Fox - всем фокусам фокус!
Ratings: 0 negative/0 positive


Извините, только зарегистрированные пользователи могут оставлять сообщения в этом форуме.

On-line: 51 (Гостей: 51)

© 2000-2024 Fox Club 
Яндекс.Метрика