C++ Builder
| Главная | Уроки | Статьи | FAQ | Форум | Downloads | Литература | Ссылки | RXLib | Диски |

 
корректно открыть DBF
slavic
Отправлено: 18.02.2007, 13:21


Ученик-кочегар

Группа: Участник
Сообщений: 6



Только начинаю работать с БД в билдере.
Следующая задача:
необходимо корректно открыть 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.

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

Отредактировано slavic — 18.02.2007, 13:24
AVC
Отправлено: 19.02.2007, 10:20


Ветеран

Группа: Модератор
Сообщений: 1583



CODE

void __fastcall TForm1::Bt_OpenDBFClick(TObject *Sender)
{
TTable *tbl = Tbl_OpenDBF;

DataSource1->DataSet = tbl; // отладка для визуального контроля

if (tbl->Active) tbl->Active = false;
tbl->DatabaseName = ExtractFilePath(Application->ExeName);
tbl->TableType    = ttFoxPro;
tbl->TableName    = "aaa_fox.dbf";
tbl->Active       = true;

// Вариант вывода в текст (Memo->Lines заменить на TStringList)
//tbl->DisableControls();
Memo1->Lines->Text = "";
int fcou = tbl->Fields->Count;
for (tbl->First(); !tbl->Eof; tbl->Next())
{  AnsiString str = "";
   for (int n=0; n < fcou; n++)
    { if (n) str += "; ";
       str += tbl->Fields->Fields[n]->AsString;
    }
   Memo1->Lines->Add(str);
}
//tbl->EnableControls();
Memo1->Lines->SaveToFile(tbl->DatabaseName + ChangeFileExt(tbl->TableName, ".txt"));
}

Вернуться в Работа с базами данных в C++Builder