Q&A

  • 필드의 타입을 알아내는 법에 대해 궁금?
현재 선택된 레코드의 필드들의 타입을 알수 있는 방법을 알려주세요.

(fkdata, fklookup 과 같은 FieldKind가 아닌 string, date, float 등)

현재 선택된 레코드의 Field[필드번호].As형명 하면 현재 선택된 레코드의 필드번호에 해당되는 필드의 값을 읽어오는걸로 알고 있습니다.

위와 같은 방법으로 field번호로 해당 필드의 Type을 불러올수 있는 방법을 알고 계시다면 좀 가르쳐 주세요..

그럼 이만...

4  COMMENTS
  • Profile
    이현아 1999.04.23 03:04
    안녕하세요!



    저는 이제 막 델파이 공부를 하는 직장인입니다.



    다름이 아니구요!



    Edit박스로 성명이나 주민번호를 조회해서, DBIMAGE에 개개인의 사진을



    출력하고자 합니다.



    방법을 알려주시구요! 그리고 따로 사진이라는 필드(레코드)를 만들지 않았습니다.



    저장방법도 묻고 싶네요.



    아무쪼록 좋은 방법을 제시 해주시면 정말 감사드리겠습니다.

  • Profile
    신인재 1999.07.06 19:38
    TField의 DataType 프로퍼티를 이용하시면 됩니다..

    아래는 리스트 박스에 필드별로 add시키는 예제입니다...



    for i := 0 to Table1.FieldCount - 1 do begin

    case Table1.Fields[i].DataType of

    ftstring : ListBox1.Items.Add(IntToStr(i) + ': String');

    ftMemo : ListBox1.Items.Add(IntToStr(i) + ': Memo');

    end;

    end;



    type TFieldType = (ftUnknown, ftString, ftSmallint, ftInteger, ftWord,

    ftBoolean, ftFloat, ftCurrency, ftBCD, ftDate, ftTime,

    ftDateTime, ftBytes, ftVarBytes, ftAutoInc, ftBlob,

    ftMemo, ftGraphic, ftFmtMemo, ftParadoxOle,

    ftDBaseOle, ftTypedBinary, ftCursor);



    property DataType: TFieldType;







    임형호 께서 말씀하시기를...

    > 현재 선택된 레코드의 필드들의 타입을 알수 있는 방법을 알려주세요.

    > (fkdata, fklookup 과 같은 FieldKind가 아닌 string, date, float 등)

    > 현재 선택된 레코드의 Field[필드번호].As형명 하면 현재 선택된 레코드의 필드번호에 해당되는 필드의 값을 읽어오는걸로 알고 있습니다.

    > 위와 같은 방법으로 field번호로 해당 필드의 Type을 불러올수 있는 방법을 알고 계시다면 좀 가르쳐 주세요..

    > 그럼 이만...





  • Profile
    김영대 1999.04.23 18:04
    이현아 wrote:

    > 안녕하세요!

    > 저는 이제 막 델파이 공부를 하는 직장인입니다.

    > 다름이 아니구요!

    > Edit박스로 성명이나 주민번호를 조회해서, DBIMAGE에 개개인의 사진을

    > 출력하고자 합니다.

    > 방법을 알려주시구요! 그리고 따로 사진이라는 필드(레코드)를 만들지 않았습니다.

    > 저장방법도 묻고 싶네요.

    > 아무쪼록 좋은 방법을 제시 해주시면 정말 감사드리겠습니다.



    안녕하세요 김영대입니다

    만약 사용하시는 DBMS 가 ORACLE 이면 blob 필드의 data type을

    long raw 로 사용하시면 됩니다

    참고로 long 형은 2GB의 text 자료를 long raw 는 binary 자료를

    2GB 까지 저장할 수 있습니다

    다른 DB 들도 blob 필드를 만드는 해당 type이 따로 있을겁니다



    unit DbJpeg;



    interface



    uses

    Db, ExtCtrls, Classes, Graphics, Jpeg, SysUtils;



    implementation



    procedure JPEGSaveToDB(BlobField: TBlobField; FileName: String);

    var

    jpg: TJPEGImage;

    bmp: TBitmap;

    mem: TMemoryStream;

    begin

    if LowerCase(ExtractFileExt(FileName)) = '.jpg' then

    begin

    with BlobField do

    begin

    // 아래 DataSet.Edit; 는 저장된 그림을 수정(UPDATE)시 사용하며

    // 신규 등록(INSERT)일때는 DataSet.Insert; 로 바꾸어야 한다

    DataSet.Edit;

    LoadFromFile(FileName);

    DataSet.Post;

    end;

    end

    else if LowerCase(ExtractFileExt(FileName)) = '.bmp' then

    begin

    // 파일이 BMP 이면 먼저 JPEG(JPG) 파일로 바꾼 후 저장한다

    bmp := TBitmap.Create;

    jpg := TJPEGImage.Create;

    mem := TMemoryStream.Create;

    try

    bmp.LoadFromFile(FileName);

    jpg.Assign(bmp);

    jpg.SaveToStream(mem);

    mem.Position := 0;

    with BlobField do begin

    DataSet.Edit;

    LoadFromStream(mem);

    DataSet.Post;

    end;

    finally

    mem.Free;

    jpg.Free;

    bmp.Free;

    end;

    end

    end;



    procedure JPEGLoadFromDB(BlobField: TBlobField; Image: TImage);

    var

    jpg: TJPEGImage;

    mem: TMemoryStream;

    begin

    jpg := TJPEGImage.Create;

    mem := TMemoryStream.Create;

    try

    if BlobField.IsNull then

    Image.Picture := nil

    else begin

    BlobField.SaveToStream(mem);

    mem.Position := 0;

    jpg.LoadFromStream(mem);

    Image.Picture.Graphic := jpg;

    end;

    finally

    mem.Free;

    jpg.Free;

    end;

    end;



    end.



    -------------------------------------------------------------------------

    // 아래는 DB에 저장된 JPEG(JPG)를 DBGrid에 출력하는 예제입니다



    unit Unit1;



    interface



    uses

    Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,

    Db, DBTables, Grids, jpeg, extctrls, DBGrids;



    type

    TForm1 = class(TForm)

    DataSource1: TDataSource;

    Query1: TQuery;

    Database1: TDatabase;

    DBGridEH1: TDBGridEH;

    procedure DBGridEH1DrawColumnCell(Sender: TObject; const Rect: TRect;

    DataCol: Integer; Column: TColumnEH; State: TGridDrawState);

    private

    { Private declarations }

    public

    { Public declarations }

    end;



    var

    Form1: TForm1;



    implementation

    {$R *.DFM}



    procedure JPEGLoadFromDB(BlobField: TBlobField; Image: TImage);

    var

    jpg: TJPEGImage;

    mem: TMemoryStream;

    begin

    jpg := TJPEGImage.Create;

    mem := TMemoryStream.Create;

    try

    if BlobField.IsNull then

    Image.Picture := nil

    else begin

    BlobField.SaveToStream(mem);

    mem.Position := 0;

    jpg.LoadFromStream(mem);

    Image.Picture.Graphic := jpg;

    end;

    finally

    mem.Free;

    jpg.Free;

    end;

    end;



    procedure TForm1.DBGridEH1DrawColumnCell(Sender: TObject;

    const Rect: TRect; DataCol: Integer; Column: TColumnEH;

    State: TGridDrawState);

    var

    JPGimage: TImage;

    SRect, DRect: TRect;

    begin

    if Column.FieldName= 'PHOTO' then

    begin

    JPGimage := TImage.Create(Self);

    JPEGLoadFromDB(TBlobField(Query1.FieldByName('PHOTO')), JPGimage);

    TDBGrid(Sender).Canvas.FillRect(Rect);



    TDBGrid(Sender).Canvas.Draw(Rect.Left, Rect.Top, JPGimage.Picture.Graphic);

    // Stretch 는 아래와 같이...

    // TDBGrid(Sender).Canvas.StretchDraw(Rect, JPGimage.Picture.Graphic);

    JPGimage.Free;

    end

    else // 다른 필드

    begin

    TDBGrid(Sender).DefaultDrawColumnCell(Rect, DataCol, Column, State);

    end;

    end;



    end.



  • Profile
    이현아 1999.04.24 16:43
    김영대 wrote:

    > 이현아 wrote:

    > > 안녕하세요!

    > > 저는 이제 막 델파이 공부를 하는 직장인입니다.

    > > 다름이 아니구요!

    > > Edit박스로 성명이나 주민번호를 조회해서, DBIMAGE에 개개인의 사진을

    > > 출력하고자 합니다.

    > > 방법을 알려주시구요! 그리고 따로 사진이라는 필드(레코드)를 만들지 않았습니다.

    > > 저장방법도 묻고 싶네요.

    > > 아무쪼록 좋은 방법을 제시 해주시면 정말 감사드리겠습니다.

    >

    > 안녕하세요 김영대입니다

    > 만약 사용하시는 DBMS 가 ORACLE 이면 blob 필드의 data type을

    > long raw 로 사용하시면 됩니다

    > 참고로 long 형은 2GB의 text 자료를 long raw 는 binary 자료를

    > 2GB 까지 저장할 수 있습니다

    > 다른 DB 들도 blob 필드를 만드는 해당 type이 따로 있을겁니다

    >

    > unit DbJpeg;

    >

    > interface

    >

    > uses

    > Db, ExtCtrls, Classes, Graphics, Jpeg, SysUtils;

    >

    > implementation

    >

    > procedure JPEGSaveToDB(BlobField: TBlobField; FileName: String);

    > var

    > jpg: TJPEGImage;

    > bmp: TBitmap;

    > mem: TMemoryStream;

    > begin

    > if LowerCase(ExtractFileExt(FileName)) = '.jpg' then

    > begin

    > with BlobField do

    > begin

    > // 아래 DataSet.Edit; 는 저장된 그림을 수정(UPDATE)시 사용하며

    > // 신규 등록(INSERT)일때는 DataSet.Insert; 로 바꾸어야 한다

    > DataSet.Edit;

    > LoadFromFile(FileName);

    > DataSet.Post;

    > end;

    > end

    > else if LowerCase(ExtractFileExt(FileName)) = '.bmp' then

    > begin

    > // 파일이 BMP 이면 먼저 JPEG(JPG) 파일로 바꾼 후 저장한다

    > bmp := TBitmap.Create;

    > jpg := TJPEGImage.Create;

    > mem := TMemoryStream.Create;

    > try

    > bmp.LoadFromFile(FileName);

    > jpg.Assign(bmp);

    > jpg.SaveToStream(mem);

    > mem.Position := 0;

    > with BlobField do begin

    > DataSet.Edit;

    > LoadFromStream(mem);

    > DataSet.Post;

    > end;

    > finally

    > mem.Free;

    > jpg.Free;

    > bmp.Free;

    > end;

    > end

    > end;

    >

    > procedure JPEGLoadFromDB(BlobField: TBlobField; Image: TImage);

    > var

    > jpg: TJPEGImage;

    > mem: TMemoryStream;

    > begin

    > jpg := TJPEGImage.Create;

    > mem := TMemoryStream.Create;

    > try

    > if BlobField.IsNull then

    > Image.Picture := nil

    > else begin

    > BlobField.SaveToStream(mem);

    > mem.Position := 0;

    > jpg.LoadFromStream(mem);

    > Image.Picture.Graphic := jpg;

    > end;

    > finally

    > mem.Free;

    > jpg.Free;

    > end;

    > end;

    >

    > end.

    >

    > -------------------------------------------------------------------------

    > // 아래는 DB에 저장된 JPEG(JPG)를 DBGrid에 출력하는 예제입니다

    >

    > unit Unit1;

    >

    > interface

    >

    > uses

    > Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,

    > Db, DBTables, Grids, jpeg, extctrls, DBGrids;

    >

    > type

    > TForm1 = class(TForm)

    > DataSource1: TDataSource;

    > Query1: TQuery;

    > Database1: TDatabase;

    > DBGridEH1: TDBGridEH;

    > procedure DBGridEH1DrawColumnCell(Sender: TObject; const Rect: TRect;

    > DataCol: Integer; Column: TColumnEH; State: TGridDrawState);

    > private

    > { Private declarations }

    > public

    > { Public declarations }

    > end;

    >

    > var

    > Form1: TForm1;

    >

    > implementation

    > {$R *.DFM}

    >

    > procedure JPEGLoadFromDB(BlobField: TBlobField; Image: TImage);

    > var

    > jpg: TJPEGImage;

    > mem: TMemoryStream;

    > begin

    > jpg := TJPEGImage.Create;

    > mem := TMemoryStream.Create;

    > try

    > if BlobField.IsNull then

    > Image.Picture := nil

    > else begin

    > BlobField.SaveToStream(mem);

    > mem.Position := 0;

    > jpg.LoadFromStream(mem);

    > Image.Picture.Graphic := jpg;

    > end;

    > finally

    > mem.Free;

    > jpg.Free;

    > end;

    > end;

    >

    > procedure TForm1.DBGridEH1DrawColumnCell(Sender: TObject;

    > const Rect: TRect; DataCol: Integer; Column: TColumnEH;

    > State: TGridDrawState);

    > var

    > JPGimage: TImage;

    > SRect, DRect: TRect;

    > begin

    > if Column.FieldName= 'PHOTO' then

    > begin

    > JPGimage := TImage.Create(Self);

    > JPEGLoadFromDB(TBlobField(Query1.FieldByName('PHOTO')), JPGimage);

    > TDBGrid(Sender).Canvas.FillRect(Rect);

    >

    > TDBGrid(Sender).Canvas.Draw(Rect.Left, Rect.Top, JPGimage.Picture.Graphic);

    > // Stretch 는 아래와 같이...

    > // TDBGrid(Sender).Canvas.StretchDraw(Rect, JPGimage.Picture.Graphic);

    > JPGimage.Free;

    > end

    > else // 다른 필드

    > begin

    > TDBGrid(Sender).DefaultDrawColumnCell(Rect, DataCol, Column, State);

    > end;

    > end;

    >

    > end.

    >



    답변 진심으로 감사드려요!

    그런데 전 DB를 InormixDB를 사용합니다.

    또한 저의 계획은 Local DB를 사용해(즉 informix DB)를

    C 디렉토리를 따로 만들어 사진을 사번에 맞게 넣고자 합니다.

    기법은 SQL을 사용할려고 하구요!

    바쁘시겠지만 한번만 더 부탁을 드릴께요!



    항상 감사드립니다.









    • 박광호
    • 1999.04.24 18:28
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 이정욱
      1999.04.24 20:32
      폼 이름이 Form2라고 가정을 하고 Form2는 TForm형이라고 가정을 할때, Form2 := TForm.Create(Self); ...
    • 배윤하
    • 1999.07.07 00:33
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 조복기
      1999.07.07 01:07
      안녕하세요..조복기입니다. 신인재님이 말씀하신것처럼 아래의 기능을 쓰고자 하신다면 국내외 통틀...
    • 신인재
      1999.07.07 00:38
      님께서 원하시는 사양에 가장 부합하는 컴포넌트는 나이렉스에서 판매를 하고 있는 XPower가 있습니다. ...
    • 박홍석
    • 1999.04.24 20:25
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 강두헌
      1999.04.27 22:14
      박홍석 wrote: > 안녕하세요. > > 날짜형 필드를 가지고 쿼리하는 방법을 알고 싶습니다. > 여러가지...
    • 신인재
      1999.04.26 21:03
      박홍석 wrote: > 안녕하세요. > > 날짜형 필드를 가지고 쿼리하는 방법을 알고 싶습니다. > 여러가지...
    • 김상균
    • 1999.07.06 23:49
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 신인재
      1999.07.07 00:33
      델파이 코리아에 하영재님이 올리신 팁입니다..... 팁란을 활용하면 질문을 올리지 않으셔도 많은 해답...
    • 강민주
    • 1999.07.06 22:45
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 이헌
      1999.04.24 18:48
      안녕하세요! 아래와 같이 선문자를 사용하여 출력을 하려는데 printer.Canvas.TextOut 에서 255이상 필...
    • 이정욱
      1999.04.24 20:15
      TextOut의 마지막 인자는 String형입니다. 기본적으로 델파이 32비트에서는 String형의 길이는 제한이 없...
    • 이헌
    • 1999.04.24 18:48
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 김태성
      1999.07.06 22:30
      안녕하세요? 지금까지 다른툴을사용하다, 지금부터 델파이와 친해보려합니다. 궁금한것은 멀티유저환경 ...
    • 이정욱
      1999.04.24 20:15
      TextOut의 마지막 인자는 String형입니다. 기본적으로 델파이 32비트에서는 String형의 길이는 제한이 없...
    • 박광호
    • 1999.04.24 18:28
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 이정욱
      1999.04.24 20:32
      폼 이름이 Form2라고 가정을 하고 Form2는 TForm형이라고 가정을 할때, Form2 := TForm.Create(Self); ...
    • 그냥
    • 1999.07.06 19:52
    • 0 COMMENTS
    • /
    • 0 LIKES
    • 임형호
    • 1999.07.06 19:19
    • 4 COMMENTS
    • /
    • 0 LIKES
    • 이현아
      1999.04.23 03:04
      안녕하세요! 저는 이제 막 델파이 공부를 하는 직장인입니다. 다름이 아니구요! Edit박스로 성명...
    • 신인재
      1999.07.06 19:38
      TField의 DataType 프로퍼티를 이용하시면 됩니다.. 아래는 리스트 박스에 필드별로 add시키는 예제입니다...
    • 김영대
      1999.04.23 18:04
      이현아 wrote: > 안녕하세요! > 저는 이제 막 델파이 공부를 하는 직장인입니다. > 다름이 아니구요! >...
    • 이현아
      1999.04.24 16:43
      김영대 wrote: > 이현아 wrote: > > 안녕하세요! > > 저는 이제 막 델파이 공부를 하는 직장인입니다. ...
    • 썬키
    • 1999.07.06 19:07
    • 0 COMMENTS
    • /
    • 0 LIKES
    • 김경수
    • 1999.04.24 05:42
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 이정욱
      1999.04.24 08:09
      이 문제의 키는 Font.Height 에 있습니다. 화면이 72 DPI일 경우 Font.Height 의 공식은 아래와 같습니다....
    • 김경수
      1999.04.24 12:42
      안녕하세요. 김경수입니다. 에구 size로 하니까 아래와 같은 문제가 없어지더군요. 답변 감사드립니다. ...
    • 별지기
    • 1999.07.06 18:34
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 최석기
      1999.07.06 18:40
      별지기 께서 말씀하시기를... > 안녕하십니까??저는 강남에 있는 별지기입니다. > 오늘 명함관리 프로그...
    • 김성희
    • 1999.04.24 09:25
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 안치봉
      1999.04.24 12:05
      김성희 wrote: > 독립된 프로그램 사이에서 파라메터가 이동할수 있는 방법이나요? > 있다면 어떤방법인...
    • 하윤철
    • 1999.07.06 18:04
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 김성희
      1999.04.24 09:25
      독립된 프로그램 사이에서 파라메터가 이동할수 있는 방법이나요? 있다면 어떤방법인지 설명좀 부탁드립니...
    • 안치봉
      1999.04.24 12:05
      김성희 wrote: > 독립된 프로그램 사이에서 파라메터가 이동할수 있는 방법이나요? > 있다면 어떤방법인...
    • 박상길
    • 1999.07.06 18:01
    • 3 COMMENTS
    • /
    • 0 LIKES
    • 김영회
      1999.04.24 04:00
      안녕하세요. 여기는 천안입니다. Delphi4.0 C/S 버젼으로 인사정보관리 프로그램을 개발하여 설치하려...
    • 최석기
      1999.07.06 18:39
      박상길 께서 말씀하시기를... > 원이나 사각형으로 주어진 영역의 Component수를 구하는 방법을 > 알고 ...
    • 이정욱
      1999.04.24 08:11
      다른곳에서 잘되었다면 삼보에서도 잘 되어야 겠죠. 델파이와 BDE의 관계중 하나 가능성이 있는것이라면 ...
    • 김경수
    • 1999.04.24 05:42
    • 4 COMMENTS
    • /
    • 0 LIKES
    • 박성훈
      1999.07.06 17:36
      var Value: Byte; begin Value:=Trunc(Value And 255); --->요놈이 어떤 값으로 저장되는지요? ...
    • 이정욱
      1999.04.24 08:09
      이 문제의 키는 Font.Height 에 있습니다. 화면이 72 DPI일 경우 Font.Height 의 공식은 아래와 같습니다....
    • 안치봉
      1999.07.06 22:35
      간단히 비트연산에 대해 설명을 드리죠. 예를 들어... 1 and 1 은 1 이 됩니다. 이런건 2진수로 보면...
    • 김경수
      1999.04.24 12:42
      안녕하세요. 김경수입니다. 에구 size로 하니까 아래와 같은 문제가 없어지더군요. 답변 감사드립니다. ...
    • 이한나
    • 1999.07.06 16:17
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 하윤철
      1999.07.06 17:38
      이한나 께서 말씀하시기를... > 폼이 크리에이트 될때마다 combobox의 인덱스가 '0'인 값의 스트링이 보여...