Мне нужно сделать тест. Базу вопросов хочу хранить как file of record. Проблема заключается в том, что в тесте должны быть картинки. Хотел сделать как поле записи. Но вот проблема: в файл не записывается ни поле :TImage ни :TPicture ни даже :TBitmap. Как это можно осуществить?
то что я там заметил - меня особо не обрадовало: составление таблиц, сортировки по параметрам итд.. "На готовенькое" не попал.
А на что ты рассчитывал попасть? На готовую программу?
Чего там делать? Открываешь MS Access, создаешь одну таблицу, содержащую как минимум одно поле типа OLEObject - я назвал его image - (в нем будет храниться изображение. Если тебе надо еще что-то - создавай сразу и все остальное).
Все поля, которые нужны - создал? Сохраняешь БД, и выходишь из Access-а, вся дальнейшая работа - из Дельфи. Сначала надо связать базу с твоей программой. Для этого на форму положим компонент TADOConnection (из раздела DbGo, у меня Д2009, поэтому, извини, все дальнейшие места расположения компонентов я буду приводить именно из этой версии), компонент TADOTable (тоже DbGo), и TDataSource (из Data Access)...
Вот тут лежит Видео, около 2.5 Мб, показывающее, как и в какой последовательности надо подключать базу к проекту на Дельфи (это было давно сделано, почти 2 года назад, просто сейчас оно оказалось нужно )
Подключил все, DBGrid показывает пустые ячейки? Прекрасно... Теперь можно их заполнять. Чтоб занести текст - можно прямо использовать DBGrid (т.е., прямо в нем и печатать). Картинки - да пожалуйста:
// 1. Из TImage в текущую запись БД: procedure TForm1.Button1Click(Sender: TObject); var memStr: TMemoryStream; begin memStr := TMemoryStream.Create; try Image1.Picture.Graphic.SaveToStream(memStr); memStr.Seek(0, soFromBeginning); DBGrid1.DataSource.DataSet.Edit; TBlobField(DBGrid1.DataSource.DataSet.FieldByName('image')).LoadFromStream(memStr); DBGrid1.DataSource.DataSet.Post; finally memStr.Free; end; end;
// 2. Из текущей записи БД назад в TImage - легко: procedure TForm1.Button2Click(Sender: TObject); var bStream: TADOBlobStream; bm: TBitmap; begin if not DBGrid1.DataSource.DataSet.FieldByName('image').IsNull then begin bStream := TADOBlobStream.Create(TBlobField(DBGrid1.DataSource.DataSet.FieldByName('image')), bmRead); try bm := TBitmap.Create; bm.LoadFromStream(bStream); Image2.Picture.Bitmap.Assign(bm); // Это я для теста гружу в ДРУГОЙ Image bm.Free; finally bStream.Free; end; end; end;