[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: Problem CRC
Skoro tak to czy moja teoria jest słuszna:
Jeśli mamy tabelę X, która ma n pól w bazie danych,
i jeśli wygeneruję n df-ek a w każdej z nich będzie df-ka dotycząca tylko
jednego pola,
i jeśli napiszę procedurę która przeanalizuje n! kombinacji df-ek,
a po każdym wczytaniu kombinacji sprawdzę crc z dugą bazą, to jest szansa,
że trafię na taką kombinację dfek, że zniknie mi problem crc w takiej
tabeli?
Henryk Jusza @zeto.bydgoszcz.pl on 2002-04-04 13:11:46
Please respond to progress@zeto.bydgoszcz.pl
Sent by: owner-progress@zeto.bydgoszcz.pl
To: progress@zeto.bydgoszcz.pl
cc:
Subject: Re: Problem CRC
Pomocy,
jestem w trakcie testów bazy Progress 7.3E na serwerze UnixWare (sco unix
firmy Caldera).
Wciągam df-kę z bazy danych z innego unixa mianowicie Reliant Unix 5.43.
Po wciągnięciu df-ki w celu wygenerowania bazy wzorcowej, pomiędzy obiema
bazami
dalej występują różnice crc. No to usuwam tabelę na UnixWare, w której
wystąpiła różnica crc
i wciągam indywidualnego df-a dla tej tabeli, a tu dalej to samo, czyli
różnica crc.
Przeglądam w Data Adminitrator problemowe tabele z jednej i drugiej bazy
na oko wszystko wygląda identycznie!
Pomóżcie, jedynym jakimś sensowym pomysłem jest modyfikacja pola _CRC
tabeli systemowej _file,
ale progress pluje sie, że nie można zmieniać wartości pól w tabeli
systemowej.
Witam !
Wpadł Pan w pułapkę sporządzoną przez firmę PSC produkujacą Progress'a i
skrzętnie ukrywaną aż do wersji 9 (jeśli sie nie mylę). W czym rzecz
Otórz schemat bazy w pliku *.df nie jest pełnym schematem bazy ! W skład
schematu tablicy wchodzi jeszcze pole: _Field._Field-rPos, którego wartość
jest brana pod uwagę podczas liczenia CRC schematu tablicy. Jest to
faktyczne położenie pola w zapisie (rekordzie). Po utworzeniu definicji
tablicy pola w rekordzie są w takiej kolejności jak wynika to z _Field.
_Order (jak widzimy je w słowniku bazy na ekranie). Na skutek modyfikacji
schematu tablicy poprzez dodawanie nowych pól lub też zmianę ich pozycji w
zapisie _Field._Order ulega zmianie, zaś _Field._Field-rPos nie ulega
zmianie, bo gdyby zmieniło się, to trzeba by w danej tablicy zmodyfikować
wszystkie zapisy i porzesuwać pola na ich zmienione miejsce. Niestety, w
pliku *.df jest tylko wartoś _Field._Order a nie ma _Field._Field-rPos stąd
plik *.df nie niesie całego schematu. Wartość _Field._Field-rPos
wprowadzono to dopiero w wersji 9 i nie wiedzieć czemu tylko na żądanie.
Jak z tego wybrnąć ?
- na nowej bazie powtórzyć wszystkie aktualizacje jej schematu w takiej
kolejności, jak były robione w starej - jest to mało realne, bo kto
trzyma
wszystkie przyrosty schematu i pamięta kolejność, w jakiej były
wprowadzane
- jeśli się ma oprogramowanie źródłowe (jawne lub zaszyfrowane) to
skompilować
je z nową bazą
- jeśli nie ma oprogramowania źródłowego, to poprosić producenta, by u
siebie
utworzył nową bazę, wciągnął do niej schemat starej bazy poprzez plik
*.df
i z taką bazą skompilował oprogramowanie no i dostarczył to
oprogramowanie
do Was
Zmiana CRC w definicji tablicy nie jest możliwa i dobrze, bo gdyby udało
się
je zmienić metodą "ręczną", to programy i tak by nie działały poprawnie,
bo próbowałyby dostępu do pól zapisów nie w tych miejscach gdzie one
występują.
Pozdrawiam,
Henryk Jusza mailto:henju@pg.gda.pl
-------------------------------------------------
Ośrodek Informatyczny Politechniki Gdańskiej
Pracownia Rozwoju Oprogramowania
tel (058) 347-28-01 fax (058) 347-24-63
------
Strona WWW: http://pluton.pol.lublin.pl/pugpl/index.htm
Obsluga listy: listserv@zeto.bydgoszcz.pl
Archiwum listy: http://www.zeto.bydgoszcz.pl/progress/index.html
------