안녕하세요..
질문 하나 하려구요..
ClientDataSet고 AdoQuery를 이용해서 Oracle에 Image 파일을 넣으려고 하는데
문제가 있어서요..
많은 고수님들께 조언을 얻고자 이렇게 질문을 드립니다.
지금 구성은..
Oracle 8.0.5를 DB로 쓰고 있구요..
한 테이블에 LONG RAW type의 필드(예 : STAMP_IMAGE )를 잡았습니다.
서버는 window2000에 Transactional Data Module상에
TADOConnection - TADOQuery - TDATASETPROVIDER로 설정해서
COM+에 등록해 놓았구요.
Query에 SELECT STAMP_IMAGE FROM 테이블.
이렇게 해 놓았죠..
클라이언트에는
SocktConnect - ClientDataSet(CDSSOI001) - DataSource로 해서
서버에 연결했습니다.
그리고 클라이언트에서 bmp파일을 읽어서 DB에 저장하려고 하는데
if OpenPictureDialog1.Execute then
begin
if NOT ( CDSSOI001.State IN [dsInsert,dsEdit]) then
CDSSOI001.Edit;
DBImage1.Picture.LoadFromFile(OpenPictureDialog1.FileName);
// TBlobField(CDSSOI001.FieldByName('STAMP_IMAGE')).Assign
//(DBImage1.Picture.Bitmap);
TBlobField(CDSSOI001.FieldByName('STAMP_IMAGE')).LoadFromFile(OpenPictureDialog1.FileName);
end;
이렇게 하고서 post 시킨 후 ApplyUpdate를 했더니
CDSSOI001.Post;
CDSSOI001.ApplyUpdates(0);
다음과 같은 메시지가 뜨면서 이미지 파일이 저장이 안되네요..
'ORA-01461: LONG 값은 LONG 열에만 입력할 수 있습니다'
modified value나 original value나 다 binary로 되있는데
저장이 안되네요..
그래서 서버쪽을 무시하고
그냥 클라이언트 쪽에서 ADOConnection과 AdoQuery를 사용해서
테스트 해보니 이번엔 저장이 되구요..
if OpenPictureDialog1.Execute then
begin
if NOT ( ADOQuery1.State IN [dsInsert, dsEdit ]) then
ADOQuery1.Edit;
TBlobField(ADOQuery1IMAGE).LoadFromFile(OpenPictureDialog1.FileName);
end;
어떻게 해야 할지 상당히 난감합니다.
여기 계시판에 있는 글들은 다 읽어봤는데 저와 같은 경우는 없는 것 같더군요.
답변 남겨주시면 감사하
밑 글에서 서버쪽을 무시했다는 것이 무슨 의미인지 모르겠습니당...
미토 wrote:
> 안녕하세요..
> 질문 하나 하려구요..
> ClientDataSet고 AdoQuery를 이용해서 Oracle에 Image 파일을 넣으려고 하는데
> 문제가 있어서요..
> 많은 고수님들께 조언을 얻고자 이렇게 질문을 드립니다.
> 지금 구성은..
> Oracle 8.0.5를 DB로 쓰고 있구요..
> 한 테이블에 LONG RAW type의 필드(예 : STAMP_IMAGE )를 잡았습니다.
>
> 서버는 window2000에 Transactional Data Module상에
> TADOConnection - TADOQuery - TDATASETPROVIDER로 설정해서
> COM+에 등록해 놓았구요.
> Query에 SELECT STAMP_IMAGE FROM 테이블.
> 이렇게 해 놓았죠..
>
> 클라이언트에는
> SocktConnect - ClientDataSet(CDSSOI001) - DataSource로 해서
> 서버에 연결했습니다.
>
> 그리고 클라이언트에서 bmp파일을 읽어서 DB에 저장하려고 하는데
> if OpenPictureDialog1.Execute then
> begin
> if NOT ( CDSSOI001.State IN [dsInsert,dsEdit]) then
> CDSSOI001.Edit;
> DBImage1.Picture.LoadFromFile(OpenPictureDialog1.FileName);
>
> // TBlobField(CDSSOI001.FieldByName('STAMP_IMAGE')).Assign
> //(DBImage1.Picture.Bitmap);
> TBlobField(CDSSOI001.FieldByName('STAMP_IMAGE')).LoadFromFile(OpenPictureDialog1.FileName);
> end;
>
> 이렇게 하고서 post 시킨 후 ApplyUpdate를 했더니
> CDSSOI001.Post;
> CDSSOI001.ApplyUpdates(0);
>
> 다음과 같은 메시지가 뜨면서 이미지 파일이 저장이 안되네요..
> 'ORA-01461: LONG 값은 LONG 열에만 입력할 수 있습니다'
> modified value나 original value나 다 binary로 되있는데
> 저장이 안되네요..
>
> 그래서 서버쪽을 무시하고
> 그냥 클라이언트 쪽에서 ADOConnection과 AdoQuery를 사용해서
> 테스트 해보니 이번엔 저장이 되구요..
> if OpenPictureDialog1.Execute then
> begin
> if NOT ( ADOQuery1.State IN [dsInsert, dsEdit ]) then
> ADOQuery1.Edit;
>
> TBlobField(ADOQuery1IMAGE).LoadFromFile(OpenPictureDialog1.FileName);
> end;
>
> 어떻게 해야 할지 상당히 난감합니다.
> 여기 계시판에 있는 글들은 다 읽어봤는데 저와 같은 경우는 없는 것 같더군요.
> 답변 남겨주시면 감사하