Каталог статей
PDA-версия страницы
Базы данных Microsoft Access в C++ Builder 6 с использованием ADO. Часть 3
В данной статье я собрал основные методы работы с базами данных. Рекомендую работать с англоязычными именами полей без пробелов. Запуск приложения базы данных из любого каталога, при условии что и исполняемый файл и база данных находятся в нем: 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
Категория: Программы с GUI | Добавил: Admin (05.07.2012)
Просмотров: 24284 | Комментарии: 2
| Рейтинг: 5.0 /7
Всего комментариев: 2
Порядок вывода комментариев:
По умолчанию
Сначала новые
Сначала старые
Добавлять комментарии могут только зарегистрированные пользователи.
[
Регистрация |
Вход ]
Помочь сайту!
Партнёры сайта
Закладки
Поиск по сайту