| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Общие вопросы по .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:19 |
| Я закрываю их - OleDbConnection.Close() а затем OleDbConnection.Dispose(), хотя и не уверен что это закрывает коннект для БДЕ. Файлов много, 50 тысяч. |
| Автор: Akina 18.9.2009, 13:30 |
| Коннект используй ОДИН И ТОТ ЖЕ. На всё про всё. Просто отваливайся от одной таблицы и присасывайся к другой. |
| Автор: Drabuna 18.9.2009, 14:07 |
| У меня все файлы в разных папках, что делать в таком случае? |
| Автор: Skynin 18.9.2009, 17:15 | ||||
(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
А какая разница? Может вместо "радости" от того что не можете решить элементарную задачу (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 | ||||
Ознакомился. Элементарней некуда. Нужно просто изменить немножко мышление - не искать сложности а потом всем рассказывать что их нельзя преодолеть. Например написать собственное чтение дбф файлов, чтобы игнорировать нюансы установки флагов в заголовке различными программами. Просто лечилки, читалки и создавалки дбф файлов писал на разных языках не раз. В зависимости от требуемой сложности работы с ними - от 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 | ||||
Если проблема с 1% - надо ли писать читалку? Может подойдет тупой "вариант": найти программу которой хоть в командной строке можно указать - перегони мне 7ой dBase в dBase IV ? Задача то ведь - прочесть и перегнать в Оракл, а не "написать читалку dBase 7" Подвариант - нам нужно писать полновестную читалку, или достаточно узнать - начало данных и количество полей в записи? Или еще нужно название поля (по порядковому номеру не годится)? Мало того, для файлов с записями фиксированной длины можно вообще написать автоопределитель, в худшем случае полуавтоматический, которому заголовок вообще не нужен будет. Просто с 9.9.2009 уже мучаетесь как вижу. Значит пора менять подход, если 1% - так и не удается одолеть
Исходники я не смотрел. Своего кода хватает, глаза утомлять |
| Автор: Drabuna 21.9.2009, 08:58 |
| Если скидывать в одну папку, и не переконекчиваться, то все ок. |
| Автор: Drabuna 23.9.2009, 09:23 |
| Сделаем вид что вопрос решен. |