Форум: "Базы";
Поиск по всему сайту: delphimaster.net;
Текущий архив: 2002.03.28;
Скачать: [xml.tar.bz2];




Вниз

Помогите! 


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.




Форум: "Базы";
Поиск по всему сайту: delphimaster.net;
Текущий архив: 2002.03.28;
Скачать: [xml.tar.bz2];




Наверх





Память: 0.73 MB
Время: 0.024 c
6-91018           McSimm                2002-01-15 10:35  2002.03.28  
TIdHTTP и cookie


7-91088           Pat                   2001-12-26 21:38  2002.03.28  
FAR. Список процессов.


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


3-90727           JEff                  2002-02-25 18:34  2002.03.28  
КАК ЖЕ МНЕ ИЗМЕНИТЬ CAPTION QRLabel а?


1-90827           IronHawk              2002-03-15 17:09  2002.03.28  
Как обнулить переменную ?