Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > Как работать с dbf?


Автор: TaTaP 4.8.2003, 11:34
Никогда не занимался БД, да тут прижало, пришлось. Даже не БД, а так - таблица одна. Народ, кто работал с dbf в VC++, расскажите, как это сделать. Необходимо добавить\удалить запись, установить пароль, сменить структуру и т.д...

Автор: Step 4.8.2003, 12:06
ты алиас прописал или нет

Автор: TaTaP 5.8.2003, 01:45
Step в смысле алиас? Алиас - это кто? Я же сказал - в БД знаю очень мало, если можно - подробнее... У меня задача - перенести код из дельфи в VC++. В дельфи для работы с dbf был компонент, наследник TDataSet, там все просто - открыть файл dbf, добавить\удалить запись - вот я и подумал, может есть и в VC++ что-то подобное...

Автор: DENNN 5.8.2003, 09:02
На первых порах тебя ждет разочарование sad.gif

Автор: Step 5.8.2003, 09:22
алиас, это псевдоним бд, обычно работа с бд идет через него, можно воспользоваться другими технологиями позволяющие работать без алиаса....

Автор: TaTaP 5.8.2003, 11:07
значит, придется все писать ручками, самому... Тогда вопрос вдогонку - где достать формат этих dbf, как создавать индексы (это фича, как я понял, для увеличения скорости поиска в таблице) и т.д.

Автор: DENNN 5.8.2003, 11:24
Цитата
где достать формат этих dbf, как создавать индексы

Ты определись, как ты работаешь с dbf: либо читаешь напрямую из файла, тогда тебе придется написать функции для чтения и анализа данных из таких файлов, либо классически именно подключаешься к как к Базе Данных, тогда можно воспользоваться SQL (в том числе и манипулировать индексами).

Второй путь предпочтительней, так как это более профессиональный подход, позволяет с легкостью добавлять в БД новую информацию и приложение становиться гибче, но второй способ может быть эффективней, если тебе необходимо просто читать информацию из файла (так быстрей, потому что не приходиться ининциализировать в программе различные примочки для работы с БД, но про SQL придеться забыть)

Автор: DENNN 5.8.2003, 11:25
К сведению, файлы dbf могут быть двух разных форматов Paradox либо FoxPro. Различие выясняется при чтении заголовка файла.

Автор: Step 5.8.2003, 11:39
TaTaP, лучше с алиасами разберись

Автор: maxim1000 5.8.2003, 11:50
насколько я знаю, при работе с таблицами Paradox алиасы не используются

Автор: Step 5.8.2003, 11:53
войди в панель управления и выбери ОДБС. Именно там настраиваються алиасы. Необходимо указать псевдоним, драйвер для работы с твоей бд, и указать путь к бд.

Автор: Step 5.8.2003, 11:54
maxim1000, можно и без алиаса, но гораздо проще когда за тебя работу, драйвер делает.

Автор: Vyacheslav 5.8.2003, 12:37
Елки-палки. Я не работаю с Visual C++, но и то наслышан о RecordSet. А поскольку речь идет о dbf-файлах, нужно использовать CDaoRecordset(CDaoDatabase, CDaoTableDef и пр.) и соответсвующий ODBC-драйвер. Опять же можно поискать OLE DB Provider для формата dbf, чтобы работать не через ODBC, а через ADO

Автор: Vyacheslav 5.8.2003, 12:39
Кстати у Advantage есть такой провайдер и если формат dbf клипперовский или фокспрошный, то можно попробовать с ним.

Автор: TaTaP 6.8.2003, 02:57
а как потом все это переносить на другой комп? У себя я настрою, а к клиенту принесу - у него все падать начнет...

Автор: Vyacheslav 6.8.2003, 08:48
А так и придется. Что ODBC, что OLE DB Provider - если изначально не установлен, надо устанавливать. Для этого и существуют инсталляционные пакеты, чтобы грамотно устанавливать(переносить) и программу и сопутствующий софт.
И кстати, Paradox к dbf отношение не имеет. Но у самого dbf -формата куча версий : dBase III( idx -индексы), Clipper( ntx - индексы) , FoxPro (cdx), dBase IV ( mdx индексы). Есть еще DBase V и далее.
И в соответствии с этим заголовочные записи в dbf-файлах также могут отличаться. Так что лучше использовать драйвера, как я уже предлагал.

Автор: Baa 8.8.2003, 02:17
Цитата(Vyacheslav @ 5.8.2003, 12:37)
А поскольку речь идет о dbf-файлах, нужно использовать CDaoRecordset(CDaoDatabase, CDaoTableDef и пр.) и соответсвующий ODBC-драйвер.

Енту штуку использовать не рекомендую, советую использовать напрямую ADO.

Автор: Baa 8.8.2003, 02:18
Когда-то давно приходилось юзать под досом dbf, так что может где-то остался исходник проги, а еще есть у меня описание формата данных, но это, надо заметить, сущее извращение, проще, как уже было сказано, использовать уже готовые решения. Самым приемлимым является ADO. Как использовать? Зайди на www.codeguru.com

Автор: pish_r 15.8.2003, 09:13
Я когда-то в этом форуме задавал вопрос про класс для dbf.
Там же я оставил ссылку где валяется Codebase 6.0 для свободного скачивания.
Очень мощная вешь. Индексирование, чтение. поиск и без всяких АДО, ОДБС и т.п.
И главное, сух... хотел сказать- быстро!!!

Автор: pish_r 15.8.2003, 14:45
http://www.visualcpp.by.ru/CodeBase.html
Качай. Не пожалеешь.

Автор: Alex101 15.8.2003, 17:16
DAO не используй - матом будешь ругаться, тем более тебе возможности ADO за глаза хватит.

Автор: Step 15.8.2003, 17:19
Цитата
DAO не используй - матом будешь ругаться,
погорячился...

Автор: Alex101 15.8.2003, 18:20
Цитата(Step @ 15.8.2003, 14:19)
погорячился...

Почему?
Для dbf ADO хватит за глаза.

Автор: HexoGenus 16.8.2003, 13:59
Хмммм... есть такая прога InstalShield (идет в комплекте с билдером иногда отдельно попадается), так вот она позволяет дистрибутивы делать из твоей проги, и в ней можно сразу настроить все параметры алиасов для клиентской машины на которую ты этот дистрибутив будешь ставить... правда я не уверен что речь идет о тех же алиасах... тут вроде речь про VC++ а эти алиасы кажется имеют отношение к BDE Administrator, он там разве есть ?

Автор: Step 18.8.2003, 08:45
Цитата
Почему?
Для dbf ADO хватит за глаза.

но причем сдесь мат к ДАО, тот тоже не плохо отработает...

Автор: Nastya 18.8.2003, 08:59
Да, наговорили таоварищи. Аж мозги кипят.
И так. С базами данных в VC++ несколькими способами вот основные из них
1. ADBC
2. DAO
3. OLE DB

В данном слеучае я бы выбрала 1.
Для этого тебе понадобтится тебя класса (вообще их много)
CDatabase - отвечающий за соедение с базой.
CRecordSet - для связи с конкретным набором данных (таблицей, запросом и т.д.).

Вот неплохие примеры, правда для Access, но думаю размберешься.
http://www.firststeps.ru/mfc/odbc/odbc1.html

ИХМО.

Автор: pish_r 18.8.2003, 09:34
Люди, вы забываете о чем изначально шла речь.
Человеку не нужно работать с наворочеными базами данных. Ему обработать одну единственную табличку dbf
Для этого ему надо тягать за собой такую бандуру как ODBC или DAO?
Вы тут чтоль совсем заплесневели?
Достаточно найти какую либо либу (во каламбурчик smile.gif ) с прямым доступом к dbf и забыть обо всем.
Одна из самых мощных таких либ - Codebase. Позволяет делать с dbf все.
У меня есть еще вообще малюсенький класс для чтения dbf. Тоже очень удобно если нужно только читать. Нужен будет-пишите.

Автор: DENNN 18.8.2003, 10:01
Цитата
Вы тут чтоль совсем заплесневели?
Достаточно найти какую либо либу (во каламбурчик ) с прямым доступом к dbf и забыть обо всем.

Согласен.

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