Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Общие вопросы по .NET и C# > Пишем прогу для чтения dBase 7


Автор: Drabuna 18.9.2009, 10:36
Надо открыть файлы dbase 7. Пробовал многими способами ничего его не берет. 
Поэтому нашел http://www.dbase.com/knowledgebase/int/db7_file_fmt.htm

Начал писать программу. Сейчас читает все до 0x0D stored as the Field Descriptor terminator.
Запутался и не могу прочитать сами записи. Программу и файл прикрепил(iamfile.dbf).
Файл открывается DBF Viewer 2000 если что.

Помогите прочитать записи)

Автор: Akina 18.9.2009, 12:26
Ставишь http://www.dbase.com/updatesandfixes.asp#run2615 и получаешь к нему доступ через BDE.

Автор: Drabuna 18.9.2009, 12:58
С бде проблема. "Недостаточно ресурсов" при чтении файлов в цикле, через АДО/ODBC. Поэтому не катит(

Автор: Akina 18.9.2009, 13:01
Цитата(Drabuna @  18.9.2009,  13:58 Найти цитируемый пост)
"Недостаточно ресурсов" при чтении файлов в цикле, через АДО/ODBC. 

Много файлов? так не забывайте их закрывать.

Автор: Drabuna 18.9.2009, 13:19
Я закрываю их - OleDbConnection.Close() а затем OleDbConnection.Dispose(), хотя и не уверен что это закрывает коннект для БДЕ. Файлов много, 50 тысяч.

Автор: Akina 18.9.2009, 13:30
Коннект используй ОДИН И ТОТ ЖЕ. На всё про всё. Просто отваливайся от одной таблицы и присасывайся к другой.

Автор: Drabuna 18.9.2009, 14:07
У меня все файлы в разных папках, что делать в таком случае? smile 

Автор: Skynin 18.9.2009, 17:15
Цитата(Drabuna @ 18.9.2009,  13:19)
Файлов много, 50 тысяч.

(net) Maximum open files per session:        16384
http://support.microsoft.com/kb/556004

(local) Windows has a hard coded file descriptor limit of 2048
http://www.iis-aid.com/articles/iis_aid_news/increasing_mysql_open_file_limit_on_windows

Цитата

У меня все файлы в разных папках, что делать в таком случае?

А какая разница?  smile 

Может вместо "радости" от того что не можете решить элементарную задачу (dbf формату страшно сказать сколько лет, чтобы столкнуться с неразрешимой с ним проблемой) - расскажите зачем Вам нужно 50 тыс файлов открывать одновременно?

Автор: Drabuna 18.9.2009, 18:05
Разница в том что надо менять connection string.

Задача отнюдь не элементарная. Можете ознакомится со следующими темами, в которых я подробно описал проблему:

1. http://forum.vingrad.ru/forum/act-ST/f-202/t-272237/unread-1.html
2. http://forum.vingrad.ru/forum/topic-272361.html
3. http://forum.vingrad.ru/forum/topic-272794.html

И если вы сможете мне помочь, я буду очень благодарен.

Автор: Akina 19.9.2009, 09:26
Ну и меняй... объект только не создавай новый.

Автор: Skynin 19.9.2009, 10:45
Цитата(Drabuna @ 18.9.2009,  18:05)
Задача отнюдь не элементарная. Можете ознакомится со следующими темами

Ознакомился. Элементарней некуда. Нужно просто изменить немножко мышление - не искать сложности а потом всем рассказывать что их нельзя преодолеть.

Например написать собственное чтение дбф файлов, чтобы игнорировать нюансы установки флагов в заголовке различными программами.

Просто лечилки, читалки и создавалки дбф файлов писал на разных языках не раз.

В зависимости от требуемой сложности работы с ними - от 6 ч до недели(если нужна простейшая индексация и связи по полям) на C# с нуля.

Цитата

И если вы сможете мне помочь, я буду очень благодарен.

C BDE никогда не работал.

Я пока не понял задачи - прочесть и перегнать в SQL?
О файлах:
Каковы связи между данными? Структуры таблицы - у каждого файла свои?
Что за вид данных на уровне концепции перегоняем?
И т.д.

Автор: Drabuna 19.9.2009, 19:03
Да я вот тоже с BDE никогда не работал. Да, задача прочесть и перегнать в Оракл, но с перегоном все ок.

Допустим, что там 50 тысяч таблиц, с одинаковой структурой, и без связей.

Проблема именно с чтением dbase 7, так как 99% файлов это dbase 4-5 и проблем с ними нету. Имеем dbf, надо получить datatable. 
Начал писать читалку(смотрим 1 пост).

2Akina
Делаю один коннекшн, но при смене папки надо закрывать коннекшн, и открывать. А БДЕ их толи криво закрывает, толи не закрывает вообще.
Если читать из одной папки не закрывая и не открывая каждый раз конекшн то все ок.

Автор: Ram1reS 19.9.2009, 20:13
Может быть стоит попробовать все dbf в одну папку слить, и одним коннекшоном пройтись, меняя таблицы?

Автор: Skynin 19.9.2009, 22:53
Цитата(Drabuna @ 19.9.2009,  19:03)
Проблема именно с чтением dbase 7, так как 99% файлов это dbase 4-5 и проблем с ними нету. Имеем dbf, надо получить datatable. 

Если проблема с 1% - надо ли писать читалку?

Может подойдет тупой "вариант":
найти программу которой хоть в командной строке можно указать - перегони мне 7ой dBase в dBase IV ?

Задача то ведь - прочесть и перегнать в Оракл, а не "написать читалку dBase 7"

Подвариант - нам нужно писать полновестную читалку, или достаточно узнать - начало данных и количество полей в записи? Или еще нужно название поля (по порядковому номеру не годится)?

Мало того, для файлов с записями фиксированной длины можно вообще написать автоопределитель, в худшем случае полуавтоматический, которому заголовок вообще не нужен будет.

Просто с 9.9.2009 уже мучаетесь как вижу. Значит пора менять подход, если 1% - так и не удается одолеть smile
Цитата(Drabuna @ 19.9.2009,  19:03)

Начал писать читалку(смотрим 1 пост).

Исходники я не смотрел. Своего кода хватает, глаза утомлять smile

Автор: Drabuna 21.9.2009, 08:58
Если скидывать в одну папку, и не переконекчиваться, то все ок.

Автор: Drabuna 23.9.2009, 09:23
Сделаем вид что вопрос решен.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)