Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.04.30;
Скачать: CL | DM;

Вниз

Извлечение системного номера записи DBF   Найти похожие ветки 

 
Dosfalcon   (2006-03-02 16:31) [0]

Люди, хелп.
Есть доисторическая клипперовская база. Надо ее перегнать во что-нить путнее.
Для восстановления связей между таблицами  позарез нужен системный номер текущей записи (т.е. чтоб его можно было прочитать ну и записать в обыкновенное поле). Даже спец-вьюеры не все его видят, а уж ODBC с BDE - вообще не знаю.
Весь инет излазил - мегов 100 приблуд накачал - и никакого толку.
Вся надежда на спецов.


 
Sergey13 ©   (2006-03-02 16:36) [1]

А что за "системный номер текущей записи"? И зачем он нужен?
ЗЫ: Ни разу про такой не слыхал.


 
dosfalcon   (2006-03-02 16:38) [2]

некорректируемое скрытое поле, в которое пишется порядковый номер записи при ее создании. clipper как я понял по ним индексы строит.


 
stone ©   (2006-03-02 16:39) [3]

нет там никакого порядкового номера, открой файл любым 16-ричным редактором и посмотри


 
dosfalcon   (2006-03-02 16:45) [4]

тогда я так понимаю вот это -
http://www.excode.ru/?mod=article&id=text&artid=489&action=showart&page=1&ex=2797d20e8cf7c6b271e15755 95ffc467
полная чушь и ничего более?


 
Sergey13 ©   (2006-03-02 16:45) [5]

2[2] dosfalcon   (02.03.06 16:38)
Если бы он даже был (в чем я сомневаюсь) - зачем он нужен для "перегнать во что-нить путнее"?


 
dosfalcon   (2006-03-02 16:51) [6]

для восстановления связей между связанными таблицами dbf (индексы ntx, причем похерены далеко и надолго) А клиента, который эти базы юзает вскрыть не представляется возможным. А базы по несколько сотен тыс записей :)


 
Sergey13 ©   (2006-03-02 16:56) [7]

2[6] dosfalcon   (02.03.06 16:51)
>для восстановления связей между связанными таблицами dbf
А они по номеру записи связаны? В дочерних таблицах так прямо код какой-то и зашит? Что то слабо в это верится.


 
dosfalcon   (2006-03-02 17:05) [8]

Дочерние таблицы все как одна: 2 поля: первое - число , второе - какое-нить свойство (строка). Причем с клиента проверял - число равно именно    номеру той записи, к которой свойство и относится. Сам шизею второй день.


 
ANB ©   (2006-03-02 17:13) [9]

1. Базу на клиппере писал идиот. Если хоть раз проводили упаковку - все такие ссылки похерились.
2. В DBF нету спец.поля для номера записи. Он просто физически на нее позиционируется. А индексы при упаковке - перестраиваются.
3. Если нужен клиппер или утилита его для работы с таблицами - могу выслать.
4. Могу также запостить или выслать формат файла DBF и пример его читания.


 
Виталий Панасенко   (2006-03-02 17:14) [10]

Что-то ты гонишь... Что курил ?..:-)))


 
dosfalcon   (2006-03-02 17:16) [11]

ANB постучись в асю 272122996, буду премного благодарен


 
Desdechado ©   (2006-03-02 21:10) [12]

> число равно именно номеру той записи, к которой свойство и относится
а та запись не имеет случаем какого-нибудь первичного ключа, особенно числового?


 
dosfalcon   (2006-03-03 05:30) [13]

Desdechado, в том то и дело, что нет. Индексов - выше крыши, а идентификаторов числовых - жок.
Ладно, всем спасибо, вчерась сам придумал как ентот номер выташчить. Если кто когда столкнется с флинтовыми ментовскими базами периода распада СССР - имейте ввиду, что в них может быть описанный выше механизм связки.
Решение такое - открыть dbf-ку accessom к примеру (главное, чтоб построчно весь файл прочитался) и тупо пронумеровать записи счетчиком.


 
Anatoly Podgoretsky ©   (2006-03-03 07:32) [14]

Это системное поле называется RECNO


 
Anatoly Podgoretsky ©   (2006-03-03 07:35) [15]

Если делалась упаковка или какое либо повреждение индексов, то забудь про связи - их уже нет и это навсегда.
Видимо этот комик программист написал связь так Fld = RECNO


 
dosfalcon   (2006-03-03 08:10) [16]

Anatoly Podgoretsky связи то останутся, тока кривые :) Или полетят, но тока в том случае если на последнюю запись основной таблицы была ссылка. Но клиент работает, видимых траблов нет. А уж полетело ли соответсвие до меня - это меня не колышит. Главное перенести то что есть сейчас :).
Кстати, это действительно не поле базы в нормальном смысле слова - это виртуальное поле, создаваемое некоторыми вьюерами на основе структуры dbf.


 
Виталий Панасенко   (2006-03-03 09:28) [17]

А ментовские !.. Я когда то видел для ментов на Paradox 4.0 какую то лобуду. Лет 10 назад. Так там тоже связи были построены НА ФИЗИЧЕСКИХ номерах, без единого индекса !..Попробуй что-нибудь удалить - кранты..


 
msguns ©   (2006-03-03 09:55) [18]

Обалдеть ! Это получается, что в детал писалась запись с полем-связкой, равной RecNo текущей масетр-записи ?

Вообще такого не видел никогда ! Если дело обстоит так, то это какой-то триллер, а не БД, а автор - внук Хичкока.

Все же, мне кажется, там по другому. Каким-то образом вычисляется из содержимого других полей значение связующего ключа и оно уже присваивается указателю в детал-записи. В этом случае ключ будет независим от recNo мастер-таблицы. Подобные штуки встречал как-то и, если память не изменяет в кгб-шных старых прогах (еще досовских).


 
Виталий Панасенко   (2006-03-03 11:58) [19]

То что я видел, было как-то по другому. Я уже не помню, но что-то типа "Запись № такой-то в Таблице1 соответствует Записи с таким же номером в Таблце2"


 
Sergey13 ©   (2006-03-03 12:04) [20]

2[8] dosfalcon   (02.03.06 17:05)
>Дочерние таблицы все как одна: 2 поля: первое - число , второе - какое-нить свойство (строка). Причем с клиента проверял - число равно именно    номеру той записи, к которой свойство и относится.

Ну дык добавь во все таблицы по полю. Обзови его ID и заполни RecNo. Вот тебе "нормальные" и связи появятся. Наверное будут битые и неверные связи, но уж это другая пестня - для "Главное перенести то что есть сейчас" сойдет.


 
Anatoly Podgoretsky ©   (2006-03-04 01:33) [21]

Виталий Панасенко   (03.03.06 09:28) [17]
Для DBF после упаковки таблицы, базу можно выкидывать.


 
mike-d ©   (2006-03-05 19:18) [22]

> msguns ©   (03.03.06 09:55) [18]
> Обалдеть ! Это получается, что в детал писалась запись с
> полем-связкой, равной RecNo текущей масетр-записи ?
>
> Вообще такого не видел никогда !


Увы, такое есть и сейчас... Пример: программа ввода льгот на физических лиц Управления Социальной Защиты Населения г. Владимира (фамилию автора к сожалению еще не выяснил - а то бы обнародовал) - реализована на Foxbase 2.0 под DOS.
И распространяет свой шедевр по всей области...


 
mike-d ©   (2006-03-05 19:21) [23]

Автору:
Можно добавить в структуру мастера целочисленное поле (ID) и при конвертации данных писать туда текущий RecNo исходных записей. В дальнейшем оно будет использоваться для связи таблиц. Операция одноразовая, разумеется...


 
Anatoly Podgoretsky ©   (2006-03-05 19:23) [24]

То что под ДОС это мелочи, а вот RECNO для связи это ужас, нельзя таких людей допускать подметать пол в компьютерном помещении.



Страницы: 1 вся ветка

Текущий архив: 2006.04.30;
Скачать: CL | DM;

Наверх




Память: 0.53 MB
Время: 0.029 c
15-1144300895
kaif
2006-04-06 09:21
2006.04.30
Пирамиды. Сколько их?


2-1144910064
fast2
2006-04-13 10:34
2006.04.30
Как записать на паскале (в Делфи) выражение:


15-1144502914
ArtemESC
2006-04-08 17:28
2006.04.30
Где BIOS?


2-1144762527
Der Nechk@ssoff
2006-04-11 17:35
2006.04.30
Данные из ini


2-1144931377
Кир
2006-04-13 16:29
2006.04.30
Классическая такая задачка...