[H-L-L.ru] |
Форма входа |
Меню сайта |
Categories | |
|
Главная » Статьи » C++ Builder 6 - GUI » Программы с GUI |
В данной статье я собрал основные методы работы с базами данных. Рекомендую работать с англоязычными именами полей без пробелов. Запуск приложения базы данных из любого каталога, при условии что и исполняемый файл и база данных находятся в нем: String filename = "Название_базы.mdb"; if(!FileExists(ExtractFilePath(Application->ExeName)+filename)) { AnsiString ds = "Файл базы данных не обнаружен \n\n\t" +filename; ShowMessage( ds ); } else { String WayToBase=ExtractFilePath(Application->ExeName)+filename; ADOConnection1->ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;User ID=Admin;Data Source="+WayToBase+";Mode=Share Deny None;Jet OLEDB:System database="";Jet OLEDB:Registry Path="";Jet OLEDB:Database Password="";Jet OLEDB:Engine Type=5;Jet OLEDB:Database Locking Mode=1;Jet OLEDB:Global Partial Bulk Ops=2;Jet OLEDB:Global Bulk Transactions=1;Jet OLEDB:New Database Password="";Jet OLEDB:Create System Database=False;Jet OLEDB:Encrypt Database=False;Jet OLEDB:Don't Copy Locale on Compact=False;Jet OLEDB:Compact Without Replica Repair=False;Jet OLEDB:SFP=False;"; ADOConnection1->Connected = true; ADOTable1->Active = true; ADOTable1->Open(); } Загрузка изображения формата jpeg из blob - поля в Image: #include "jpeg.hpp" if(!(TBlobField*)ADOTable1->FieldByName("Поле_БД")->IsNull){ TMemoryStream* strm = new TMemoryStream; TJPEGImage *ptJpg=new TJPEGImage; ((TGraphicField*)ADOTable1->FieldByName("Поле_БД"))->SaveToStream(strm); strm->Seek(0,0); if (*(Word*)strm->Memory == 0xD8FF) Image1->Picture->Graphic=ptJpg; Image1->Picture->Graphic->LoadFromStream(strm); delete strm; delete ptJpg; } Загрузка изображения формата jpeg, png, gif, bmp из blob - поля в Image: #include "jpeg.hpp" #include "GIFImg.hpp"//нет в C++ Builder 6 #include "PngImage.hpp"//начиная с C++ Builder 2009 TMemoryStream* C = new TMemoryStream(); if ( OpenDialog1->Execute() ) C->LoadFromFile( OpenDialog1->FileName ); C->Seek(0,0); Graphics::TBitmap* ptBmp = new Graphics::TBitmap; TJPEGImage *ptJpg = new TJPEGImage; TGIFImage *ptGif = new TGIFImage; TPngImage *ptPng = new TPngImage; ptPng->Assign(ptBmp); //требуется для того, чтобы у PNG появился Header if (*( Word*) C->Memory == 0xD8FF ) Image1->Picture->Graphic = ptJpg; else if (*( LongWord*) C->Memory== 0x474E5089 ) Image1->Picture->Graphic = ptPng; else if (*( LongWord*) C->Memory == 0x38464947 ) Image1->Picture->Graphic = ptGif; else if (*( Word*) C->Memory== 0x4D42) Image1->Picture->Graphic = ptBmp; Image1->Picture->Graphic->LoadFromStream( C ); delete C; delete ptJpg; delete ptGif; delete ptPng; delete ptBmp; Сохранение изображения формата jpeg из Image в blob - поле: #include "jpeg.hpp" if(Image1->Picture->Graphic != 0) { ADOTable1->Edit(); TMemoryStream* strm3 = new TMemoryStream(); Image1->Picture->Graphic->SaveToStream(strm3); ((TGraphicField*)ADOTable1->FieldByName("Поле_БД"))->LoadFromStream(strm3); delete strm3; ADOTable1->Post(); } Загрузка форматированного текста из blob - поля в RichEdit и Memo: if(!(TBlobField*)ADOTable1->FieldByName("Поле_БД")->IsNull){ TMemoryStream* strm = new TMemoryStream; ((TGraphicField*)ADOTable1->FieldByName("Поле_БД"))->SaveToStream(strm); strm->Seek(0,0); RichEdit1->Lines->LoadFromStream(strm); delete strm; } Сохранение форматированного текста из RichEdit и Memo в blob - поле: ADOTable1->Edit(); TMemoryStream* strm = new TMemoryStream(); RichEdit1->Lines->SaveToStream(strm); ((TGraphicField*)ADOTable1->FieldByName("Поле_БД"))->LoadFromStream(strm); delete strm; Фильтрация в базе данных. Представим, что у нас есть поля Fam - фамилия, Name - имя, Year - год рождения. ADOTable1->Filter = "Fam=Иванов"; ADOTable1->Filtered = true; Отмена фильтрации: ADOTable1->Filtered = false; Пример: ADOTable1->Filter = "Year = 1976"; ADOTable1->Filtered = true; Так же в запросе можно использовать AND - и, OR - или, > - больше, < - меньше. Пример: ADOTable1->Filter = "Year > 1976"; ADOTable1->Filtered = true; ADOTable1->Filter = "Year > 1976 AND Name = Иван"; ADOTable1->Filtered = true; Поиск, первый метод: TLocateOptions Options; Options << loPartialKey << loCaseInsensitive; ADOTable1->Locate("Fam", "Иванов", Options); DBGrid1->SetFocus(); По нескольким полям: TLocateOptions Options; Variant locvalues[] = {"Иванов", "Иван"}; Options << loPartialKey << loCaseInsensitive; ADOTable1->Locate("Fam, Name", VarArrayOf(locvalues, 1), Options); DBGrid1->SetFocus(); Где loCaseInsensitive - указывает на нечувствительность регистра запроса, loPartialKey - допустимость частичного совпадения. Второй: EditName->Text = Table1->Lookup("Fam", "Иванов", "Name"); Итак, я рассмотрел основные методы и сложности, которые могут возникнуть при проектировании баз данных. Успехов вам, в вашем творчестве! Базы данных Microsoft Access в C++ Builder 6 с использованием ADO. Часть 1 Базы данных Microsoft Access в C++ Builder 6 с использованием ADO. Часть 2 Источник: изображение загрузка поток база данных Access | |
Всего комментариев: 2 | ||
| ||