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"));
}
| |
|