adoquery返回的時間比資料庫中的實際時間少1秒? |
答題得分者是:darnell
|
xnium
一般會員 發表:27 回覆:26 積分:10 註冊:2007-09-05 發送簡訊給我 |
第一次遇到這樣的情況,先上代碼:
[code delphi] sqlADOConnection.Close; sqlADOConnection.Open; sqlADOQuery.Connection:=sqlADOConnection; sqlADOQuery.Close; sqlADOQuery.SQL.Clear; sqlADOQuery.SQL.Add('SELECT PAccM3a02,PAccM3a01 FROM PAccM301 WHERE PAccM3a03 like :PAccM3a03 and PAccM3a05 <>:PAccM3a05 '); sqlADOQuery.Parameters.ParamByName('PAccM3a03').Value := '00A03%'; sqlADOQuery.Parameters.ParamByName('PAccM3a05').Value := '1'; sqlADOQuery.Open; for i := 1 to sqlADOQuery.RecordCount do begin try showmessage(sqlADOQuery.Fields[0].AsString ' before insert ' datetimetostr(sqlADOQuery.fieldbyname('PAccM3a01').Value)); ...... showmessage(sqlADOQuery.Fields[0].AsString ' afert insert ' datetimetostr(sqlADOQuery.Fields[1].AsDateTime)); ...... sqlADOQuery.Next; except showmessage('ez6j failed to insert hr'); end; end; [/code] 請看這句 showmessage(sqlADOQuery.Fields[0].AsString ' before insert ' datetimetostr(sqlADOQuery.fieldbyname('PAccM3a01').Value)); 就是秀出查詢的返回值,我發現,在資料庫里面的值是:‘2008-12-11 0:02:24’,可是返回的居然是‘2008-12-11 0:02:23’ 不曉得是怎么回事,懇請大俠幫忙看下
------
对岸的菜鸟,但是很喜欢用delphi! |
P.D.
版主 發表:603 回覆:4038 積分:3874 註冊:2006-10-31 發送簡訊給我 |
('SELECT PAccM3a02,PAccM3a01 FROM PAccM301 WHERE PAccM3a03 like :PAccM3a03 and PAccM3a05 <>:PAccM3a05 ');
for i := 1 to sqlADOQuery.RecordCount do begin try showmessage(sqlADOQuery.Fields[0].AsString ' before insert ' datetimetostr(sqlADOQuery.fieldbyname('PAccM3a01').Value)); ...... showmessage(sqlADOQuery.Fields[0].AsString ' afert insert ' datetimetostr(sqlADOQuery.Fields[1].AsDateTime)); 我想, FIELDS[1] 應該就是 PACCM3A01 欄位吧, 你要不要把這兩句使用同一屬性後再做比較 如改為 sqlADOQuery.fieldbyname('PAccM3a01').AsDateTime 或者 sqlADOQuery.Fields[1].Value 另外, 並沒有看到你對 PAccM3a01 欄位做了什麼事, 不知道發生什麼事了 |
darnell
版主 發表:25 回覆:103 積分:145 註冊:2003-03-04 發送簡訊給我 |
這種情況可能很難避免喔...
可以參考 http://delphi.ktop.com.tw/board.php?cid=30&fid=66&tid=51418 http://delphi.ktop.com.tw/board.php?cid=30&fid=72&tid=40898 http://support.microsoft.com/kb/281676/zh-tw 根據微軟文件說的沒有方法可以完全避免遺失精確度的時間 (以毫秒為單位) 可能因為豪秒在.999剛好進位處導致你的進位因此誤差擴大到1秒 看一下Delphi中system.pas TDateTime = type Double;浮點數,如果經過轉換難免就會有誤差喔 有沒辦法解決呢???有~~改用文字型態儲存日期時間,只是比較麻煩, 如果有其他方法我也想知道~不過我目前不知道 |
xnium
一般會員 發表:27 回覆:26 積分:10 註冊:2007-09-05 發送簡訊給我 |
|
st33chen
尊榮會員 發表:15 回覆:591 積分:1201 註冊:2005-09-30 發送簡訊給我 |
插花一下,
不知您是用什麼方法 發現資料庫里面的值是:'2008-12-11 0:02:24’ 如果是用別的 tool 去看資料庫的內容, 那我覺得應該是不一樣的程式 ( tool 程式 和 delphi ) 對精確度的處理方式不一樣的關係( 像 delphi 的 round 就和我們想像的不同, 他就是採用不同的定義 ) 說不定 即使同在 delphi 下用不同元件顯示的也會不一樣. 另外, 您可以用 formatdatetime('yyyymmdd hh:nn:ss:zzz) 看一下 millisecond 的狀態 參加討論一下.
------
IS IT WHAT IT IS 我是 李慕白 請倒著唸. 又想把老話拿出來說, 請用台語發音 : 專家專家全是ROBOT CAR (滷肉腳啦); 都已接手這麼久了, 績效還是那麼爛, 講話還那麼大聲.
編輯記錄
st33chen 重新編輯於 2008-12-11 17:56:56, 註解 無‧
|
xnium
一般會員 發表:27 回覆:26 積分:10 註冊:2007-09-05 發送簡訊給我 |
呵呵,我是用的SQLSERVER 2000 的資料庫,我用"enterprise manger" 發現資料庫里面的值是:'2008-12-11 0:02:24’
===================引 用 st33chen 文 章=================== 插花一下,
不知您是用什麼方法 發現資料庫里面的值是:'2008-12-11 0:02:24’ 如果是用別的 tool 去看資料庫的內容, 那我覺得應該是不一樣的程式 ( tool 程式 和 delphi ) 對精確度的處理方式不一樣的關係( 像 delphi 的 round 就和我們想像的不同, 他就是採用不同的定義 ) 說不定 即使同在 delphi 下用不同元件顯示的也會不一樣. 參加討論一下.
------
对岸的菜鸟,但是很喜欢用delphi! |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |