Q&A

  • BLOB Type 입출력시 일정크기 이상 안되는 문제...
안녕하세요?
지금 Delphi6과 MySQL을 ODBC로 연결해서 작업을 하고 있는데요...
BLOB Type에 값을 넣고 빼는데...
일정크기 이상이 절대로 들어가질 않네요.
에러 메시지는 Invalid BLOB Length 라고 나오구요...
코드는...

  blob := Table1.CreateBlobStream(Table1.FieldByName('file_name'), bmWrite);

  try
    blob.Seek(0, soFromBeginning);
    fs := TFileStream.Create(Edit1.Text, fmOpenRead or fmShareDenyWrite);

      try
        blob.copyFrom(fs, fs.Size)
      finally
        fs.Free
      end;

  finally
    blob.Free
  end;

입니다.
예전글에도 비슷한 문제를 호소한 분이 계시던데...
답글이 없더군요... ^^;;
답글 달아주세요... 부탁합니다...
4  COMMENTS
  • Profile
    한원희 2003.01.12 09:41
    안녕하세요. 한원희입니다.

    TDatabase로 연결할 때, 파라미터 정보중에 Blob Size와 Blob Cache 값을 높게 조정하면 조정한 크기만큼은 가져올 수 있었던 것으로 기억합니다. 기본 값이 32K, 64K 이런데요.. 이걸 좀더 높게 잡아 보세요.

    그럼, 즐코~

  • Profile
    조승기 2003.01.16 03:32
    안녕하세요. 조승깁니다.
    음... 말씀하신 방법은 이미 시도를 해 봤습니다.
    그런데 MySQL에서는 안되더군요. 정확하게 1M가 넘는 자료는 들어가질 않네요.
    그래서 다른데서 자료를 찾아보니 MySQL 환경변수중에 max_allowed_packet 값을 조정하라고 되어 있더군요.
    기본적으로 max_allowed_packet 값은 1M로 Setting되어 있구요.
    이 값을 10M로 바꿨는데도 1M밖에 안 들어가더라구요...
    다른 사이트에서도 이 문제로 고민하시는 분들이 계시는데 어떤분은 성공해서 16M까지 넣어봤다고 하셨는데 그 방법은 기술하지 않으셨더라구요... (T.T)
    하여간 지금 작성하고 있는 Program이 제안을 하기 위한 Demo기 때문에 1M로도 충분하지만 실제로는 10M까지는 넣어야 하거든요...
    실제로는 Oracle을 쓸 예정입니다.
    하여간... 관심가지고 답변주신것 감사하구요.
    다른 해결방법을 아시면 답글 주시면 다시한번 감사하겠습니다.
    MySQL로도 1M이상을 넣어서 쓸 일이 생길것 같아서요...
    그럼... 추운 날씨에 감기조심하세요.

  • Profile
    박정훈 2003.08.05 23:05
    안녕하세요.
    좀 오래된 글이지만 혹시 다음에 어느분이라도 필요하실지 몰라 답글 올립니다.

    저 역시 비슷한 문제로 고민을 하고 있었는데 분명히 이것은 max_allowed_packet 의 사이즈값에 따른 문제임을 확인하였습니다.
    똑같은 코드를 사용해서 똑같은 DB에 접속해서 BLOB 에 집어넣는데 max_allowed_packet 의 값에 따라 들어갈수 있는 사이즈도 틀려지는것을 확인하였습니다.
    하지만  blob가 클경우에는 read_buffer 와 weite_buffer 를 적당히 늘려주지 않으면 좀 느려지는 문제가 발생해서 역시 이 부분의 설정도 바꾸어 주었습니다. 그리고 필드는 largeblob를 사용했습니다.

    샘플 코드는 어느분이 올려주셨던 것 그대로 사용을 했습니다.
    update 뿐만 아니라 Insert 까지 적용해 봤는데 음.. 잘됩니다.
    참고로 zeos 5.5 와 Delphi6 를 사용했습니다.

    if openpicturedialog1.Execute then begin
      with ptqr do begin
        sql.Clear;
        sql.text := ' update patient set sjin = load_file(:pfile) where code=:imcd ';
        parambyname('imcd').asinteger := patienttb.fieldbyname('code').asinteger;
        parambyname('pfile').asstring := openpicturedialog1.filename;
        execsql;
        applyupdates;
       end;
    end;




  • Profile
    이명석 2007.04.11 06:30
    정리하자면...
    1. mysql 설정 : max_allowed_packet 값 설정
    2. bde 설정 : bde admin(blob size,cache) 설정
    3. TQuery : requestlive=true(업로드시 필요없으나 다운로드시 1M 미만으로 다운됨)
    4 . blob field : 충분한 데이타 필드 타입 선택.