服务器式linux、postgresql 其中有一个oid字段存储图片我用的lo_import和lo_export存取图片,但是这样的话要求图片文件在服务器本地请问有什么办法能在客户端直接访问oid字段?

解决方案 »

  1.   

    foreveryday007(有無數種方法可以浪費一天的時間…但):改为text有没有长度限制?另外,能否告诉我怎么用text存图片?用base64编码行不行?能否给我个例子,谢了!!!
      

  2.   

    dudunono(白金之星):我用的是postgresql数据库,没有image字段啊靠,要是sql server不就早搞定了大家帮我up啊,我快急疯了
      

  3.   

    改为text有没有长度限制?
    我這邊測試應該沒有甚麼大的限制
    主要就是用流來處理,用base64编码行啊 就是它
    代碼有點亂,你整理一下吧//存
            with table1 do
            begin
              Append;
              FieldByName('imageno').asinteger:=imageno;
              myMemoField := (FieldByName('binimage')) as TmemoField;
              TempMStream1 := TMemoryStream.Create;
              TempMStream2 := TMemoryStream.Create;
              TempMStream1.Seek(0,soFromBeginning);
              TempMStream2.Seek(0,soFromBeginning);
              Jpegs:=TJpegImage.Create;
              Jpegs.Assign(Im.Picture.Bitmap);
              Jpegs.CompressionQuality:=100;
              Jpegs.Compress ;
              Jpegs.SaveToStream(TempMStream1);
              TempMStream1.Seek(0,soFromBeginning);
              MimeEncodeStream(TempMStream1,TempMStream2);
              TempMStream2.Seek(0,soFromBeginning);
              myMemoField.LoadFromStream(TempMStream2);
              Post;//取
      with QTmp do
      begin
        Close;
        Sql.Clear;
        Sql.Add('select binimage from tbimage where imageno=:imageno ');
        ParamByName('imageno').asinteger:=iImageno;
        Open;
        if not eof then
        begin
          TempMStream1 := TMemoryStream.Create;
          TempMStream2 := TMemoryStream.Create;
          try
            myMemoField := (FieldByName('binimage')) as TmemoField;
            myMemoField.SaveToStream(TempMStream1);
            TempMStream1.Seek(0,soFromBeginning);
            TempMStream2.Seek(0,soFromBeginning);
            MimeDecodeStream(TempMStream1,TempMStream2);
            TempMStream2.Seek(0,soFromBeginning);
            MyJpeg:=TJpegImage.Create;
            MyJpeg.LoadFromStream(TempMStream2);
            MyBitMap:= TBitMap.Create;
            if MyJpeg.PixelFormat = jf24bit then
               MyBitMap.PixelFormat := pf24bit
            else
               MyBitMap.PixelFormat := pf8bit;
            MyBitMap.Width := MyJpeg.Width;
            MyBitMap.Height:= MyJpeg.Height;
            MyBitMap.Canvas.Draw(0,0,MyJpeg);
            TmpImage.Picture.Bitmap  := MyBitMap;
          finally
            TempMStream1.Free;
            TempMStream2.free;
            MyJpeg.Free;
            MyBitMap.Free;
          end;
        END
        else
        begin
          TmpImage.Picture.Bitmap  := nil;
          IM.picture.Metafile;
        end;
      END;
      

  4.   

    foreveryday007(有無數種方法可以浪費一天的時間…但是…) :
       
          我说过,用的postgresql数据库啊,你的代码肯定不行
      

  5.   

    我发现text最大长度是8910字节,唉,也不知道是为什么
      

  6.   

    用text我自己已经解决了,但是怎么才能直接用大对象呢?