Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Подключение к БД SQLite, FireDAC и Delphi RAD XE5, Подключение к БД SQLite, Запросы 
:(
    Опции темы
typearray
Дата 19.3.2014, 16:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 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
PM MAIL   Вверх
Antimol
Дата 19.3.2014, 19:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 118
Регистрация: 28.7.2007
Где: Украина, Киев

Репутация: 4
Всего: 4



0) Если подключаться через FDConnection тогда открывать подключение при старте приложения.
При уничтожении приложения закрывайте подключение.

1) А почему бы не вывести данные с помощью DBMemo

--------------------
Лучшее спасибо это "+" к репутации.   Мой блог: ИНФОРМАТИЗАЦИЯ, и mirsovetov.net. Написание программ, исправление ошибок, статьи....
PM MAIL WWW ICQ   Вверх
typearray
Дата 19.3.2014, 20:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 19.3.2014

Репутация: нет
Всего: нет



Antimol, Спасибо за отклик! Можно подробнее про DBMemo? Есть какой-нибудь простой путь выбрать SELECT'ом BLOB-текст из БД в DBMemo?
PM MAIL   Вверх
Antimol
Дата 19.3.2014, 22:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 118
Регистрация: 28.7.2007
Где: Украина, Киев

Репутация: 4
Всего: 4



Можно написать простой запрос вида:


Код

Select ID, BLOB_FIELD_NAME FROM SOME_TABLE

где 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. Написание программ, исправление ошибок, статьи....
PM MAIL WWW ICQ   Вверх
typearray
Дата 20.3.2014, 08:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 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;
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Базы данных и репортинг"
Vit
Петрович

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами


Обязательно указание:

1. Базы данных (Paradox, Oracle и т.п.)

2. Способа доступа (ADO, BDE и т.д.)


  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • Вопросы по SQL и вопросы по базам данных не связанные с Дельфи задавать здесь

FAQ раздела лежит здесь!


Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Vit, Петрович.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Базы данных и репортинг | Следующая тема »


 




[ Время генерации скрипта: 0.1043 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.