as400 存取jpg檔問題 |
答題得分者是:lu
|
ivankuo
中階會員 發表:132 回覆:272 積分:95 註冊:2002-11-21 發送簡訊給我 |
|
lu
高階會員 發表:11 回覆:189 積分:195 註冊:2003-11-19 發送簡訊給我 |
轉個彎吧,AS400不能存 binary 的資料,那把 binary 轉成文字再存進去不就可以了?
置於如何把 binary 資料轉換文字資料,方法很多 可以用 Indy 裡面的 TIdDecodeMIME 以及 TIdEncodeMINE ,或是其他東西... base32 , base64 等等等 不過據我所知,AS400的儲存空間單位成本比較高吧,要不要考慮放在其他OS上面,用各連結存取即可 ===================引 用 ivankuo 文 章=================== 請教各位大大 小弟公司的資料庫是as400 , delphi 7 , 來存取jpg檔,as400 不支援 blob ,所以我們經理開了一個欄位為 longvarchar的型態 ,我找過很多種方式,都無法將jpg 檔存入資料庫,請教各位大大有什麼方式可以處理,(除了存檔案路徑之外) |
ivankuo
中階會員 發表:132 回覆:272 積分:95 註冊:2002-11-21 發送簡訊給我 |
不好意思,小弟原本從網站搜尋文章有提到as400不支援blob,但是我經理把欄位型態改成一個LongVarBinary 的型態, 於是我以下列的方式去處理存取和讀出的動作 [code delphi] // 存檔 procedure TfmcHA000.bbtOpenClick(Sender: TObject); var jpeg: TJpegImage ; sFileName: String; begin inherited; with cdsGifJpg do begin Close; SQL.Text:= 'SELECT * FROM GIFJPG'; Open; end; if OpenPictureDialog1.Execute then begin sFileName:= extractfilename(OpenPictureDialog1.FileName); sFileName:= Trim(Copy(sFileName,1,Pos('.',sFileName)-1)); Image1.Picture.LoadFromFile(OpenPictureDialog1.FileName); cdsGifJpg.Append; //檔名 cdsGifJpg.FieldByName('MSGID').AsString:= sFileName; TBlobField(cdsGifJpg.FieldByName('MSGJPG')).LoadFromFile(OpenPictureDialog1.FileName); cdsGifJpg.Post; cdsGifJpg.ApplyUpdates(-1); end; end; procedure TfmcHA000.cdsGifJpgAfterScroll(DataSet: TDataSet); begin inherited; if (cdsGifJpg.RecordCount > 0) and (cdsGifJpg.FieldByName('MSGJPG').AsString<>'') then begin TBlobField(cdsGifJpg.FieldByName('MSGJPG')).savetofile(_RootPath cdsGifJpg.FieldByName('MSGID').asstring '.jpg'); Image1.Picture.LoadFromFile(_RootPath cdsGifJpg.FieldByName('MSGID').asstring '.jpg'); deletefile(_RootPath cdsGifJpg.FieldByName('MSGID').asstring '.jpg'); end; [/code] 此做法發現幾的問題, 1.檔案若太大,會發生欄位被截斷的錯誤,我也才用不到1000K的圖檔,一般若有支援blob的欄位型態,應該可以到2GB吧 2.存入70k左右的圖檔有的會發生,上半部正常顯示,下半段變成灰色,這不知道是什麼原因造成的 經理堅持將圖檔存入資料庫 還在努力找尋答案 ===================引 用 lu 文 章=================== 轉個彎吧,AS400不能存 binary 的資料,那把 binary 轉成文字再存進去不就可以了? 置於如何把 binary 資料轉換文字資料,方法很多 可以用 Indy 裡面的 TIdDecodeMIME 以及 TIdEncodeMINE ,或是其他東西... base32 , base64 等等等 不過據我所知,AS400的儲存空間單位成本比較高吧,要不要考慮放在其他OS上面,用各連結存取即可 ===================引 用 ivankuo 文 章=================== 請教各位大大 小弟公司的資料庫是as400 , delphi 7 , 來存取jpg檔,as400 不支援 blob ,所以我們經理開了一個欄位為 longvarchar的型態 ,我找過很多種方式,都無法將jpg 檔存入資料庫,請教各位大大有什麼方式可以處理,(除了存檔案路徑之外)
------
ivankuo |
lu
高階會員 發表:11 回覆:189 積分:195 註冊:2003-11-19 發送簡訊給我 |
我猜你是用BDE吧,BDE的BLOB資料有大小限制,DEFAULT是64KB吧,建議改採ADO
BLOB資料的大小,可用 BDE Administrator 來修改,執行BDE Administrator 後,點選 Configuration ,每一種資料庫的驅動程式都可以修改 ===================引 用 ivankuo 文 章=================== 不好意思,小弟原本從網站搜尋文章有提到as400不支援blob,但是我經理把欄位型態改成一個LongVarBinary 的型態, 於是我以下列的方式去處理存取和讀出的動作 [code delphi] // 存檔 procedure TfmcHA000.bbtOpenClick(Sender: TObject); var jpeg: TJpegImage ; sFileName: String; begin inherited; with cdsGifJpg do begin Close; SQL.Text:= 'SELECT * FROM GIFJPG'; Open; end; if OpenPictureDialog1.Execute then begin sFileName:= extractfilename(OpenPictureDialog1.FileName); sFileName:= Trim(Copy(sFileName,1,Pos('.',sFileName)-1)); Image1.Picture.LoadFromFile(OpenPictureDialog1.FileName); cdsGifJpg.Append; //檔名 cdsGifJpg.FieldByName('MSGID').AsString:= sFileName; TBlobField(cdsGifJpg.FieldByName('MSGJPG')).LoadFromFile(OpenPictureDialog1.FileName); cdsGifJpg.Post; cdsGifJpg.ApplyUpdates(-1); end; end; procedure TfmcHA000.cdsGifJpgAfterScroll(DataSet: TDataSet); begin inherited; if (cdsGifJpg.RecordCount > 0) and (cdsGifJpg.FieldByName('MSGJPG').AsString<>'') then begin TBlobField(cdsGifJpg.FieldByName('MSGJPG')).savetofile(_RootPath cdsGifJpg.FieldByName('MSGID').asstring '.jpg'); Image1.Picture.LoadFromFile(_RootPath cdsGifJpg.FieldByName('MSGID').asstring '.jpg'); deletefile(_RootPath cdsGifJpg.FieldByName('MSGID').asstring '.jpg'); end; [/code] 此做法發現幾的問題, 1.檔案若太大,會發生欄位被截斷的錯誤,我也才用不到1000K的圖檔,一般若有支援blob的欄位型態,應該可以到2GB吧 2.存入70k左右的圖檔有的會發生,上半部正常顯示,下半段變成灰色,這不知道是什麼原因造成的 經理堅持將圖檔存入資料庫 還在努力找尋答案 ===================引 用 lu 文 章=================== 轉個彎吧,AS400不能存 binary 的資料,那把 binary 轉成文字再存進去不就可以了? 置於如何把 binary 資料轉換文字資料,方法很多 可以用 Indy 裡面的 TIdDecodeMIME 以及 TIdEncodeMINE ,或是其他東西... base32 , base64 等等等 不過據我所知,AS400的儲存空間單位成本比較高吧,要不要考慮放在其他OS上面,用各連結存取即可 ===================引 用 ivankuo 文 章=================== 請教各位大大 小弟公司的資料庫是as400 , delphi 7 , 來存取jpg檔,as400 不支援 blob ,所以我們經理開了一個欄位為 longvarchar的型態 ,我找過很多種方式,都無法將jpg 檔存入資料庫,請教各位大大有什麼方式可以處理,(除了存檔案路徑之外) |
ivankuo
中階會員 發表:132 回覆:272 積分:95 註冊:2002-11-21 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |