Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.03.28;
Скачать: CL | DM;

Вниз

Помогите!   Найти похожие ветки 

 
Lena   (2002-03-01 20:32) [0]

Есть проблема поместить в BLOB поле несколько картинок в формате jpg; Пыталась через stringlist.savetostream и
tblobfield(field).loadfromstream,
хотелось чтобы в tsringlist[0] была
первая картинка, а в tsringlist[1] - вторая
но когда я просто делаю stringlist.loadfromstream(tjpegpicture);//1.jpg size = 31 kb
и тут же stringlist.savetostream(tmemorystream)
размер файла 2.jpg := 6 байт :(
Может быть tstringlist мне не поможет?
Что посоветуете?


 
Набережных С.   (2002-03-02 20:14) [1]

Не очень понятен вопрос, но может быть это поможет?
unit Unit1;

interface

uses
Windows, Messages, SysUtils, Classes,
Graphics, Controls, Forms, Dialogs,
Db, ADODB, ExtDlgs, ExtCtrls, StdCtrls;

type
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
Button3: TButton;
OPD: TOpenPictureDialog;
ADOTable1: TADOTable;
ADOTable1BlobField: TBlobField;
Image1: TImage;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
private
{ Private declarations }
FList:TStringList;
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.DFM}

uses Jpeg;

procedure WriteBlob(Source: TStrings; Field: TBlobField);
var
B,T:TStream;
n,m:integer;
Img:TJPEGImage;
begin
B:=Field.DataSet.CreateBlobStream(Field,bmWrite);
try
B.Size:=0;
n:=Source.Count;
B.Write(n,SizeOf(n));
T:=TMemoryStream.Create;
try
n:=0;
while n < Source.Count do
begin
TObject(Img):=Source.Objects[n];
Img.SaveToStream(T);
T.Position:=0;
m:=T.Size;
B.Write(m,SizeOf(m));
B.CopyFrom(T,m);
T.Size:=0;
Inc(n);
end;
finally
T.Free;
end;
finally
B.Free;
end;
end;

procedure ReadBlob(Target: TStrings; Field: TBlobField);
var
B,T:TStream;
n,m:integer;
Img:TJPEGImage;
begin
B:=Field.DataSet.CreateBlobStream(Field,bmRead);
try
if B.Size < SizeOf(n) then Exit;
B.Position:=0;
B.Read(n,SizeOf(n));
if n > 0 then Target.Capacity:=n;
T:=TMemoryStream.Create;
try
while n > 0 do
begin
B.Read(m,SizeOf(m));
T.CopyFrom(B,m);
Img:=TJPEGImage.Create;
Target.AddObject("",Img);
T.Position:=0;
Img.LoadFromStream(T);
T.Size:=0;
Dec(n);
end;
finally
T.Free;
end;
finally
B.Free;
end;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
Img:TJPEGImage;
begin
if FList <> nil then
while FList.Count > 0 do
begin
FList.Objects[FList.Count-1].Free;
FList.Delete(FList.Count-1);
end
else
FList:=TStringList.Create;
Img:=TJPEGImage.Create;
OPD.Execute;
Img.LoadFromFile(OPD.FileName);
FList.AddObject("",Img);
Img:=TJPEGImage.Create;
OPD.Execute;
Img.LoadFromFile(OPD.FileName);
FList.AddObject("",Img);
Img:=TJPEGImage.Create;
OPD.Execute;
Img.LoadFromFile(OPD.FileName);
FList.AddObject("",Img);
ADOTable1.Open;
ADOTable1.Edit;
WriteBlob(FList,ADOTable1BlobField);
ADOTable1.Post;
ADOTable1.Close;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
if FList <> nil then
while FList.Count > 0 do
begin
FList.Objects[FList.Count-1].Free;
FList.Delete(FList.Count-1);
end
else
FList:=TStringList.Create;
ADOTable1.Open;
ReadBlob(FList,ADOTable1BlobField);
ADOTable1.Close;
end;

procedure TForm1.Button3Click(Sender: TObject);
const
n:integer = 0;
var
img:TJPEGImage;
begin
if FList.Count = 0 then exit
else if n >= FList.Count then n:=0;
Image1.Picture.Graphic:=nil;
TObject(img):=FList.Objects[n];
Image1.Picture.Assign(img);
Inc(n);
end;

end.



Страницы: 1 вся ветка

Текущий архив: 2002.03.28;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.009 c
14-91041
evgeg
2002-02-06 23:18
2002.03.28
Безграмотность


1-90872
zam
2002-03-17 13:11
2002.03.28
Как вывести диалог selectdirectory не используя qtintf.dll?


1-90944
Voldemar
2002-03-14 15:12
2002.03.28
Turbo Professional...


3-90805
lightix
2002-03-04 15:36
2002.03.28
Помогите с БД + Quick REPORT


3-90738
aleks2000
2002-02-24 12:48
2002.03.28
<B>Как открыть ДОС базу данных dBase III в Делфи, так чтобы было написано на нормальном русском</B>