Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Извлечение системного номера записи DBF [dBase, FoxPro]


Страницы:   1 2

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)
Если бы он даже был (в чем я сомневаюсь) - зачем он нужен для "перегнать во что-нить путнее"?


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо