![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Что за глюк с картинками в таблице 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;