Ели приходиться работать с файловой базой данных в среде С++ Builder, то Вам надо использовать компонент TStringGrid. Работа в общем проста, но для того, чтоб использовать этот компонент – надо знать кое-что больше…
На моё мнение, лучше использовать ещё одну таблицу, помимо стрингрида, так сказать вспомогательную.
Припустим, что:
1 |
AnsiString file1 = "с:\\temp.txt" ; //путь к базе |
Теперь создадим вспомогательную таблицу:
1 |
TStringList *Table1 = new TStringList ; |
Но только обязательно надо ее удалять, при закрытии проги, потому что компоненты, которые мы объявляем вручную – нужно также и удалять (каждый объект создается в оперативной памяти, а если не удалить его, при завершении работы программы – он там и останется):
1 2 3 4 |
void __fastcall TForm1::FormClose(TObject *Sender, TCloseAction &Action) { delete Table1 ; } |
Пример сохранения:
Для сохранения мы сначала переводим все данные из стрингрида в вспомогательную таблицу (разбивая строки на столбцы ф-цией: DelimitedText), а потом просто сохраняем вспомогательную табл. в файл.
1 2 3 4 5 |
for(int i = 0 ; iRowCount ; i++) { Table1->Strings[i] = StringGrid1->Rows[i]->DelimitedText ; //присваиваем вспомог. табл. (построчно) обработанные данные с StringGrid1 } Table1->SaveToFile(file1) ; // просто сохраняем. |
Пример загрузки:
Дальше, что бы загрузить нашу таблицу – сначала надо загрузить ее в вспомогательную табл (Table1) и построчно (в цикле) добавить в StringGrid из Table1.
Но не забываем ставить DelimitedText, для того, что бы строчку разбивать и собирать на столбцы)
1 2 3 4 5 6 7 |
Table1->LoadFromFile(file1) ; // Загружаем нашу вспомогательную табл. StringGrid1->RowCount = Table1->Count ; //Задаем колич. строк в StringGrid1 из вспомог. табл. for(int i = 0 ; iRowCount ; i++) { StringGrid1->Rows[i]->DelimitedText = Table1->Strings[i] ; // Копируем (построчно) данные с вспомогательной табл. в StringGrid1. } |
Внимание! Будьте внимательны, когда Вы добавляете строки в стрингриде сразу же добавляйте их и в вспомогательной таблице – иначе будут неприятные траблы:
1 2 |
StringGrid1->RowCount++; Table1->Append(“\n”); // Вот оно, добавление строки в вспомог. табл. |
Что бы таблица могла редактироваться вручную, включите в Options –> goEditing = true.
Юзайте на здоровья)))
Не понятно описано. Где создавать вспомогательную таблицу? Как ее создать? В каком блоке? В каком месте? и т.п.
Как создавать вспомогательную таблицу я написал))) Она не имеет графического вида. И создается также как и переменная)
В рядку
Table1->Strings[i] = StringGrid1->Rows[i]->DelimitedText;
Потрібно переписати так
Table1->Add(StringGrid1->Rows[i]->DelimitedText) ;
І ще оде,якщо кількість колонок буде змінюватись то не піде
Ну все таки ідея хороша!!! 5+
Да, можно и так)