Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Что за глюк с картинками в таблице Paradox???!!! [D6, Paradox]


Fissher ©   (2002-08-15 22:53:00) 

Столкнулся я тут с совершенно необъяснимым для себя явлением.
Есть у меня тут таблица "MyTable" с разными полями, а одно из них - "Picture" типа Graphic. Записываю я в это поле, значит, картинку BMP следующим образом:
Query.SQL.add("UPDATE MyTable SET Picture = :par WHERE Face = ""+Face_Key+"";");
ParamByName("par").DataType := ftBlob;
ParamByName("par").ParamType := ptInput;
ParamByName("par").LoadFromStream(ms,ftBLOB);

Картинка записывается, но:
Глюк №1)после ее извлечения из таблицы
Query.FieldByName("Picture").Size всегда = 0 !!!, хотя она при этом в Query содержится!
Глюк №2)
При удалении этой картинки (даже вместе со всей записью), она удаляется из файла MyTable .DB, а файл MyTable. MBразмером совсем не уменьшается!!!
Что делать??? ПОМОГИТЕ!!! А то у меня так база все место на винте сожрет!!!!!!!


Всем спасибо! Разобрался!   (2002-08-16 12:08:00) [1]

Всем огромное спасибо! Разобрался!


Desdechado   (2002-08-16 10:17:00) [2]

Size определяй у Stream"а, когда в него загрузишь картинку из блоба

а размер - так во всех СУБД такое, не пугайся


Leran2002   (2002-08-16 08:10:00) [3]


> Query.FieldByName("Picture").Size всегда

Это нормально, т.к. это Блоб поле у него нет Size...

> не уменьшается!!!

При удалении записи размер таблицы не уменьшается...
Тебе просто нужно упаковать таблицу...

uses BDE;

// Pack a Paradox or dBASE table
procedure PackTable(Table: TTable);
var
Props: CURProps;
hDb: hDBIDb;
TableDesc: CRTblDesc;
begin
if not Table.Active then
raise EDatabaseError.Create("Table must be opened to pack");
if not Table.Exclusive then
raise EDatabaseError.Create("Table must be opened exclusively to pack");
Check(DbiGetCursorProps(Table.Handle, Props));
if Props.szTableType = szPARADOX then begin
FillChar(TableDesc, sizeof(TableDesc), 0);
Check(DbiGetObjFromObj(hDBIObj(Table.Handle), objDATABASE, hDBIObj(hDb)));
StrPCopy(TableDesc.szTblName, Table.TableName);
StrPCopy(TableDesc.szTblType, Props.szTableType);
TableDesc.bPack := True;
Table.Close;
Check(DbiDoRestructure(hDb, 1, @TableDesc, nil, nil, nil, False));
end
else
if (Props.szTableType = szDBASE) then
Check(DbiPackTable(Table.DBHandle, Table.Handle, nil, szDBASE, True))
else
raise EDatabaseError.Create("Table must be either of Paradox or dBASE " +
"type to pack");
Table.Open;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
if Table1.Active then Table1.Close;
Table1.Exclusive:=true; // включаем эксклюзивный режим
Table1.Open; // таблица должна быть открыта
PackTable(Table1);
Table1.Close;
Table1.Exclusive:=false; // выключаем эксклюзивный режим
Table1.Open;
end;


Наверх

Титульная страница Поиск, карта сайта Написать письмо