:: Visual Foxpro, Foxpro for DOS
Doug Henning
Naomi

Сообщений: 1796
Дата регистрации: 09.10.2003
I don't think Doug Henning is not currently working with VFP, at least I haven't heard anything about it. I didn't see him in .NET forum on UT...
Ratings: 0 negative/0 positive
Re: Doug Henning
Igor Korolyov

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

Ну книжку то он про то как нужно на NET переходить написал




------------------
WBR, Igor
Ratings: 0 negative/0 positive
Про Дага
Naomi

Сообщений: 1796
Дата регистрации: 09.10.2003
Первый раз слышу. Я знаю книгу Леса Пинтера и Кевина МкНиша, но про книгу Дага слышу впервые. Можно линк?
Ratings: 0 negative/0 positive
Re: Про Дага
zilot
Автор

Сообщений: 48
Дата регистрации: 11.10.2004
Господа лисоводы, мы несколько отвлеклись от темы вопроса.
Может ли кто-нибудь ответить верен ли мой алгоритм и что-нибудь добавить?




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

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


  1. Используя ALTER TABLE модифицируем структуру таблиц (только количество, типы и размеры полей, т.е. те реквизиты, которые пристуствуют только у свободных таблиц. Реквизиты, связанные с контейнером базы данных НЕ модифицируются)
  2. Копируем новый контейнер базы данных (DBC, DCT, DCX) и все структурные индексы (CDX)
  3. Выполняем REINDEX всех таблиц
  4. Выполняем модификацию содержимого таблиц в соответствии с новыми полями или их типами. Возможно, модификацию следует выполнить ДО копирования контейнера базы данных и индекса. Или и ДО, и ПОСЛЕ. Это зависит от конкретной модификации.

По сути, эту схему, так или иначе используют все. Отличия заключается в том, откуда взять образец структуры таблиц для выполнения команд ALTER TABLE

Вариантов тоже немного

  1. Иметь некий эталон (образец), с которым сравнивать текущую базу данных
  2. Просто написать PRG вносящий нужные изменения безо всякого эталона (мы же и так знаем что нужно изменить)

Ну, дальше идут вариации на тему, как именно этот эталон должен выглядеть. Это уже детали конкретной реализации.

Оба подхода имеют свои достониства и недостатки. Следует иметь в виду, что практически любая модификация структуры сопровождается написанием программы по модификации содержимого в соответствии с новой структурой. Т.е. написание нового PRG понадобиться в любом случае. Даже при наличии эталонной базы.

Наличие эталонной базы предполагает достаточно развитый интерфейс по поддержанию этого эталона в актуальном состоянии. Это относительно сложный программный модуль. Его "вылизывание" может занять достаточно много времени. При этом последовательность этапов модификации структуры будет жестко прописана в этом интерфейсе. Хотя этот модуль будет написан только один раз.

Написать простой PRG, вносящий нужные изменения в структуру без эталона - достаточно просто. Но каждое новое изменение - это новая программа.

Т.е. получается примерно следующее:

Если модификация базы данных относительно частый процесс и при этом модификация собственно содержимого либо вообще не производится, либо она элементарна, то имеет смысл потратить время на использование эталонной базы данных.

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

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

Здесь сложно судить об алгоритме.
Я решал эту задачу сам, когда созрело, без советчиков
(теперь вижу, что подходы м.б. разные).
В любом случае неделю головоломной работы я тебе гарантирую.
Я структуру и все-все пишу в текстовый файл. Это гибче.
Трудно знать заранее что потребуется и куда это все вырулит.
Нужно следить и за изменениями файлов отчетов, и настроечных таблиц.
По мне, все равно как ты меняешь структуру. Трудно отказать в удовольствии
потрогать ее, родную, ручками. Ну потрогал, затем вернул обратно: и это все
писать в *.prg ? У меня программуля сама скажет, что думает, предложит изменить
номер версии, если изменения существены.
Одни и те же функции программули работают и у юзера при смене номера версии
(без этого, есесе, работа юзера невозможна), и у меня в момент создания версии.
Ну экран, одна из фишек которого никогда не доступна юзеру и активизируется
только при "головном" запуске экрана.
Удаляю даже не нужные в новой версии столбцы таблиц, для отката делаю копию
таблицы с тем же именем, но другим расширением.

В общем, вперед, на камни (а их много) !




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

Сообщений: 48
Дата регистрации: 11.10.2004
Спасибо всем, кто ответил.
.




------------------
Fox - всем фокусам фокус!
Ratings: 0 negative/0 positive
Re: Про Дага
Igor Korolyov

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

Сорри, затупил




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

Сообщений: 46
Дата регистрации: 17.09.2003
Для VFP таблиц я делаю так.


Function ChekTableHeader
PARAMETER lcdescfil, lcdescorig
*
lndescfil=FOPEN(lcdescfil, 10)
IF lndescfil=-1
RETURN .T.
ENDIF
lndescorig=FOPEN(lcdescorig, 10)
IF lndescorig=-1
=FCLOSE(lndescfil)
RETURN .T.
ENDIF

nn1=FSEEK(lndescfil, 0,0)
IF !(Asc(FREAD(lndescfil, 1))=0x30)
=FCLOSE(lndescfil)
=FCLOSE(lndescorig)
RETURN .F.
ENDIF


lctxtFile=""
lctxtOrig=""

nn1=FSEEK(lndescfil, 8,0)
lbpola11=FREAD(lndescfil, 1)
nn1=FSEEK(lndescfil, 9,0)
lbpola12=FREAD(lndescfil, 1)

lnpole=(Asc(lbpola11)*(256^(1-1))+Asc(lbpola12)*(256^(2-1))-296)/32

nn1=FSEEK(lndescorig, 8,0)
lbpola21=FREAD(lndescorig, 1)
nn1=FSEEK(lndescorig, 9,0)
lbpola22=FREAD(lndescorig, 1)
lnpoleorig=(Asc(lbpola21)*(256^(1-1))+Asc(lbpola22)*(256^(2-1))-296)/32

IF lnpole#lnpoleorig
=FCLOSE(lndescfil)
=FCLOSE(lndescorig)
RETURN .F.
ENDIF
*
FSEEK(lndescfil, 32,0)
FSEEK(lndescorig, 32,0)
*
IF lnpole<200
lnstep=lnpole
ELSE
lnstep=200
ENDIF

FOR i=lnstep TO lnpole STEP 200
IF i>lnpole
lnfstep=i-lnpole
ELSE
lnfstep=lnstep
ENDIF
*
lctxtFile=FREAD(lndescfil, 32*lnfstep)
lctxtOrig=FREAD(lndescorig, 32*lnfstep)
IF !(lctxtFile==lctxtOrig)
=FCLOSE(lndescfil)
=FCLOSE(lndescorig)
RETURN .F.
ENDIF
*
ENDFOR
=FCLOSE(lndescfil)
=FCLOSE(lndescorig)
RETURN .T.
Ratings: 0 negative/0 positive
Re: модификация таблиц в БД согласно эталонной
Igor Korolyov

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

Следующие таблицы являются одинаковыми по структуре?
CREATE TABLE test1 (cField1 С(20), nField1 I)
CREATE TABLE test2 (nField1 I, cField1 С(20))
Текущее значение AUTOINC () является частью структуры (оно тоже в заголовке
находится)?
Допустимо ли для проверки структуры открывать таблицу эксклюзивно?
Могут и другие вопросы возникнуть... Так что если уж идти по пути сравнения,
то наверное проще использовать штатные механизмы - AFIELDS(), COPY STRUCTURE
EXTENDED...




------------------
WBR, Igor
Ratings: 0 negative/0 positive
DBC structures
Naomi

Сообщений: 1796
Дата регистрации: 09.10.2003
I can send you my DataDictionary application, if you'd like. But it would just give you idea.

Oops, I would need to send you our framework classes for the interface... I guess, I can send you programs...
Ratings: 0 negative/0 positive


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

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

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