![]() |
|
![]() ![]() ![]() |
|
typearray |
|
|||
Новичок Профиль Группа: Участник Сообщений: 4 Регистрация: 19.3.2014 Репутация: нет Всего: нет |
Здравствуйте!
Решил потренироваться и сделать небольшое приложение на последней версии Embarcadero® Delphi® XE5. Так как я ранее изучал Delphi 7, то ... хм ... в общем нововведений так много, что глаза на лбу... Помогите, пожалуйста разобраться с: 0) Как корректно подключатся к БД SQLite? При выполнении запроса к БД нужно подключиться со своими параметрами, выполнить запрос, а потом отключиться, освободив БД? Или же можно один раз подлючиться вначале и отключаться при событии закрытия формы? Повлияет ли это на скорость работы приложения? 1) SQLite. Настроил, с горем пополам, соединение с помощью: FDConnection1: TFDConnection; FDPhysSQLiteDriverLink1: TFDPhysSQLiteDriverLink; FireDAC коннект и драйвер SQLite. Вопрос: как сделать правильный SELECT BLOB? Таблица blocks: id (int) bname (text) bfile (blob) Пробую так: var BlobStream: TStream; ... DataModule1.FDConnection1.Connected := True; ... DataModule1.FDQuery1.Open('SELECT * FROM blocks WHERE id = 1'); BlobStream := DataModule1.FDQuery1.CreateBlobStream(DataModule1.FDQuery1.FieldByName('bfile'), ??????); - тут ошибка, не знаю что нужно... RichEdit1.Lines.LoadFromStream(BlobStream); 2) Как сделать корректный INSERT в БД с помощью FireDAC? Это сообщение отредактировал(а) typearray - 19.3.2014, 16:53 |
|||
|
||||
Antimol |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 118 Регистрация: 28.7.2007 Где: Украина, Киев Репутация: 4 Всего: 4 |
0) Если подключаться через FDConnection тогда открывать подключение при старте приложения.
При уничтожении приложения закрывайте подключение. 1) А почему бы не вывести данные с помощью DBMemo --------------------
Лучшее спасибо это "+" к репутации. Мой блог: ИНФОРМАТИЗАЦИЯ, и mirsovetov.net. Написание программ, исправление ошибок, статьи.... |
|||
|
||||
typearray |
|
|||
Новичок Профиль Группа: Участник Сообщений: 4 Регистрация: 19.3.2014 Репутация: нет Всего: нет |
Antimol, Спасибо за отклик! Можно подробнее про DBMemo? Есть какой-нибудь простой путь выбрать SELECT'ом BLOB-текст из БД в DBMemo?
|
|||
|
||||
Antimol |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 118 Регистрация: 28.7.2007 Где: Украина, Киев Репутация: 4 Всего: 4 |
Можно написать простой запрос вида:
где BLOB_FIELD_NAME - blob поле дальше в Delphi на форму переносим компонент (FDConnection - предполагаем что уже настроен) FDQuery, DataSource, DBMemo Настраиваем компоненты: FDQuery.Connection := FDConnection; FDQuery.SQL = 'вышеописанный запрос' DataSource.DataSet = FDQuery DBMemo.DataSource = DataSource DBMemo.DataField (кажется так называется) = BLOB_FIELD_NAME --------------------
Лучшее спасибо это "+" к репутации. Мой блог: ИНФОРМАТИЗАЦИЯ, и mirsovetov.net. Написание программ, исправление ошибок, статьи.... |
|||
|
||||
typearray |
|
|||
Новичок Профиль Группа: Участник Сообщений: 4 Регистрация: 19.3.2014 Репутация: нет Всего: нет |
Antimol, Благодарю за внимание! Сделал всё-таки через Stream...
Надеюсь кому-нибудь пригодится: 0) Подключаться к базе можно 1 раз "вначале" и отключаться в "конце". 1) Выбрать BLOB получилось так: uses ... Data.DB (нбх для TBlobStreamMode.bmRead) var BlobStream: TStream; // Выборка блока данных with DataModule1.FDQuery1 do begin Active := False; SQL.Clear; SQL.Add('SELECT *'); SQL.Add('FROM blocks'); SQL.Add('WHERE id = "'+UTF8Encode(id)+'"'); Active := True; BlobStream := CreateBlobStream(FieldByName('bfile'), TBlobStreamMode.bmRead); !!! end; RichEdit1.Lines.LoadFromStream(BlobStream); 2) Можно использовать следующее function GetFileAsBytesValue(AFileName: TFileName): TArray<Byte>; var Len: Integer; LStream: TMemoryStream; begin LStream := TMemoryStream.Create; try LStream.LoadFromFile(AFileName); Len := LStream.Size; SetLength(Result, Len); Move(LStream.Memory^, Result[0], Len); finally LStream.Free; end; end; procedure dmDB.InsertPicture; const QRY = 'INSERT INTO Memo(Picture) VALUES(?)'; var LTransaction: TDBXTransaction; LDBXCmd: TSQLQuery; LParam: TParam; begin LTransaction := FDBCon.BeginTransaction; LDBXCmd := TSQLQuery.Create(FDBCon); try try LDBXCmd.SQLConnection := FDBCon; LDBXCmd.SQL.Text := QRY; LParam := LDBXCmd.Params.CreateParam(ftBlob, 'Picture', ptInput); LParam.AsBlob := GetFileAsBytesValue('d:\sample.bmp'); LDBXCmd.ExecSQL; except on E: Exception do FDBCon.RollbackFreeAndNil(LTransaction); end; FDBCon.CommitFreeAndNil(LTransaction); finally LDBXCmd.Free; end; end; |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Delphi: Базы данных и репортинг" | |
|
Запрещено: 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами Обязательно указание: 1. Базы данных (Paradox, Oracle и т.п.) 2. Способа доступа (ADO, BDE и т.д.)
FAQ раздела лежит здесь! Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Vit, Петрович. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Delphi: Базы данных и репортинг | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |