سلام
راستشو بخواي من هيچ وقت با دستورات Append يا Post كار نكردم ، هميشه كد SQL رو
نوشتم . اينه كه اگه در مورد كد مثال خودت چيزي بگم ممكنه سوتي بدم !
برات يه Unit كامل مينويسم كه سه تا تابع داره . تابع Save كه نام ، نام خانوادگي و عكس رو
به ترتيب از Edit1 ، Edit2 و Image1 ميخونه و داخل Database ذخيره ميكنه . تابع Update كه
يه مقدار Integer رو به عنوان ورودي ميگيره ( در واقع Id همون ركوردي كه ميخواي Edit كنيش )
و نام ، نام خانوادگي و عكس رو مثل Save از فرم ميخونه . تابع Load كه اطلاعات جدول رو
داخل فرم بازيابي ميكنه . در ضمن Jpeg رو هم توي قسمت Uses نوشتم .
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, StdCtrls, JPEG, DB, ADODB;
type
TForm1 = class(TForm)
Button1: TButton;
Image1: TImage;
ADOQuery1: TADOQuery;
Edit1: TEdit;
Edit2: TEdit;
DataSource1: TDataSource;
private
{ Private declarations }
public
Procedure Save;
Procedure update(selected_id : integer);
Procedure Load;
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
{ TForm1 }
procedure TForm1.Save;
var
stream:tstream;
begin
with ADOQuery1 do
begin
sql.Text:='select * from picsample';
Open;
end;
stream:=ADOQuery1.CreateBlobStream(ADOQuery1.Field ByName('pic'),bmRead);
image1.Picture.Graphic.SaveToStream(stream);
With ADOQuery1 do
begin
SQL.Text:='insert into picsample (name,family,pic) VALUES (:p0,:p1,:p2)';
Parameters.ParamByName('p0').Value:=edit1.Text;
Parameters.ParamByName('p1').Value:=edit2.Text;
Parameters.ParamByName('p2').LoadFromStream(stream ,ftBlob);
ExecSQL;
end;
end;
procedure TForm1.update(selected_id : integer);
var
Stream:TStream;
begin
with ADOQuery1 do
begin
sql.Text:='select * from picsample';
Open;
end;
stream:=ADOQuery1.CreateBlobStream(ADOQuery1.Field ByName('pic'),bmRead);
image1.Picture.Graphic.SaveToStream(stream);
With ADOQuery1 do
begin
SQL.Text:='update picsample set name = :p0,family = :p1,pic = :p2 where id = :p3';
Parameters.ParamByName('p0').Value:=edit1.Text;
Parameters.ParamByName('p1').Value:=edit2.Text;
Parameters.ParamByName('p2').LoadFromStream(stream ,ftBlob);
Parameters.ParamByName('p3').Value:=selected_id;
ExecSQL;
end;
end;
procedure TForm1.Load;
var
stream:TStream;
pic:TJPEGImage;
begin
With ADOQuery1 do
begin
sql.text:='select * from picsample';
Open;
end;
edit1.Text:=ADOQuery1.FieldByName('name').AsString ;
edit2.Text:=ADOQuery1.FieldByName('family').AsStri ng;
stream:=ADOQuery1.CreateBlobStream(ADOQuery1.Field ByName('pic'),bmRead);
if stream.Size<>0 then
begin
if copy(ADOQuery1.FieldByName('pic').AsString,1,1)='B ' then
image1.Picture.Bitmap.LoadFromStream(stream)
else
begin
pic:=TJPEGImage.Create;
pic.LoadFromStream(stream);
image1.Picture.Assign(pic);
pic.Free;
end;
end
else
image1.Picture.Graphic:=nil;
stream.Free;
end;
end.
موفق باشيد .