Solved

Saving and retrieving an icon into a pic control.

Posted on 1997-08-06
8
228 Views
Last Modified: 2010-04-04
This is a very easy question.  But I'm giving a ton a points
because I need it answered.

Can someone provide a clear example of how to save and
retrieve a icon from a SQLServer database.  I'm not using
the databound controls.  I have my own query where I insert, update, and delete from a table containing a blob field.  I have a :MyIcon parameter that I am trying to fill with the blob data in the SQL statement.  

I tried to look at what the VCL does for the TDBImage control but I couldn't make heads or tails out of it.

Thanks, RM  

0
Comment
Question by:blitz051697
  • 4
  • 3
8 Comments
 
LVL 3

Expert Comment

by:mirek071497
ID: 1340708
if you familiar with stream's then try save and load icon from memory stream and then load or write this stream to a blob field.
If you have problem's or no will be another answer i write code but not today.
0
 

Author Comment

by:blitz051697
ID: 1340709
Increasing points.....
0
 

Author Comment

by:blitz051697
ID: 1340710
I'm not all that familar with streams yet.   There should be an easier way.  
0
 
LVL 3

Expert Comment

by:mirek071497
ID: 1340711
Stream's is the easiest way !!!
You must learn about stream's

This is example :
{ query work's on you'r data
  Image1 have icon for save
  Image2 receive icon from load }

{ save to data base }
procedure TForm1.Button1Click(Sender: TObject);
var
  Stream1 : TBlobStream;
begin
  Query1.Open;
  Query1.Edit;
  Stream1 := TBlobStream.Create( Query1Blob_ICON, bmReadWrite );
  Image1.Picture.Icon.SaveToStream(Stream1);
  Query1.Post;
  Stream1.Free;
  Query1.Close;
end;

{ load from data base }
procedure TForm1.Button2Click(Sender: TObject);
var
  Stream1 : TBlobStream;
begin
  Query1.Open;
  Query1.First;
  Stream1 := TBlobStream.Create( Query1Blob_ICON, bmRead );
  Image2.Picture.Icon.LoadFromStream(Stream1);
  Stream1.Free;
  Query1.Close;
end;

any questions ?
0
Is Your Active Directory as Secure as You Think?

More than 75% of all records are compromised because of the loss or theft of a privileged credential. Experts have been exploring Active Directory infrastructure to identify key threats and establish best practices for keeping data safe. Attend this month’s webinar to learn more.

 

Author Comment

by:blitz051697
ID: 1340712
I understand how to use the stream to pull the data into the image control.  This works fine.  However, how do I set the blob data in the SQL statement as a param in order to save it?   Your example assumes a  TBlobField object.  

For example, given this query below, how do I stream the blob data into the TheBlobData parameter?  (not a field)

INSERT INTO MYTABLE (MYBLOB) VALUES (:TheBlobData)

note : MYBLOB is a blob field in the database



0
 

Author Comment

by:blitz051697
ID: 1340713
Adjusted points to 335
0
 
LVL 3

Expert Comment

by:mirek071497
ID: 1340714
You can't do this in SQL Statement because param's is type Variant and You can't (or i don'tknow how) assign value other then : varByte,varSmallint,varInteger,varSingle,varDouble,varCurrency,varDate,varOleStrvarString,varBoolean.

The TDBiMage dont do this in SQL too.

the DBIMAGE do this :

procedure TDBImage.UpdateData(Sender: TObject);
begin
  if FDataLink.Field is TBlobField then
    with TBlobField(FDataLink.Field) do
      if Picture.Graphic is TBitmap then
        Assign(Picture.Graphic)
      else
        Clear;
end;

procedure TDBImage.SetPicture(Value: TPicture);
begin
  FPicture.Assign(Value);
end;

You can do this in some other metod and i think so my previous is good for You. Tell me Why You con't use Field's for Query, mayby i resolve this problem.
0
 
LVL 22

Accepted Solution

by:
pivar earned 330 total points
ID: 1340715
Missing some information about what SQLserver your using and what kind of field your using, this is one solution for MS SQLserver:

If your icon (MYBLOB) field is declared as an image-field, you should insert the icon as hexadecimal values. That is:

INSERT INTO MYTABLE(MYBLOB) VALUES (0x0affaabb99...

You can convert your icon data to a string of hexadecimal values and include it in your SQL statement
"Query1.SQL.Add('INSERT INTO MYTABLE(MYBLOB) VALUES('+STRINGOFHEXVALUES+')');"

I don't think that you can have larger parameters than 255 characters in Delphi 2. I'm not sure but I think this is solved in Delphi 3.

/pivar
0

Featured Post

Is Your Active Directory as Secure as You Think?

More than 75% of all records are compromised because of the loss or theft of a privileged credential. Experts have been exploring Active Directory infrastructure to identify key threats and establish best practices for keeping data safe. Attend this month’s webinar to learn more.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Objective: - This article will help user in how to convert their numeric value become words. How to use 1. You can copy this code in your Unit as function 2. than you can perform your function by type this code The Code   (CODE) The Im…
Have you ever had your Delphi form/application just hanging while waiting for data to load? This is the article to read if you want to learn some things about adding threads for data loading in the background. First, I'll setup a general applica…
Video by: Mark
This lesson goes over how to construct ordered and unordered lists and how to create hyperlinks.
Many functions in Excel can make decisions. The most simple of these is the IF function: it returns a value depending on whether a condition you describe is true or false. Once you get the hang of using the IF function, you will find it easier to us…

867 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

24 Experts available now in Live!

Get 1:1 Help Now