Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2006.04.30;
Скачать: [xml.tar.bz2];

Вниз

Извлечение системного номера записи 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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.51 MB
Время: 0.011 c
15-1144323524
ECM
2006-04-06 15:38
2006.04.30
2McSimm: Как найти ушедшую ветку?


2-1145091047
Golik
2006-04-15 12:50
2006.04.30
QuickRep


15-1143595948
DevilDevil
2006-03-29 05:32
2006.04.30
Region Maker - Окна Произвольной Формы | Создаём Утилиту


2-1144753470
Eksell
2006-04-11 15:04
2006.04.30
Visual_Effects_in_Win_XP


15-1144528698
Pat
2006-04-09 00:38
2006.04.30
Написание игры





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский