Создание универсального инструмента для сохранения содержимого таблиц в локальных файлах
В заключение данной серии советов создадим приложение, позволяющее сохранять в локальных файлах компонента TClientDataSet любые доступные таблицы.
С этой целью создадим форму, содержащую два компонента TListBox, два компонента TDBGrid, один компонент TSplitter, два компонента TEdit, две кнопки и один TCheckBox.
Поместим также на форму TSaveDialog, TDatabase, TSession, TTable, TClientDataSet, TDataSetProvider, два компонента TDataSource.
Рис. 4 Форма приложения для сохранения таблиц в локальных файлах.
Установим следующие значения свойств этих компонентов:
Компонент | Свойство | Значение |
Session1 | SessionName | MySession |
Database1 | SessionName | MySession |
LoginPrompt | false | |
DatabaseName | MyDB | |
Table1 | SessionName | MySession |
ClientDataSet1 | ProviderName | DataSetProvider1 |
Active | false | |
DataSource1 | DataSet | Table1 |
DataSource2 | DataSet | ClientDataSet1 |
DataSetProvider1 | DataSet | Table1 |
DBGrid1 | DataSource | DataSource1 |
DBGrid2 | DataSource | DataSource2 |
SaveDialog1 Filter | ClientDataSet | Files|*.cds|All files|*.* |
DefaultExt | *.cds |
Создадим обработчики событий, связанные с нажатиями на кнопки, выбором из списков и созданием формы приложения:
//------------------------------------------------------------ #include <vcl.h> #pragma hdrstop #include "uni_cds1.h" //------------------------------------------------------------ #pragma package(smart_init) #pragma resource "*.dfm" TForm1 *Form1; //------------------------------------------------------------ __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { } //---------------------------------------------------------- void __fastcall TForm1::FormCreate(TObject *Sender) { TStringList *DBList = new TStringList(); try { Session1->GetAliasNames(DBList); for (int I = 0; I < DBList->Count; I++) ListBox1->Items->Add(DBList->Strings[I]); } __finally { delete DBList; } } //------------------------------------------------------------- void __fastcall TForm1::Button1Click(TObject *Sender) { Database1->Connected=false; ClientDataSet1->Close(); Database1->Params->Clear(); Database1->AliasName= ListBox1->Items->Strings[ListBox1->ItemIndex]; Database1->Params->Add("User Name="+Edit1->Text); Database1->Params->Add("Password="+Edit2->Text); TStringList *TabList = new TStringList(); try { Database1->Connected=true; Session1->GetTableNames("MyDB","",!(CheckBox1->Checked),false, TabList) ; ListBox2->Items=TabList; } __finally { delete TabList; } } //----------------------------------------------------------- void __fastcall TForm1::ListBox2Click(TObject *Sender) { Table1->Close(); ClientDataSet1->Close(); Table1->DatabaseName=Database1->DatabaseName ; Table1->TableName= ListBox2->Items->Strings[ListBox2->ItemIndex]; Table1->Open(); ClientDataSet1->Open(); } void __fastcall TForm1::Button2Click(TObject *Sender) { if (SaveDialog1->Execute()) { ClientDataSet1->SaveToFile(SaveDialog1->FileName); } } //-----------------------------------------------------------