![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Извлечение системного номера записи DBF [dBase, FoxPro]
Dosfalcon © (2006-03-02 16:31:00)Люди, хелп.
Есть доисторическая клипперовская база. Надо ее перегнать во что-нить путнее.
Для восстановления связей между таблицами позарез нужен системный номер текущей записи (т.е. чтоб его можно было прочитать ну и записать в обыкновенное поле). Даже спец-вьюеры не все его видят, а уж ODBC с BDE - вообще не знаю.
Весь инет излазил - мегов 100 приблуд накачал - и никакого толку.
Вся надежда на спецов.
Anatoly Podgoretsky (2006-03-05 19:23:00) [1]То что под ДОС это мелочи, а вот RECNO для связи это ужас, нельзя таких людей допускать подметать пол в компьютерном помещении.
mike-d (2006-03-05 19:21:00) [2]Автору:
Можно добавить в структуру мастера целочисленное поле (ID) и при конвертации данных писать туда текущий RecNo исходных записей. В дальнейшем оно будет использоваться для связи таблиц. Операция одноразовая, разумеется...
mike-d (2006-03-05 19:18:00) [3]> msguns © (03.03.06 09:55) [18]
> Обалдеть ! Это получается, что в детал писалась запись с
> полем-связкой, равной RecNo текущей масетр-записи ?
>
> Вообще такого не видел никогда !
Увы, такое есть и сейчас... Пример: программа ввода льгот на физических лиц Управления Социальной Защиты Населения г. Владимира (фамилию автора к сожалению еще не выяснил - а то бы обнародовал) - реализована на Foxbase 2.0 под DOS.
И распространяет свой шедевр по всей области...
Anatoly Podgoretsky (2006-03-04 01:33:00) [4]Виталий Панасенко (03.03.06 09:28) [17]
Для DBF после упаковки таблицы, базу можно выкидывать.
Sergey13 (2006-03-03 12:04:00) [5]2[8] dosfalcon (02.03.06 17:05)
>Дочерние таблицы все как одна: 2 поля: первое - число , второе - какое-нить свойство (строка). Причем с клиента проверял - число равно именно номеру той записи, к которой свойство и относится.
Ну дык добавь во все таблицы по полю. Обзови его ID и заполни RecNo. Вот тебе "нормальные" и связи появятся. Наверное будут битые и неверные связи, но уж это другая пестня - для "Главное перенести то что есть сейчас" сойдет.
Виталий Панасенко (2006-03-03 11:58:00) [6]То что я видел, было как-то по другому. Я уже не помню, но что-то типа "Запись № такой-то в Таблице1 соответствует Записи с таким же номером в Таблце2"
msguns (2006-03-03 09:55:00) [7]Обалдеть ! Это получается, что в детал писалась запись с полем-связкой, равной RecNo текущей масетр-записи ?
Вообще такого не видел никогда ! Если дело обстоит так, то это какой-то триллер, а не БД, а автор - внук Хичкока.
Все же, мне кажется, там по другому. Каким-то образом вычисляется из содержимого других полей значение связующего ключа и оно уже присваивается указателю в детал-записи. В этом случае ключ будет независим от recNo мастер-таблицы. Подобные штуки встречал как-то и, если память не изменяет в кгб-шных старых прогах (еще досовских).
Виталий Панасенко (2006-03-03 09:28:00) [8]А ментовские !.. Я когда то видел для ментов на Paradox 4.0 какую то лобуду. Лет 10 назад. Так там тоже связи были построены НА ФИЗИЧЕСКИХ номерах, без единого индекса !..Попробуй что-нибудь удалить - кранты..
dosfalcon (2006-03-03 08:10:00) [9]Anatoly Podgoretsky связи то останутся, тока кривые :) Или полетят, но тока в том случае если на последнюю запись основной таблицы была ссылка. Но клиент работает, видимых траблов нет. А уж полетело ли соответсвие до меня - это меня не колышит. Главное перенести то что есть сейчас :).
Кстати, это действительно не поле базы в нормальном смысле слова - это виртуальное поле, создаваемое некоторыми вьюерами на основе структуры dbf.
Anatoly Podgoretsky (2006-03-03 07:35:00) [10]Если делалась упаковка или какое либо повреждение индексов, то забудь про связи - их уже нет и это навсегда.
Видимо этот комик программист написал связь так Fld = RECNO
Anatoly Podgoretsky (2006-03-03 07:32:00) [11]Это системное поле называется RECNO
dosfalcon (2006-03-03 05:30:00) [12]Desdechado, в том то и дело, что нет. Индексов - выше крыши, а идентификаторов числовых - жок.
Ладно, всем спасибо, вчерась сам придумал как ентот номер выташчить. Если кто когда столкнется с флинтовыми ментовскими базами периода распада СССР - имейте ввиду, что в них может быть описанный выше механизм связки.
Решение такое - открыть dbf-ку accessom к примеру (главное, чтоб построчно весь файл прочитался) и тупо пронумеровать записи счетчиком.
Desdechado (2006-03-02 21:10:00) [13]> число равно именно номеру той записи, к которой свойство и относится
а та запись не имеет случаем какого-нибудь первичного ключа, особенно числового?
dosfalcon (2006-03-02 17:16:00) [14]ANB постучись в асю 272122996, буду премного благодарен
Виталий Панасенко (2006-03-02 17:14:00) [15]Что-то ты гонишь... Что курил ?..:-)))
ANB (2006-03-02 17:13:00) [16]1. Базу на клиппере писал идиот. Если хоть раз проводили упаковку - все такие ссылки похерились.
2. В DBF нету спец.поля для номера записи. Он просто физически на нее позиционируется. А индексы при упаковке - перестраиваются.
3. Если нужен клиппер или утилита его для работы с таблицами - могу выслать.
4. Могу также запостить или выслать формат файла DBF и пример его читания.
dosfalcon (2006-03-02 17:05:00) [17]Дочерние таблицы все как одна: 2 поля: первое - число , второе - какое-нить свойство (строка). Причем с клиента проверял - число равно именно номеру той записи, к которой свойство и относится. Сам шизею второй день.
Sergey13 (2006-03-02 16:56:00) [18]2[6] dosfalcon (02.03.06 16:51)
>для восстановления связей между связанными таблицами dbf
А они по номеру записи связаны? В дочерних таблицах так прямо код какой-то и зашит? Что то слабо в это верится.
dosfalcon (2006-03-02 16:51:00) [19]для восстановления связей между связанными таблицами dbf (индексы ntx, причем похерены далеко и надолго) А клиента, который эти базы юзает вскрыть не представляется возможным. А базы по несколько сотен тыс записей :)
Sergey13 (2006-03-02 16:45:00) [20]2[2] dosfalcon (02.03.06 16:38)
Если бы он даже был (в чем я сомневаюсь) - зачем он нужен для "перегнать во что-нить путнее"?