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

更新資料庫中的時間欄位

尚未結案
will
中階會員


發表:176
回覆:135
積分:62
註冊:2002-04-14

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-03-09 13:16:28 IP:61.221.xxx.xxx 未訂閱
小弟使用的資料庫是SQL Sever 2000, 其中有一DateTime欄位, 名稱是EnterTime, 小弟在delphi 想用程式更改這一欄位, 於是設定一個TADOCommand的commandtext 屬性為 Update TabeName set EnterTime=FloatToStr(now()); 但執行後此一欄位的日期總是比現在的日期多2天 請問為什麼會這樣呢?
Fishman
尊榮會員


發表:120
回覆:1949
積分:2163
註冊:2006-10-28

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-03-09 14:00:08 IP:210.65.xxx.xxx 未訂閱
Hi will,    Update TableName set EnterTime = GetDate() --> Sql Server 時間 Update TableName set EnterTime = :P_NOW    ADOQuery1.Parameters.ParamByName('P_NOW').Value := Now; --> Client 端時間    檢查一下你的 Query,到底是使用 Server 端或是 Client 端時間?理論上應該是使用 Server 端時間,才會一致     ---------------------------------- 小弟才疏學淺,若有謬誤尚請不吝指教 ----------------------------------
------
Fishman
junlin
初階會員


發表:66
回覆:94
積分:42
註冊:2002-03-13

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-03-10 01:01:02 IP:140.129.xxx.xxx 未訂閱
記得delphi天數會比sqlserver多兩天 你可以試試比較sqlserver中 select cast(getdate() as float) 的數字 和 delphi的now的數字(可下中斷點看) 是差2的,以3/10為例sqlserver是38054但delphi是38056 所以請勿以delphi的now去修改DB的datetime欄位,而是要用fishman說的 使用sqlserver的function----------->getdate()
joshua_jia
一般會員


發表:0
回覆:2
積分:0
註冊:2003-04-08

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-03-10 08:16:30 IP:219.130.xxx.xxx 未訂閱
同意fishman的觀點
babyfish4
一般會員


發表:2
回覆:40
積分:18
註冊:2003-08-04

發送簡訊給我
#5 引用回覆 回覆 發表時間:2004-03-10 09:09:22 IP:61.63.xxx.xxx 未訂閱
各位大大好: 1.我覺得SQL Server 裡的GetDate跟Delphi裡的Now所取得的'日期'是一樣的 2.彼此之間會有不同應該是其存放日期的'數字'差了2,原因是兩個基準日不一 3.CommandText:='update TABLENAME set EnterTime=''' DateTimeToStr(Now) '''';這樣的方式應該是可以的
will
中階會員


發表:176
回覆:135
積分:62
註冊:2002-04-14

發送簡訊給我
#6 引用回覆 回覆 發表時間:2004-03-14 04:20:47 IP:211.72.xxx.xxx 未訂閱
如果用這種方式 有些系統的日期格式不同(yyyy/mm/dd or mm/dd/yyyy) 會造成更新失敗 請問除了用parameter 的方式外 如何把日期的部分寫在sql 內?       
引言: 各位大大好: 1.我覺得SQL Server 裡的GetDate跟Delphi裡的Now所取得的'日期'是一樣的 2.彼此之間會有不同應該是其存放日期的'數字'差了2,原因是兩個基準日不一 3.CommandText:='update TABLENAME set EnterTime=''' DateTimeToStr(Now) '''';這樣的方式應該是可以的
發表人 - will 於 2004/03/14 04:24:49
Fishman
尊榮會員


發表:120
回覆:1949
積分:2163
註冊:2006-10-28

發送簡訊給我
#7 引用回覆 回覆 發表時間:2004-03-15 09:39:53 IP:210.65.xxx.xxx 未訂閱
Hi will,    1.如果直接使用 SQL Server 上時間,則 Update TableName set EnterTime = GetDate()     2.Client 端時間,傳參數 Update TableName set EnterTime = :P_EnterTime;    ADOQuery1.Parameters.ParamByName('P_EnterTime').Value := Now    3.若硬是要將日期格式寫在 SQL Command 中,恐怕容易應主機端認定之日期格式不一致而產生錯誤,也許可以在前端用特定格式,再用 convert 指令轉為日期格式(查一下 Convert 函數可用的格式)
procedure TForm1.Button4Click(Sender: TObject);
var
    AYear, AMonth, ADay, AHour, AMinute, ASecond, AMilliSecond : Word;
    DateTimeStr : String;
begin
    DecodeDateTime(Now,AYear, AMonth, ADay, AHour, AMinute, ASecond, AMilliSecond);
    DateTimeStr := Format('M/-/- -:-:-',[AYear, AMonth, ADay, AHour, AMinute, ASecond, AMilliSecond]);
    ADOQuery2.Close;
    ADOQuery2.SQL.Clear;
    ADOQuery2.SQL.Add('Update TableName Set EnterTiem =  CONVERT(DATETIME,'   QuotedStr(DateTimeStr)   ',120)');
    ADOQuery2.ExecSQL;
    ADOQuery2.Close;
end;
---------------------------------- 小弟才疏學淺,若有謬誤尚請不吝指教 ----------------------------------
------
Fishman
系統時間:2024-05-14 17:34:23
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!