ADO 連 MySQL 有問題, Help me !! |
尚未結案
|
Wawa
一般會員 發表:27 回覆:55 積分:16 註冊:2002-10-04 發送簡訊給我 |
各位大大好: 請教我用 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 發送簡訊給我 |
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 發送簡訊給我 |
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 發送簡訊給我 |
關於 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 發送簡訊給我 |
知道問題出在哪裡了, 但不曉得如何解決. 問題是出在 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 發送簡訊給我 |
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 發送簡訊給我 |
改用 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 發送簡訊給我 |
|
Wawa
一般會員 發表:27 回覆:55 積分:16 註冊:2002-10-04 發送簡訊給我 |
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 等大大的指導.
|
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |