아래에 있던 글에서 발췌한 소스로 JPG 파일을 ADOQuery를 만들어서 DB에 넣는 작업을 하고 있습니다.
그런데, 소스 상에서는 DB이름과 field 항목만이 있을 뿐, Table을 지정하는 부분이 없네요. 그래서 Table 이름을 지정해 주려고, ADO Component를 이것저것 섞어서 써봤는데 소용이 없습니다. 고수님들께 부탁드립니다.
제가 짜놓았던 소스를 아래 첨부해드리겠습니다.
button1을 누르면, 같은 디렉토리에 있는 JPG 파일이 DB로 저장되고, button2를 누르면 DB에 있는 image field에서 JPG파일이 만들어지는 소스로 알고 있습니다.
어떻게 하면 table 이름을 지정해 줄 수 있을까요...
===============================================================================
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, DB, ADODB, StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
ADOQuery1: TADOQuery;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
function LoadFromBlob(const AField: TField; const Stream: TStream): boolean;
function SaveToBlob(const Stream: TStream; const AField: TField): boolean;
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
{ TForm1 }
function TForm1.LoadFromBlob(const AField: TField;
const Stream: TStream): boolean;
var
ResultStr: string;
PResultStr: PChar;
begin
Result := false;
if (Assigned(AField)) and (Assigned(Stream)) then begin
try
ResultStr := AField.Value;
PResultStr := PChar(ResultStr);
Stream.Write(PResultStr^, Length(ResultStr));
Stream.Seek(0,0);
Result := true;
except
end;
end;
end;
function TForm1.SaveToBlob(const Stream: TStream;
const AField: TField): boolean;
var
FieldStr: string;
PFieldStr: PChar;
begin
Result := false;
if (Assigned(AField)) and (Assigned(Stream)) then begin
try
Stream.Seek(0,0);
SetLength(FieldStr, Stream.Size);
PFieldStr := PChar(FieldStr);
Stream.Read(PFieldStr^, Stream.Size);
AField.Value := FieldStr;
Result := true;
except
end;
end;
end;
// save to DB
procedure TForm1.Button1Click(Sender: TObject);
var
FS: TFileStream;
begin
FS := TFileStream.Create('aaa.jpg', fmOpenRead);
SaveToBlob(FS, ADOQuery1.FieldByName('snapshot'));
// 이 부분에서 table 이름이 없어서 snapshot이라는 field가 없다고 계속 오류남
FS.Free;
end;
// load DB to image file
procedure TForm1.Button2Click(Sender: TObject);
var
FS: TFileStream;
begin
FS := TFileStream.Create('bbb.jpg', fmCreate);
LoadFromBlob(ADOQuery1.FieldByName('snapshot'), FS);
FS.Free;
end;
end.