全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:4850
推到 Plurk!
推到 Facebook!

MSSQL有Image欄,PostgreSQL是那種欄位型態?

 
kevin2004
資深會員


發表:18
回覆:463
積分:416
註冊:2005-05-29

發送簡訊給我
#1 引用回覆 回覆 發表時間:2007-01-13 16:41:47 IP:61.231.xxx.xxx 訂閱
承japhen等前輩指點,存檔案到DB可以用Access=OLEobject/MSSQL-Image/MySQL,Oracle=Blob欄位,及提供開發經驗,小弟十分感謝。小弟現在有個問題,在PostgreSQL是要採要那個型態的欄位?
小弟這兩天有去過很多網站找相關資料,也用Google上天下地了好久。但均無功無返。
小弟有試過 bytea及oid這兩種PostgreSQL-binary欄位格式,前者被Delphi解讀為TVarByteSField﹝而非BlobField﹞,後者被解讀為Integer欄位。均無法存檔案。
小弟找過好幾篇由MySQL或Access或Oracle轉PostgreSQL的文章,也沒有找到答案。
Access、MSSQL、MySQL、Oracle可以的,難道PostgreSQL不能嗎?不可能吧!
------
Kevin
kevin2004
資深會員


發表:18
回覆:463
積分:416
註冊:2005-05-29

發送簡訊給我
#2 引用回覆 回覆 發表時間:2007-01-15 21:26:55 IP:61.231.xxx.xxx 訂閱
小弟在網路上找到兩篇提及此問題的文章如下:
====第一篇如下==================================================================
> It seems that in the backend for version 8.0 (maybe a bit before that, I'm not sure),
> the implementation for the lo-datatype changed. Now it's a domain, before you had to
> create your own type named lo to have a field capable of storing (Binary) Large OBjects.
> Somehow the field is now recognized in Delphi as an IntegerField, and no longer as a field for large objects. Just a thought of mine, but maybe the implementation in the backend changed, so the ODBC
> recognizes and passes the field as type integer, and no longer as a lo/blob field.Otherwise it's something in the implementation of the ODBC driver itself that passes the
> field type as something that delphi understands as integer, maybe the odbc really says it's an integerfield. I'll try the 08.02 and see what that does.
====第一篇============================================================
================第二篇如下==========================

I have installed the 08.02.0002 snapshot after uninstalling the 08.01. It looks like the problem is now solved. Not only do the Delphi ADO components recognize my lo field as TBlobField, but it even works within a transaction (which is nice because we had some problems there in the past).

I did check the 7.4 protocol option, which was enabled. If anyone needs it or has a similar problem, I can post my connection settings (since they seem to work), just let me know.

As I understood the 08.02 branch is going stable in the near future. So before going into production with this I'll be anctiously waiting for that to happen. Escpecially because Dave said the driver name will change before the release. Quote Dave Page: "Note that the driver name will probably change before release, but will be set in stone once the first 08.02 stable release is out."

Thanks for the reply's. I'm a happy developper again, I can finally ditch the MSSQL Desktop backend ;)
================第二篇如上==========================
------
Kevin
bestlong
站務副站長


發表:126
回覆:734
積分:512
註冊:2002-10-19

發送簡訊給我
#3 引用回覆 回覆 發表時間:2007-01-16 14:15:20 IP:60.248.xxx.xxx 訂閱
以 PostgreSQL 資料庫本身來說用 Bytea 型態就可以達到目的
不過主要問題都出在使用 Delphi 環境想透過 ODBC 總是會有型態認定有誤的問題

------
http://blog.bestlong.idv.tw/
http://www.bestlong.idv.tw/
http://delphi-ktop.bestlong.idv.tw/
kevin2004
資深會員


發表:18
回覆:463
積分:416
註冊:2005-05-29

發送簡訊給我
#4 引用回覆 回覆 發表時間:2007-01-17 22:00:22 IP:61.231.xxx.xxx 訂閱
謝謝bestlong前輩多次幫忙。
小弟這一兩個星期為這個問題真是忙翻了。原先在Access及MSSQL上均很順利的過關,到測到PostgreSQL時就老是出問題。老是InvalidclassTypeCast,及Need Blob,But TVarByteSField Acture 告知型態不合。後來到處找相關資料,在資庫網找到兩篇也是這個情況。在深度論壇及站裏也找遍了,沒有。後來在PostgreSQL.org翻了好久好久,總算找到有人提到是psqlODBC的問題,並且講只要更新到8.2版即可。可是小弟據此前後在五台電腦上殺殺裝了好幾十次,還是一樣的錯誤訊息。昨天去天瓏書局找PostgreSQL的原文書﹝中文版的三本小弟早就翻了好幾遍了﹞,找到四本,還有兩本是很少見的PHP搭配PostgreSQL的原文書。小弟硬是沒吃中飯,硬花了三小時仔細研究。其中講到Blob是各資料庫都有的重要結構,PG當然也有,這話聽起來還蠻像話。更提及Bytea上限是1G,如果超過要改用lo,那真是廢話,那裏有人會將寶貴的空間去放數十G的檔案,鬼才會這般作,就1G的Bytea就綽綽有餘了。其中有一本PHP PostgreSQL還講到特殊的以text欄位型態及hex2bin/bin2hex作存檔的處理技巧。
本來我的舊系統是在Access及PostgreSQL上執行的,因為在PostgreSQL上老是碰壁,前兩天我只有花了兩天時間將系統全面移殖到mssql上,這作業到是很順利。可是mssql總是要配合區域網路,不像PG可以在單機的Win環境下執行,可以在NoteBook上隨身使用那般方便。我也試者將系統移殖到可單機跑的MySQL上,可是工程稍有點麻煩中途就放棄了。
好累。
------
Kevin
kevin2004
資深會員


發表:18
回覆:463
積分:416
註冊:2005-05-29

發送簡訊給我
#5 引用回覆 回覆 發表時間:2007-01-17 22:22:59 IP:61.231.xxx.xxx 訂閱
試到今天早上十點,應該已滿兩個星期了吧。在公司及家裏四台電腦白天黑夜不眠不休的殺殺裝裝數十次了之後,我過了第一關了。說明如下:
1.我的環境:Win2K/WinXP、psql8.X、Delphi7、psqlODBC8.X
2.原先:WinPostgreSQL8.01 psqlODBC8.0測bytea失敗。測oid及lo,失敗。
3.更新成:WinPostgreSQL8.2 psqlODBC8.2。記得要先remove舊版的ODBC-DSN再uninstall-psqlODBC8.0,否則無法刪DSN。還有WinPostgreSQL要設postgreSQL.conf﹝加listen_adress='*'﹞及設pg_hba.conf﹝加IP﹞。結果,還是失敗。
4.psqlODBC特殊設定:以往在psqlODBC8.0時無此設定,所以當我在PG老家看到原因是psqlODBC須要更新的文章後,我還是試了三天,才試出來。原來設psqlODBC時還要設DataSource-Bitbtn,要將bytea as lo勾選及Protocol要選7.4才行。
現在存附檔到PostgreSQL-bytea時,Delphi不會再跟我囉嗦TVarBytesField與BlobField了。
不過問題還沒結束,我只是過了第一關而已。還有個ErrorMessage等我去處理。那就是:WARNING:nonstandard use of \\ in a stringliteral。我看了PG-Bytea的線上說明,真是頭大,還是上來喊救命吧。真是撐不下去了。
HELP! HELP! HELP! HELP! HELP! HELP! HELP!
------
Kevin
kevin2004
資深會員


發表:18
回覆:463
積分:416
註冊:2005-05-29

發送簡訊給我
#6 引用回覆 回覆 發表時間:2007-01-18 21:51:40 IP:61.231.xxx.xxx 訂閱
==>WARNING:nonstandard use of \\ in a stringliteral
那位前輩可以幫忙一下嗎?
------
Kevin
kevin2004
資深會員


發表:18
回覆:463
積分:416
註冊:2005-05-29

發送簡訊給我
#7 引用回覆 回覆 發表時間:2007-01-22 06:34:01 IP:61.231.xxx.xxx 訂閱
老是有這個Msg出現,系統如何拿的出手,奮鬥了好幾個星期,真有點灰心了。
------
Kevin
bestlong
站務副站長


發表:126
回覆:734
積分:512
註冊:2002-10-19

發送簡訊給我
#8 引用回覆 回覆 發表時間:2007-01-22 10:42:25 IP:60.248.xxx.xxx 訂閱
嘗試看看 psqlodbc-07_03_0260 的 ODBC 版本
另外你的 ODBC 設定是否有做調整呢?
------
http://blog.bestlong.idv.tw/
http://www.bestlong.idv.tw/
http://delphi-ktop.bestlong.idv.tw/
multics
一般會員


發表:0
回覆:6
積分:11
註冊:2007-01-21

發送簡訊給我
#9 引用回覆 回覆 發表時間:2007-01-23 07:23:26 IP:61.231.xxx.xxx 未訂閱
要消此訊息,可以以下列方法處理:
改postgresql.conf的Version/platform compatibility區的設定,將這行 #escape_string_warning=on改為
escape_string_warning=off
原來那列不要動,那是pg的內定值要保留作以後參考用。你要自己複製一列來改,記得mark的#要刪掉
佩服,佩服。祝好運。
------
Multics
kevin2004
資深會員


發表:18
回覆:463
積分:416
註冊:2005-05-29

發送簡訊給我
#10 引用回覆 回覆 發表時間:2007-01-23 19:07:58 IP:61.231.xxx.xxx 訂閱
太感動了,小弟照者multi前輩講的試了,竟然成功了。太太感謝了。謝謝啦。
------
Kevin
系統時間:2024-05-09 3:29:03
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!