Мне нужно сделать тест. Базу вопросов хочу хранить как file of record. Проблема заключается в том, что в тесте должны быть картинки. Хотел сделать как поле записи. Но вот проблема: в файл не записывается ни поле :TImage ни :TPicture ни даже :TBitmap. Как это можно осуществить?
если мне для работы ДБГрид не нужен(таблица на форме)
Хм... Ну, обойдись без него, просто не клади его на форму. Никто не запрещает связывать тот же TDBImage напрямую с TDataSource. Грид - он только для отображения информации.
Цитата
Вот нашел как программно сжать бд.
Ух ты "А мужики-то не знают" (С), и по-старинке пользуются:
Uses ComObj; // Добавить если еще нет этого модуля
// ...
function CompactAndRepair(DB: string) : boolean; var v: OLEvariant; begin { CompactAndRepair } Result := True; try v := CreateOLEObject('JRO.JetEngine'); try //try v.CompactDatabase('Provider=Microsoft.Jet.OLEDB.4.0;Data Source=' + DB, 'Provider=Microsoft.Jet.OLEDB.4.0;Data Source=' + DB + 'x;Jet OLEDB:Engine type=5'); DeleteFile(DB); RenameFile(DB + 'x', DB) finally v := Unassigned end; { try }
// Вызывать - так: procedure TForm1.btnCompactDBClick(Sender: TObject); const sDBPath = 'F:\Programs\Delphi\myProject\base.mdb'; begin ADOTable1.Close; // Закрываем все открытые таблицы и саму базу... ADOConnection1.Close;
if CompactAndRepair(sDBPath) then ShowMessage('Success') else ShowMessage('Fault');
ADOConnection1.Open; //Открываем в обратном порядке, сначала базу, потом - таблицы ADOTable1.Open; end;
, только для этого надо не устанавливать в Инспекторе Объектов ADOConnection.Connected в True, а делать это при инициализации формы, иначе база будет открыта в монопольном режиме, и сжатие не будет произведено. То же самое касается и ADOTable - они в Design-Time должны быть неактивны, активизировать их надо будет при запуске:
procedure TForm1.FormCreate(Sender: TObject); begin ADOConnection1.Open; ADOTable1.Open;