안녕하십니까?
저번 저의 이미지 변환에 대해 잘 보았습니다.
그것을 적용하다보니 막히는 부분이 있어서 다시 한번 문의 드립니다.
이번엔 저의 소스도 문제가 발생하는 부분에 대해 올리겠습니다.
procedure Tfrm_jass100f.jagyDblClick(Sender: TObject);
var
jpg : TJPEGimage;
mem : TMemorystream;
blobfield :Tblobfield;
begin
jpg := TJPEGimage.create;
mem := TMemorystream.create;
try
if query1.fields[2].isnull then
image1.picture := nil
else begin
==> blobfield := query1.fieldbyname('dr_image_j').asblob;
==> blobfield.savetostream(mem);
mem.position := 0;
jpg.loadformstream(mem);
image1.Picture.graphic := jpg;
end;
finally
mem.free;
jpg.free;
end;
end;
gtsh.lines.text := query1.fields[4].asstring;
ssdk.setfocus;
end;
이 부분의 설명을 드리자면
화면에서 grid를 더블클릭을 하면 해당되는 레코드의 각 필드를 editbox와
일반 이미지 conpoment 에 넣으려고 하는데
==> 부분에서 error가 발생합니다.
blobfield := query1.fieldbyname('dr_image_j').asblob;
이 부분은 asblob자체가 선언이 되지 않았다고 합니다.
정말 어찌할 줄 모르겠어요....?
도와주세요...
unit jass100f;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
ExtCtrls, Db, DBTables, ExtDlgs, StdCtrls, HMEdit, HMClock, flabel,
Buttons, Grids, DBGridEH, jpeg;
type
Tfrm_jass100f = class(TForm)
cmd_help: TBitBtn;
Panel1: TPanel;
tflabel1: tflabel;
Label1: TLabel;
HMClock1: THMClock;
Panel4: TPanel;
cls: TBitBtn;
serch: TBitBtn;
INS: TBitBtn;
UPD: TBitBtn;
Panel2: TPanel;
jadate: THMEdit;
Label4: TLabel;
Label2: TLabel;
jano: THMEdit;
Label6: TLabel;
jail: THMEdit;
janm: THMEdit;
Panel5: TPanel;
Label9: TLabel;
Label8: TLabel;
Panel15: TPanel;
lbl_msg: TPanel;
Panel16: TPanel;
Query1: TQuery;
Query2: TQuery;
Query3: TQuery;
BitBtn4: TBitBtn;
Panel3: TPanel;
Label3: TLabel;
Label5: TLabel;
dnkey0: TBitBtn;
gjnm: THMEdit;
ssdk: THMEdit;
jagy: TDBGridEH;
DataSource1: TDataSource;
jaky: TMemo;
Memo3: TMemo;
ScrollBox1: TScrollBox;
Panel6: TPanel;
Label10: TLabel;
Label12: TLabel;
Panel7: TPanel;
Image1: TImage;
Panel8: TPanel;
Image2: TImage;
ksj: TMemo;
ksh: TMemo;
Label7: TLabel;
gtsh: TMemo;
procedure clsClick(Sender: TObject);
procedure FormShow(Sender: TObject);
procedure jagyDblClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
frm_jass100f: Tfrm_jass100f;
implementation
uses c0comlib, c0comsub, swcd, menu;
{$R *.DFM}
procedure Tfrm_jass100f.clsClick(Sender: TObject);
begin
close;
end;
procedure Tfrm_jass100f.FormShow(Sender: TObject);
begin
query1.close;
query1.sql.clear;
query1.sql.add(' select bucd from isiscdmp where swcd='''+c0com.usid+''' ');
query1.open;
query2.close;
query2.parambyname('bucd'). asstring := query1.fieldbyname('bucd').asstring;
query2.open;
end;
procedure Tfrm_jass100f.jagyDblClick(Sender: TObject);
var
jpg : TJPEGimage;
mem : TMemorystream;
blobfield :Tblobfield;
begin
jagy.Visible := false;
jadate.text := query2.fields[0].asstring;
jano.text := query2.fields[1].asstring;
jail.text := query2.fields[2].asstring;
janm.text := query2.fields[3].asstring;
jaky.Lines.Text := query2.fields[5].asstring;
ksj.lines.text := query2.fields[6].asstring;
ksh.lines.text := query2.fields[7].asstring;
query1.close;
query1.sql.clear;
query1.sql.add(' select * from jadrawtr where js_date = '''+jadate.text+''' ');
query1.sql.add(' and js_no = '''+jano.text+''' ');
query1.open;
if query1.eof then begin
jpg := TJPEGimage.create;
mem := TMemorystream.create;
try
if query1.fields[2].isnull then
image1.picture := nil
else begin
blobfield := query1.fieldbyname('dr_image_j').asblob;
blobfield.savetostream(mem);
mem.position := 0;
jpg.loadformstream(mem);
image1.Picture.graphic := jpg;
end;
finally
mem.free;
jpg.free;
end;
jpg := TJPEGimage.create;
mem := TMemorystream.create;
try
if query1.fields[3].isnull then
image2.picture := nil
else begin
{ query1.fields[3].savetostream(mem);
mem.position := 0;
jpg.loadformstream(mem);
image2.Picture.graphic := jpg;}
end;
finally
mem.free;
jpg.free;
end;
end;
gtsh.lines.text := query1.fields[4].asstring;
ssdk.setfocus;
end;
end.
에구.. 이름을 지목하시니 당황스럽습니다.
우선 소스를 살펴보면,
> procedure Tfrm_jass100f.jagyDblClick(Sender: TObject);
> var
> jpg : TJPEGimage;
> mem : TMemorystream;
> blobfield :Tblobfield;
> begin
> jpg := TJPEGimage.create;
> mem := TMemorystream.create;
> try
> if query1.fields[2].isnull then
> image1.picture := nil
> else begin
> ==> blobfield := query1.fieldbyname('dr_image_j').asblob;
//이부분이 의아합니다.
//윗줄을 삭제 하시고 한번 해 보십시오.
//그리드를 클릭하셨다면 현위치로 레코드가 이동했을 것이고
//아래 문장에서
> ==> blobfield.savetostream(mem);
//현재 레코드의 BlobField를 메모리에 올리고 있습니다,
> mem.position := 0;
> jpg.loadformstream(mem);
//메모리에서 TJpeg 객체로 읽어들여
> image1.Picture.graphic := jpg;
//객체를 이미지에 대입했으니 제대로 될것 같습니다.
//직접 테스트 할수 있는 환경이 못되어 테스트는 해 보지 못했습니다.
> end;
> finally
> mem.free;
> jpg.free;
> end;
>
> end;
> gtsh.lines.text := query1.fields[4].asstring;
> ssdk.setfocus;
> end;
말씀드린 대로, 그 문장을 삭제하시고 한번 해보시고 안되시면
다시 질문올려주시기 바랍니다.
그리고, 앞으로는 이름을 지목하시지는 마셨으면..^^;;
그럼.. 즐거운 프로그래밍 되세요~