Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Базы данных > корректно открыть DBF в билдере


Автор: slavic 18.2.2007, 13:45
Только начинаю работать с БД в билдере.
Следующая задача:
необходимо корректно открыть DBF файл (без индекса) и работать с ним как с локальной таблицей (т.е. считать из него определенный набор полей посредством sql- запросов и записать их в текстовый файл).

Собственно проблемы уже на 1ом этапе.

Код

Table1->Active = false;
Table1->DatabaseName = "d:\\";
Table1->TableName = "d:\\psb.dbf";
Table1->ReadOnly = true;
Table1->TableType = ttFoxPro;
Table1->Active = true;

Подобный код выдает ошибки типа insufficient memory.

Кто занимался? Каким образом это делается? Заранее благодарен. 

Автор: Rodman 18.2.2007, 14:53
Цитата(slavic @  18.2.2007,  12:45 Найти цитируемый пост)
посредством sql- запросов

так если тебе через SQL запрос то нужно использовать TQuery...

ты подключился к БД???

Автор: slavic 18.2.2007, 15:25
>ты подключился к БД??? 

подключаться мне не надо, файлы dbf лежат локально.
нужно:
1) получить доступ к файлу dbf.
2) повыдергивать некоторые поля, sql запросами.
3) перейти к следующему dbf.

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

ps. при использовании ttable, datasource возникает ошибка в момент
table -> active


TQuery я хотел использовать дальше, в начале хотелось бы корректно открыть dbf-файл без ошибок. пока не получается!

Автор: Anikmar 18.2.2007, 17:40
Цитата(slavic @  18.2.2007,  13:45 Найти цитируемый пост)
Table1->DatabaseName = "d:\\";

Интересное имя БД

Автор: slavic 18.2.2007, 18:07
>Интересное имя БД 

собственно, главная проблема не в этом. бд как таковой нет, есть одна таблица *.dbf. читал, что в качестве databasename можно в этом случае задавать имя директории.

лучше бы помогли куском кода, главный вопрос как корректно открыть локальный dbf foxro в билдере

Автор: Anikmar 18.2.2007, 19:31
Цитата(slavic @  18.2.2007,  18:07 Найти цитируемый пост)
лучше бы помогли куском кода, главный вопрос как корректно открыть локальный dbf foxro в билдере

Никогда этим не занимался, если честно, но думаю, что примерно так, как вы делаете. 
Какая ошибка у вас возникает?

Автор: slavic 18.2.2007, 19:46
Ошибки:

1. если делать способом, который в первом сообщении, то ошибка " insufficient memory"

2. если делать с помощью TQuery, требует индексный файл, которого у меня нет. (в наличие только дбф-ка)
Код

      Query1->Close();
      Query1->SQL->Clear();
      Query1->SQL->Add("select GOD from 'd:\\psb.dbf'");
      Query1->Active = true;



Немного почитал про компоненты ADO, может их как раз использовать или в моем случае ado/bde без разницы?

Автор: Anikmar 20.2.2007, 19:51
Table1->TableType = ttFoxPro;

А не пробовали поставить ttDBase?

Автор: Salzar_bk 22.2.2007, 18:14
 smile 
Месяц назад была такая трабла.....
Короче нужно поставить драйвер foxpro наз-ся vfpoledb.exe - весит мега два где-то в гугле не найдешь - пиши.
После этого через ADO базы конектятся без проблем.
BDE не хочет ни через Query, ни через Table.

А дело все в том, что фокспрошные индекса наш билдер не понимает. Если програмно удалять индекса, и создавать новые - бедет читаться даже посредством BDE.

Автор: Atanvarno 1.6.2008, 21:39
Я подключился с помощью BDE через ODBC DSN к dbf файлу
СОбственно, при попытке выполнить запрос он мне говорит Key Violation
Причём, что самое странное, когда делаю Query активным, на форме в режиме создания всё работает.  smile 

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