線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:7027
推到 Plurk!
推到 Facebook!

ADO 連 MySQL 有問題, Help me !!

尚未結案
Wawa
一般會員


發表:27
回覆:55
積分:16
註冊:2002-10-04

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-04-04 17:53:55 IP:220.135.xxx.xxx 未訂閱
各位大大好: 請教我用 ADO 連 MySQL 為何無法使用. 我用的是 Delphi5(D7也試過), MySQL 4.0.2, OS: win2000 用 ADOConnection 連上資料庫是沒什麼問題, 但 ADOTable 將 Active 設為 True 馬上就有 Invalid Field Size 的錯誤訊息. 改用 ADOQuery 也一樣不行. Table 的資料結構如下 ------------------------------------------------------------ CREATE TABLE `banktransfer` ( `orders_id` int(11) NOT NULL default '0', `banktransfer_owner` varchar(64) default NULL, `banktransfer_number` varchar(24) default NULL, `banktransfer_bankname` varchar(255) default NULL, `banktransfer_blz` varchar(8) default NULL, `banktransfer_status` int(11) default NULL, `banktransfer_prz` char(2) default NULL, `banktransfer_fax` char(2) default NULL, KEY `orders_id` (`orders_id`) ) TYPE=MyISAM; -------------------------------------------------------- 這個 Table 卻是可以 CREATE TABLE `address_format` ( `address_format_id` int(11) NOT NULL auto_increment, `address_format` varchar(128) NOT NULL default '', `address_summary` varchar(48) NOT NULL default '', PRIMARY KEY (`address_format_id`) ) TYPE=MyISAM AUTO_INCREMENT=6 ; --------------------------------------------------------- 因我是安裝 OSCommerce 網路購物車的資料庫,所以不能去修改他的資料結構. 不然購物車(OSCommerce) 就無法使用. 原本想用現成的 OSCommerce, 後端的分析報表軟體再自己用 Delphi 來寫,沒想到購物車大部份的 Table 都無法正常開起. 也嘗試過用 BDE , BDE 可以 Active , 但無法編修. 錯誤訊息為:資料提供者或其他服務傳回 E_Fail狀態.對了,用Delphi 的 SQL Explorer 有同樣的錯誤訊息. 真慘, BDE 跟 ADO 都無法使用, 換了 Delphi 7, 結果還是一樣. 是不是有些 MySQL 的 DataType , Delphi 無法接受? 請問有什麼辦法解決這些問題呢? 拜託諸位前輩, 多多指導. 謝謝!!
timhuang
尊榮會員


發表:78
回覆:1815
積分:1608
註冊:2002-07-15

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-04-04 21:58:30 IP:220.132.xxx.xxx 未訂閱
check this one http://reportman.sourceforge.net/doc/knownissues.html Connecting to MySQL from ADO/ODBC returns invalid field size and other errors Try setting OPTION=3 in connection string. It is the same as setting "Don't optimize column width" and "Return matching rows" in MyODBC configuration screen
Wawa
一般會員


發表:27
回覆:55
積分:16
註冊:2002-10-04

發送簡訊給我
#3 引用回覆 回覆 發表時間:2005-04-05 04:06:09 IP:220.135.xxx.xxx 未訂閱
timhuang 大大好, 你真是厲害喔, 高手就是就高喔!! Option=3 成功解決了Invalid Field Size 的錯誤訊息,已經OK了. 編修也沒問題. 對了我的 MySQL ODBC 版本為 3.51 但還是有某些 "資料表" , 仍然會出現現錯誤訊息. 還有 2 個 Error 分別為: -------------------------------------------------------------------- 1.資料提供者或其他服務傳回 E_Fail狀態.此錯誤最常出現, 連用 BDE 也是出現此錯誤訊息. 2.資料庫類型超出範圍. -------------------------------------------------------------------- 請問大大, 該如何解決. 相信你一定有辦法的. 再次拜託了, 叩首拜謝!! 會發生錯誤的 Table ( 資料提供者或其他服務傳回 E_Fail狀態 ) ---------------------------------------------------------------- CREATE TABLE `configuration` ( `configuration_id` int(11) NOT NULL auto_increment, `configuration_key` varchar(64) NOT NULL default '', `configuration_value` varchar(255) NOT NULL default '', `configuration_group_id` int(11) NOT NULL default '0', `sort_order` int(5) default NULL, `last_modified` datetime default NULL, `date_added` datetime NOT NULL default '0000-00-00 00:00:00', `use_function` varchar(255) default NULL, `set_function` varchar(255) default NULL, PRIMARY KEY (`configuration_id`), KEY `idx_configuration_group_id` (`configuration_group_id`) ) TYPE=MyISAM AUTO_INCREMENT=230 ; -----------------------------------------------------------------
timhuang
尊榮會員


發表:78
回覆:1815
積分:1608
註冊:2002-07-15

發送簡訊給我
#4 引用回覆 回覆 發表時間:2005-04-05 15:10:44 IP:220.132.xxx.xxx 未訂閱
關於 E_FAIL 的問題, 很有可能是 `date_added` datetime NOT NULL default '0000-00-00 00:00:00', 這個部分造成的, 由於在 ado 中, 該值無法傳回, 產生 E_FAIL 的問題, 但只要值是 ado 可接受的話, 就不會有問題, 幾種方法解決, 1. 將 default 改為 null, 並依實際狀況賦值(如 2003/1/1) 2. 使用 ADOQuery 來帶出欄位, 不帶該 datetime 欄位, 避免問題. 3. 任何避開 ado 取得 '0000-00-00 00:00:00' 的方法!! 參考資料, http://www.vbforums.com/archive/index.php/t-320365.html http://bugs.mysql.com/bug.php?id=1680
Wawa
一般會員


發表:27
回覆:55
積分:16
註冊:2002-10-04

發送簡訊給我
#5 引用回覆 回覆 發表時間:2005-04-05 16:23:17 IP:220.135.xxx.xxx 未訂閱
知道問題出在哪裡了, 但不曉得如何解決. 問題是出在 date_added 這個欄位上. `date_added` datetime NOT NULL default '0000-00-00 00:00:00', 如果欄位是 datetime 形態, 又是 not null 時, 則 DBGrid 會出現 "資料提供者或其他服務傳回 E_Fail狀態" 這個錯誤訊息. 如果改用 BDE , 則瀏覽沒問題. 但編修資料會出現 "General SQL error [Microsoft][ODBC驅動程式管理員]SQL資料類型超出範圍" 請問有人知道,怎麼解決嗎? 謝謝!!
Wawa
一般會員


發表:27
回覆:55
積分:16
註冊:2002-10-04

發送簡訊給我
#6 引用回覆 回覆 發表時間:2005-04-05 16:55:05 IP:220.135.xxx.xxx 未訂閱
timhuang 大大好: 謝謝你的回覆, 後來我也發現是 Datetime is not null 的問題. 你建議的 3 個方法 1. 將 default 改為 null, 並依實際狀況賦值(如 2003/1/1) 因為我是安裝現成購物車系統(Oscommerce)的資料庫,不能去改資料結構,否 則怕會影響別人的系統. 2. 使用 ADOQuery 來帶出欄位, 不帶該 datetime 欄位, 避免問題. 日期算是重要欄位, 不帶出來 , 也不太好. 3. 任何避開 ado 取得 '0000-00-00 00:00:00' 的方法!! 現只剩第三種方法, 但不清楚該怎麼做(你建議的網頁也上去看了,沒看到什麼好的解決方法), 可否請你指導一下呢? 非常感謝!!
hagar
版主


發表:143
回覆:4056
積分:4445
註冊:2002-04-14

發送簡訊給我
#7 引用回覆 回覆 發表時間:2005-04-05 23:05:01 IP:202.39.xxx.xxx 未訂閱
改用 MyOLEDB 不知道可不可? MyOLEDB 3.0: - Installation package(http://www.mysql.com/Downloads/Win32/MyOLEDB3.exe) - Source files (http://www.mysql.com/Downloads/Win32/mysql-oledb-3.0.0.zip) MyOLEDB 2.5: - Installation package(http://www.mysql.com/Downloads/Win32/MyOLEDB.exe) - Source files (http://www.mysql.com/Downloads/Win32/Myoledb.zip) - Examples(http://www.mysql.com/Downloads/Win32/MySamples.zip) - Documentation(http://www.mysql.com/Downloads/Win32/MyOLEDB.chm) -- 分擔可以輕省, 分享帶來喜樂!
timhuang
尊榮會員


發表:78
回覆:1815
積分:1608
註冊:2002-07-15

發送簡訊給我
#8 引用回覆 回覆 發表時間:2005-04-06 11:43:34 IP:203.95.xxx.xxx 未訂閱
並非是 not null 的問題, 是 0000-00-00 00:00:00 的問題, 在 ADO 存取時, 遇到了這個值, 已超出了 ado 能處理的狀況, 所以會產生 E_FAIL, 正常的狀況下, 應該不會有 0000-00-00 00:00:00 的這個時間吧, 若是能將這些值修正正常, 相信就不會有這個問題了. 若值為 0000-00-00 00:00:00 這樣的值, 帶出來相信也不合邏輯吧, 雖然是重要欄位, 但帶出來是這種值, 意義也不大吧.
Wawa
一般會員


發表:27
回覆:55
積分:16
註冊:2002-10-04

發送簡訊給我
#9 引用回覆 回覆 發表時間:2005-04-08 21:02:44 IP:220.135.xxx.xxx 未訂閱
timhuang 大大說得沒錯, 是 DateTime 欄位的值為 0000-00-00 00:00:00 所造成的錯誤. 至於這麼的值 0000-00-00 00:00:00 有沒有意義, 就見任見智了. MySQL 是把 0000-00-00 00:00:00 當成是類似 Null 來處理,我之前有遇過這樣的需求, 譬如說生日這個欄位, 對某些系統來說是不可為 Null 的, 但在輸入客戶資料時那時還不知道客戶的生日,通常是事後補登, 所以會先給0, 這時 delphi, 0 值 delphi 顯示時, 視為1989/12/30,這個問題我也被客戶抱怨過, 真的不太好看, 而且沒辦法一眼就看出是 Null 值, 後來我自己寫了個元件才解決這個問題. 目前我已經很清楚知道, 錯誤發生的原因, 雖然還沒也很好的解決方法, 但簡易的測試了一下, 設為 '0100-01-01 00:00:00', 這是Delphi 透過 ADO 可接受的最小值, 我後來設為 '1000-01-01 00:00:00' 這樣一眼就成看出是 Null 值且 delphi 又可以接受. 供有遇到類似我問題的朋友參考. 也謝謝 timhuang 等大大的指導.
系統時間:2024-06-29 3:40:26
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!