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

SQL的日期

答題得分者是:timhuang
a6475
高階會員


發表:67
回覆:230
積分:154
註冊:2002-09-15

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-02-04 13:50:58 IP:61.229.xxx.xxx 未訂閱
請問大家: 我下這串SQL,一直不能用,結果我用SQL Monitor看,竟然Params[3],[4],[7] 都沒有代進SQL字串裡。為什麼會這樣>_< RDAate,iDate,BDate在Access 2000的欄位都是設日期. SQL.Add('INSERT INTO Rent_Back (Guest_Code,Book_Code,Vol,RDate,IDate,New,piece,BDate) VALUES '); SQL.Add('(:GuestCode,:BookCode,:Vol,:Rdate,:IDate,:New,:piece,:Bdate)'); Params[0].AsString := GuestCode; Params[1].AsString := BookCode; Params[2].AsInteger := Vol; Params[3].AsDate := date(); //借書日 Params[4].AsDate := date() 6 ; //還書日,後6天 Params[3].AsString := '否'; //新書 Params[4].AsInteger := BookCost; //價格 Params[7].AsDate := date(); //實際還書日 ----------------------- PS:K.Top真是個好地方,還有感謝各位高手來幫忙^_^ 月夜 光明 藍更愁
------
月夜 光明 藍更愁
william
版主


發表:66
回覆:2535
積分:3048
註冊:2002-07-11

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-02-04 13:58:18 IP:147.8.xxx.xxx 未訂閱
3,4,7? Maybe you should try the datetime type:
      SQL.Add('INSERT INTO Rent_Back (Guest_Code,Book_Code,Vol,RDate,IDate,New,piece,BDate) VALUES ');
      SQL.Add('(:GuestCode,:BookCode,:Vol,:Rdate,:IDate,:New,:piece,:Bdate)');
      Params[0].AsString := GuestCode;
      Params[1].AsString := BookCode;
      Params[2].AsInteger := Vol;
      Params[3].AsDateTime := trunc(Date);      //借書日
      Params[4].AsDateTime := trunc(Date   6) ; //還書日,後6天
      Params[5].AsString := '否';      //新書
      Params[6].AsInteger := BookCost;  //價格
      Params[7].AsDateTime := trunc(Date);       //實際還書日
a6475
高階會員


發表:67
回覆:230
積分:154
註冊:2002-09-15

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-02-04 14:04:53 IP:61.229.xxx.xxx 未訂閱
引言: 3,4,7? Maybe you should try the datetime type:
      SQL.Add('INSERT INTO Rent_Back (Guest_Code,Book_Code,Vol,RDate,IDate,New,piece,BDate) VALUES ');
      SQL.Add('(:GuestCode,:BookCode,:Vol,:Rdate,:IDate,:New,:piece,:Bdate)');
      Params[0].AsString := GuestCode;
      Params[1].AsString := BookCode;
      Params[2].AsInteger := Vol;
      Params[3].AsDateTime := trunc(Date);      //借書日
      Params[4].AsDateTime := trunc(Date   6) ; //還書日,後6天
      Params[5].AsString := '否';      //新書
      Params[6].AsInteger := BookCost;  //價格
      Params[7].AsDateTime := trunc(Date);       //實際還書日
不行耶! 程式依舊寫 project comicproject1.exe raised exception class EDatabaseError with message 'qryScan:Fild 'Rdate' is of an unknow type'. 月夜 光明 藍更愁
------
月夜 光明 藍更愁
william
版主


發表:66
回覆:2535
積分:3048
註冊:2002-07-11

發送簡訊給我
#4 引用回覆 回覆 發表時間:2003-02-04 14:29:48 IP:147.8.xxx.xxx 未訂閱
引言:不行耶! 程式依舊寫 project comicproject1.exe raised exception class EDatabaseError with message 'qryScan:Fild 'Rdate' is of an unknow type'. 月夜 光明 藍更愁
I have tested using BDE (since you're using SQL monitor, I assume you are using BDE) with Access 2000. Could you please post your complete code for inserting the record?
a6475
高階會員


發表:67
回覆:230
積分:154
註冊:2002-09-15

發送簡訊給我
#5 引用回覆 回覆 發表時間:2003-02-04 16:32:30 IP:61.229.xxx.xxx 未訂閱
引言: I have tested using BDE (since you're using SQL monitor, I assume you are using BDE) with Access 2000. Could you please post your complete code for inserting the record?
我的SQL Monitor的訊息: 3530 16:31:00 SQL Prepare: Driver do Microsoft Access (*.m - INSERT INTO Rent_Back (Guest_Code,Book_Code,Vol,RDate,IDate,New,piece,BDate) VALUES (?,?,?,?,?,?,?,?) 3531 16:31:00 SQL Data In: Driver do Microsoft Access (*.m - Param = 1, Name = , Type = fldZSTRING, Precision = 4, Scale = 0, Data = 0001 3532 16:31:00 SQL Data In: Driver do Microsoft Access (*.m - Param = 2, Name = , Type = fldZSTRING, Precision = 1, Scale = 0, Data = 1 3533 16:31:00 SQL Data In: Driver do Microsoft Access (*.m - Param = 3, Name = , Type = fldINT32, Precision = 0, Scale = 0, Data = 1 3534 16:31:00 SQL Data In: Driver do Microsoft Access (*.m - Param = 6, Name = , Type = fldZSTRING, Precision = 2, Scale = 0, Data = 否 3535 16:31:00 SQL Data In: Driver do Microsoft Access (*.m - Param = 7, Name = , Type = fldINT32, Precision = 0, Scale = 0, Data = 7 3536 16:31:00 SQL Execute: Driver do Microsoft Access (*.m - INSERT INTO Rent_Back (Guest_Code,Book_Code,Vol,RDate,IDate,New,piece,BDate) VALUES (?,?,?,?,?,?,?,?) 3548 16:31:00 SQL Error: Driver do Microsoft Access (*.m - [Microsoft][ODBC Microsoft Access Driver]無效的 datetime 格式 (null) 3549 16:31:00 SQL Vendor: ODBC - SQLError 3550 16:31:00 SQL Error: Driver do Microsoft Access (*.m - Unmapped SQL Error Code: 35 月夜 光明 藍更愁
------
月夜 光明 藍更愁
william
版主


發表:66
回覆:2535
積分:3048
註冊:2002-07-11

發送簡訊給我
#6 引用回覆 回覆 發表時間:2003-02-04 16:49:19 IP:147.8.xxx.xxx 未訂閱
Hi a6475, I think that your original post has some typing error? You only specify Params 0,1,2,3,4 and 7?    Params[5].AsString := '否'; //新書 Params[6].AsInteger := BookCost; //價格 It could help if you could post your Delphi code for inserting a record
a6475
高階會員


發表:67
回覆:230
積分:154
註冊:2002-09-15

發送簡訊給我
#7 引用回覆 回覆 發表時間:2003-02-05 18:11:34 IP:61.229.xxx.xxx 未訂閱
引言: Hi a6475, I think that your original post has some typing error? You only specify Params 0,1,2,3,4 and 7? Params[5].AsString := '否'; //新書 Params[6].AsInteger := BookCost; //價格 It could help if you could post your Delphi code for inserting a record < face="Verdana, Arial, Helvetica"> 感謝william大大,不厭其煩的一直回等我的問題。 我的程式碼: var IText,BookCode : String; BookCost,Vol : Integer; begin inherited; IText := Edit2.Text; //新增租的書 with qryScan do //找書,並將找到的書放到租借的地方去 begin StatusBar1.Panels[1].Text := '『租書...』'; Close; SQL.Clear; SQL.Add('SELECT * FROM BookDetail WHERE Code = :Code'); Params[0].AsString := IText; Open; //showmessage(SQL.Text ); if RecordCount = 1 then //有一筆的話 begin BookCode := FieldByName('Code').AsString; //條碼號 BookCost := FieldByName('Cost_Old').AsInteger; // 舊租 Vol := FieldByName('Vol').AsInteger; // 集數 //放入Rent_Back資料表裡 Try Close; SQL.Clear; SQL.Add('INSERT INTO Rent_Back (Guest_Code,Book_Code,Vol,RDate,IDate,New,piece,BDate) VALUES '); SQL.Add('(:GuestCode,:BookCode,:Vol,:Rdate,:IDate,:New,:piece,:Bdate)'); Params[0].AsString := GuestCode; Params[1].AsString := BookCode; Params[2].AsInteger := Vol; Params[3].AsDate := date(); //借書日 Params[4].AsDate := date() 6 ; //還書日,後6天 Params[5].AsString := '否'; //新書 Params[6].AsInteger := BookCost; //價格 Params[7].AsDate := date(); //實際還書日 ExecSQL; end; end; -------------- 我把寫成這樣,就沒有問題耶。 SQL.Add('INSERT INTO Rent_Back (Guest_Code,Book_Code,Vol,RDate,IDate,New,piece,BDate) VALUES '); SQL.Add('(:GuestCode,:BookCode,:Vol,#' DateToStr(Date()) '#,#' DateToStr(Date() 6) '#,:New,:piece,#1980/1/1#)'); Params[0].AsString := GuestCode; Params[1].AsString := BookCode; Params[2].AsInteger := Vol; Params[3].AsString := '否'; //新書 Params[4].AsInteger := BookCost; //價格 月夜 光明 藍更愁
------
月夜 光明 藍更愁
a6475
高階會員


發表:67
回覆:230
積分:154
註冊:2002-09-15

發送簡訊給我
#8 引用回覆 回覆 發表時間:2003-02-05 18:12:08 IP:61.229.xxx.xxx 未訂閱
引言: Hi a6475, I think that your original post has some typing error? You only specify Params 0,1,2,3,4 and 7? Params[5].AsString := '否'; //新書 Params[6].AsInteger := BookCost; //價格 It could help if you could post your Delphi code for inserting a record < face="Verdana, Arial, Helvetica"> 感謝william大大,不厭其煩的一直回等我的問題。 我的程式碼: var IText,BookCode : String; BookCost,Vol : Integer; begin inherited; IText := Edit2.Text; //新增租的書 with qryScan do //找書,並將找到的書放到租借的地方去 begin StatusBar1.Panels[1].Text := '『租書...』'; Close; SQL.Clear; SQL.Add('SELECT * FROM BookDetail WHERE Code = :Code'); Params[0].AsString := IText; Open; //showmessage(SQL.Text ); if RecordCount = 1 then //有一筆的話 begin BookCode := FieldByName('Code').AsString; //條碼號 BookCost := FieldByName('Cost_Old').AsInteger; // 舊租 Vol := FieldByName('Vol').AsInteger; // 集數 //放入Rent_Back資料表裡 Try Close; SQL.Clear; SQL.Add('INSERT INTO Rent_Back (Guest_Code,Book_Code,Vol,RDate,IDate,New,piece,BDate) VALUES '); SQL.Add('(:GuestCode,:BookCode,:Vol,:Rdate,:IDate,:New,:piece,:Bdate)'); Params[0].AsString := GuestCode; Params[1].AsString := BookCode; Params[2].AsInteger := Vol; Params[3].AsDate := date(); //借書日 Params[4].AsDate := date() 6 ; //還書日,後6天 Params[5].AsString := '否'; //新書 Params[6].AsInteger := BookCost; //價格 Params[7].AsDate := date(); //實際還書日 ExecSQL; end; end; -------------- 我把寫成這樣,就沒有問題耶。 SQL.Add('INSERT INTO Rent_Back (Guest_Code,Book_Code,Vol,RDate,IDate,New,piece,BDate) VALUES '); SQL.Add('(:GuestCode,:BookCode,:Vol,#' DateToStr(Date()) '#,#' DateToStr(Date() 6) '#,:New,:piece,#1980/1/1#)'); Params[0].AsString := GuestCode; Params[1].AsString := BookCode; Params[2].AsInteger := Vol; Params[3].AsString := '否'; //新書 Params[4].AsInteger := BookCost; //價格 月夜 光明 藍更愁
------
月夜 光明 藍更愁
timhuang
尊榮會員


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

發送簡訊給我
#9 引用回覆 回覆 發表時間:2003-02-05 18:44:07 IP:61.221.xxx.xxx 未訂閱
你可以試試看:    
  SQL.Add('INSERT INTO Rent_Back (Guest_Code,Book_Code,Vol,RDate,IDate,New,piece,BDate) VALUES ');
  SQL.Add('(:GuestCode,:BookCode,:Vol,:Rdate,:IDate,:New,:piece,:Bdate)');
  Params[0].AsString := GuestCode;
  Params[1].AsString := BookCode;
  Params[2].AsInteger := Vol;
  Params[3].Value := date(); //借書日
  Params[4].Value := date()  6 ; //還書日,後6天
  Params[3].AsString := '否'; //新書
  Params[4].AsInteger := BookCost; //價格
  Params[7].Value := date(); //實際還書日
發表人 - timhuang 於 2003/02/05 19:16:56
william
版主


發表:66
回覆:2535
積分:3048
註冊:2002-07-11

發送簡訊給我
#10 引用回覆 回覆 發表時間:2003-02-05 20:35:29 IP:210.3.xxx.xxx 未訂閱
I think you should use AsDateTime and remove the time part from the Date function using trunc since AsDate may not work (at least not on my machine).
ko
資深會員


發表:28
回覆:785
積分:444
註冊:2002-08-14

發送簡訊給我
#11 引用回覆 回覆 發表時間:2003-02-06 16:13:21 IP:61.221.xxx.xxx 未訂閱
a6475你好: 用 ParamByName('GuestCode').AsString:=GuestCode; .. ... ....
------
======================
昏睡~
不昏睡~
不由昏睡~
a6475
高階會員


發表:67
回覆:230
積分:154
註冊:2002-09-15

發送簡訊給我
#12 引用回覆 回覆 發表時間:2003-02-06 21:46:52 IP:61.229.xxx.xxx 未訂閱
引言: 你可以試試看:
  SQL.Add('INSERT INTO Rent_Back (Guest_Code,Book_Code,Vol,RDate,IDate,New,piece,BDate) VALUES ');
  SQL.Add('(:GuestCode,:BookCode,:Vol,:Rdate,:IDate,:New,:piece,:Bdate)');
  Params[0].AsString := GuestCode;
  Params[1].AsString := BookCode;
  Params[2].AsInteger := Vol;
  Params[3].Value := date(); //借書日
  Params[4].Value := date()  6 ; //還書日,後6天
  Params[3].AsString := '否'; //新書
  Params[4].AsInteger := BookCost; //價格
  Params[7].Value := date(); //實際還書日
發表人 - timhuang 於 2003/02/05 19:16:56
謝謝,修正後以經能夠使用。 只是我還是不懂為什麼不能使用asDate呢? 月夜 光明 藍更愁
------
月夜 光明 藍更愁
系統時間:2024-09-29 3:09:25
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!