日期轉換發生問題 |
答題得分者是:pedro
|
zoezoe
一般會員 發表:10 回覆:25 積分:12 註冊:2009-04-28 發送簡訊給我 |
小弟有一個字串為 "97/01/23" 我想把它轉為西元年成 "2008/01/23" 並寫入資料庫
小弟是先在FormCreate 裡面寫 shortdateformat := 'ee/mm/dd'; 先把所有日期格式改為民國年 之後在function裡面先把字串轉日期 strtodate(str) 然後再把日期格式做轉換 str:=formatdatetime('yyyy/mm/dd',str); ,最後再轉換為字串,datetostr(str); 然後存入我資料庫的table , cds1['date']:=day; ,就發生問題了 錯誤訊息是 There is no overloaded version of 'FormatDateTime' that can be called with these arguments There is no overloaded version of 'DateToStr' that can be called with these arguments 請問是發生什麼問題了呢?!請各位前輩們指點迷津,謝謝 編輯記錄
zoezoe 重新編輯於 2009-05-11 16:28:58, 註解 無‧
|
st33chen
尊榮會員 發表:15 回覆:591 積分:1201 註冊:2005-09-30 發送簡訊給我 |
您好,
formatdatetime 是把日期值依指定格式轉成字串, 所以他吃 formatstr 及 datetime 值 兩個參數 轉出來已經是字串, 不必再用 datetostr str := formatdatetime('yyyy/mm/dd', strtodate(str)); 應該就可以了
------
IS IT WHAT IT IS 我是 李慕白 請倒著唸. 又想把老話拿出來說, 請用台語發音 : 專家專家全是ROBOT CAR (滷肉腳啦); 都已接手這麼久了, 績效還是那麼爛, 講話還那麼大聲. |
zoezoe
一般會員 發表:10 回覆:25 積分:12 註冊:2009-04-28 發送簡訊給我 |
|
st33chen
尊榮會員 發表:15 回覆:591 積分:1201 註冊:2005-09-30 發送簡訊給我 |
|
zoezoe
一般會員 發表:10 回覆:25 積分:12 註冊:2009-04-28 發送簡訊給我 |
您好~我是在存table之前所看到的
我會先在DBGrid上先讓使用者確認完按存檔之後~才會存入!以下是我程式碼 [code delphi] procedure TForm1.Bit_tClick(Sender: TObject); var TF:TEXTFILE; str,nm,sup,wd,day:STRING; begin bit_t.Enabled:=false; t1.Enabled := false; s2.Enabled := true; bit_s.Enabled:=true; adoquery1.Open; cds1.Open; memo1.Lines.Clear; assignFile(TF,'C:\TF2.txt'); reset(TF); while not eof(TF) do begin cds1.Append; cds1.Edit; readln(TF,str); if trim(str) <> '' then begin Memo1.Lines.Add(str); if copy(str,1,8)='採購單號' then begin nm:=copy(str,11,8); sup:=copy(str,39,12); end else begin cds1['pur_sup']:=sup; cds1['pur_nm']:=nm; cds1['pur_sn']:=copy(str,1,2); cds1['pur_snm']:=copy(str,4,10); cds1['pur_st']:=copy(str,15,20); cds1['pur_unit']:=trim(copy(str,36,4)); day:=copy(str,73,8); \\日期轉換 day:=formatdatetime('yyyy/mm/dd',strtodate(day)); cds1['pur_date']:=day; \\寫入table wd:=copy(str,41,8); if copy(wd,3,1)=',' then begin wd:=copy(wd,1,2) copy(wd,4,5); end; cds1['pur_qty']:=strtofloat(trim(wd)); wd:=copy(str,50,9); if copy(wd,4,1)=',' then begin wd:=copy(wd,1,3) copy(wd,5,5); end; cds1['pur_pri']:=strtofloat(trim(wd)); wd:=copy(str,60,12); if copy(wd,7,1)=',' then begin wd:=copy(wd,5,2) copy(wd,8,5); end; cds1['pur_amt']:=strtofloat(trim(wd)); end; end; end; closefile(TF); end; [/code] |
pedro
尊榮會員 發表:152 回覆:1187 積分:892 註冊:2002-06-12 發送簡訊給我 |
|
zoezoe
一般會員 發表:10 回覆:25 積分:12 註冊:2009-04-28 發送簡訊給我 |
|
pedro
尊榮會員 發表:152 回覆:1187 積分:892 註冊:2002-06-12 發送簡訊給我 |
|
zoezoe
一般會員 發表:10 回覆:25 積分:12 註冊:2009-04-28 發送簡訊給我 |
您是指?因為我一開始設定的欄位長度只有資料庫而已
其他應該是沒有什麼關聯才對呢,還是找不到~好討厭>"< 採購單號: P9701001 供 應 商: 4110金達晟企 01 E10-1651-0 AS27.5溫度開關KA-313 個 100.0 385.0 38,500.0 97/01/25 這是我文字檔的一小小一段,我一開始是在想說後面日期部份就是copy(str,73,8) 因為只到25後面就沒字了,想說再多兩個空白看看還是沒有,真煩ˋˊ ===================引 用 pedro 文 章=================== 資料庫有改,DataSet欄位編輯器裡欄位長度有改到麼? |
zoezoe
一般會員 發表:10 回覆:25 積分:12 註冊:2009-04-28 發送簡訊給我 |
|
pedro
尊榮會員 發表:152 回覆:1187 積分:892 註冊:2002-06-12 發送簡訊給我 |
推定底下第一第二行程式沒問題,因為資料庫已存入2xxx/xx/
那麼有可能只剩第3行,day是2xxxx/xx/xx完整日期,賦值後存到資料庫會被截斷,資料庫欄位長度又夠,那要看看你DataSet.Fields是否有定義到這個欄位的size,這個屬性值也可能導致被截斷的可能 [code delphi] day:=copy(str,73,8); \\日期轉換 day:=formatdatetime('yyyy/mm/dd',strtodate(day)); cds1['pur_date']:=day; \\寫入table [/code] ===================引 用 zoezoe 文 章=================== 您是指?因為我一開始設定的欄位長度只有資料庫而已 其他應該是沒有什麼關聯才對呢,還是找不到~好討厭>"< 採購單號: P9701001 供 應 商: 4110金達晟企 01 E10-1651-0 AS27.5溫度開關KA-313 個 100.0 385.0 38,500.0 97/01/25 這是我文字檔的一小小一段,我一開始是在想說後面日期部份就是copy(str,73,8) 因為只到25後面就沒字了,想說再多兩個空白看看還是沒有,真煩ˋˊ ===================引 用 pedro 文 章=================== 資料庫有改,DataSet欄位編輯器裡欄位長度有改到麼? |
zoezoe
一般會員 發表:10 回覆:25 積分:12 註冊:2009-04-28 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |