線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:2057
推到 Plurk!
推到 Facebook!

這種情況的sql該怎麼寫...

答題得分者是:william
nachi
初階會員


發表:40
回覆:116
積分:31
註冊:2003-02-26

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-05-23 15:40:48 IP:218.165.xxx.xxx 未訂閱
我的資料欄位是(日期/時間),裡面放的的日期 時間~ 但我查詢時只給日期,造成error~ 除了把時間獨立出來,能用語法解決這問題嗎?
chih
版主


發表:48
回覆:1186
積分:639
註冊:2002-04-02

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-05-23 15:57:24 IP:211.74.xxx.xxx 未訂閱
哪種資料庫??
引言: 我的資料欄位是(日期/時間),裡面放的的日期 時間~ 但我查詢時只給日期,造成error~ 除了把時間獨立出來,能用語法解決這問題嗎?
wnhoo
高階會員


發表:75
回覆:443
積分:198
註冊:2003-04-22

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-05-23 16:05:24 IP:61.155.xxx.xxx 未訂閱
select DATE(FILELDNAME) AS MYDATE  FROM TABLENAME        风花雪月 e梦情缘
發表人 - wnhoo 於 2003/05/23 16:12:47
------
风花雪月 e梦情缘
nachi
初階會員


發表:40
回覆:116
積分:31
註冊:2003-02-26

發送簡訊給我
#4 引用回覆 回覆 發表時間:2003-05-23 16:14:04 IP:218.165.xxx.xxx 未訂閱
chih~我用access wnhoo~我的語法是附加條件,無法做成你建議的語法... ..... sql.add('and 日期 between' #39 fdate1 #39 'and' #39 fdate2 #39); .....
wnhoo
高階會員


發表:75
回覆:443
積分:198
註冊:2003-04-22

發送簡訊給我
#5 引用回覆 回覆 發表時間:2003-05-23 16:22:31 IP:61.155.xxx.xxx 未訂閱
select * from tablename where Date(日期)  between '2003-1-1' and '2003-5-5'    ACCESS是支持的    风花雪月 e梦情缘
------
风花雪月 e梦情缘
nachi
初階會員


發表:40
回覆:116
積分:31
註冊:2003-02-26

發送簡訊給我
#6 引用回覆 回覆 發表時間:2003-05-23 16:30:49 IP:218.165.xxx.xxx 未訂閱
wnhoo~ 資料庫裡的資料格式:2003/5/13 下午 03:04:56 而搜詢條件格式:2003/5/13 (用datetimepicker)
chih
版主


發表:48
回覆:1186
積分:639
註冊:2002-04-02

發送簡訊給我
#7 引用回覆 回覆 發表時間:2003-05-23 16:37:30 IP:211.74.xxx.xxx 未訂閱
Query1.SQL.Add('SELECT 借閱記錄.* ' ' FROM 借閱記錄 ' 'WHERE left(日期,8) between ' #39 FORMATDATETIME('yyyymmdd',datetimepicker1.Date) #39 ' and ' #39 FORMATDATETIME('yyyymmdd',datetimepicker2.Date) #39); TRY TRY SEE 發表人 - chih 於 2003/05/23 17:31:02
william
版主


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

發送簡訊給我
#8 引用回覆 回覆 發表時間:2003-05-23 16:48:26 IP:147.8.xxx.xxx 未訂閱
wnhoo: Date is a function to return the current system datetime in Access. nachi: select * from tablename where DateSerial(Year([日期]),Month([日期]),Day([日期])) = #2003/5/13# In Access, date time are stored as double which is similar to what Delphi stored as TDateTime, so a quick way is (Access only, MS SQL needs some offset): select * from tablename where round([日期])=:YourDateTimePickerDate then Query1.Params[0].AsDateTime := trunc(DateTimePicker1.Date);
nachi
初階會員


發表:40
回覆:116
積分:31
註冊:2003-02-26

發送簡訊給我
#9 引用回覆 回覆 發表時間:2003-05-23 17:03:36 IP:218.165.xxx.xxx 未訂閱
我寫成這個型式: sql.add('and round([日期]) between' #39 trunc(fdate1) #39 'and' #39 trunc(fdate2) #39); 但無法編譯~[Error] Unit5.pas(94): Incompatible types 曾試著在fdate後加上時間,但執行後出現error~ 不知實際上這個方法是否可行~有人試過嗎? 繼續test....
wnhoo
高階會員


發表:75
回覆:443
積分:198
註冊:2003-04-22

發送簡訊給我
#10 引用回覆 回覆 發表時間:2003-05-23 17:11:15 IP:61.155.xxx.xxx 未訂閱
william 兄:    我是写错了,我使用的是DB2函数!    修改如下:    procedure TForm1.Button1Click(Sender: TObject); var query6:tadoquery; begin query6:=tadoquery.Create(nil); query6.Connection :=adoconnection1; query6.SQL.Clear ; query6.SQL.Add('select * from sblx where cdate(left(cstr(rq),10)) between '''+datetostr(DateTimePicker1.date)+''' and '''+datetostr(DateTimePicker2.date)+''''); showmessage(query6.SQL.Text ); query6.Open ; if query6.Eof then showmessage('sss') else showmessage('ok'); query6.Close ; query6.Free ;    end;    测试成功!!!!    风花雪月 e梦情缘
發表人 - wnhoo 於 2003/05/23 17:14:12
------
风花雪月 e梦情缘
william
版主


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

發送簡訊給我
#11 引用回覆 回覆 發表時間:2003-05-23 17:13:22 IP:147.8.xxx.xxx 未訂閱
fdate1,fdate2 is datetime picker? sql.add('and (round([日期]) between ' IntToStr(trunc(fdate1.Date)) ' and ' IntToStr(trunc(fdate2.Date)) ')');
nachi
初階會員


發表:40
回覆:116
積分:31
註冊:2003-02-26

發送簡訊給我
#12 引用回覆 回覆 發表時間:2003-05-23 17:57:53 IP:218.165.xxx.xxx 未訂閱
wnhoo~請問一下你此行程式中的cdate和rq還有cstr是什麼意思啊? query6.SQL.Add('select * from sblx where cdate(left(cstr(rq),10)) between ''' datetostr(DateTimePicker1.date) ''' and william~fdate是這樣來的: fdate1 := AnsiReplaceText(FormatDateTime('yyyy,mm,dd', dtp1.Date), ',', '/'); fdate2 := AnsiReplaceText(FormatDateTime('yyyy,mm,dd', dtp2.Date), ',', '/'); 所以寫成如下: sql.add('and (round([日期]) between ' IntToStr(trunc(fdate1)) ' and ' IntToStr(trunc(fdate2)) ')'); 還是出現2行[Error] Unit5.pas(95): Incompatible types 發表人 - nachi 於 2003/05/23 18:01:06
wnhoo
高階會員


發表:75
回覆:443
積分:198
註冊:2003-04-22

發送簡訊給我
#13 引用回覆 回覆 發表時間:2003-05-23 18:03:19 IP:61.155.xxx.xxx 未訂閱
nachi 兄:    cdate(left(cstr(rq),10))     RQ 我测试用的日期时间型的字段 思想》将RQ转成字符(用CSTR),然后取DATE部分(用LEFT),再然后就又转成DATE型(用CDATE)    风花雪月 e梦情缘
------
风花雪月 e梦情缘
nachi
初階會員


發表:40
回覆:116
積分:31
註冊:2003-02-26

發送簡訊給我
#14 引用回覆 回覆 發表時間:2003-05-23 18:19:21 IP:218.165.xxx.xxx 未訂閱
不知道你用的是什麼指令,help也找不到,不過從你的解說中我知道該用什麼去取代~ 我寫成如下,fdate1和fdate2沒datetostr是因為加上會error,所以拿掉了... [Error] Unit5.pas(94): Incompatible types: 'TDateTime' and 'String'    SQL.Add('select * from 借閱記錄 where strtodate(left(datetostr(日期),10)) between ''' fdate1 ''' and ''' fdate2 ''''); 執行結果還是錯誤,原因為語法錯誤,我是覺得問題出在紅字的地方,但你說你測試成功
wnhoo
高階會員


發表:75
回覆:443
積分:198
註冊:2003-04-22

發送簡訊給我
#15 引用回覆 回覆 發表時間:2003-05-23 18:29:27 IP:61.155.xxx.xxx 未訂閱
nachi 兄弟: 是这样!!!!    SQL.Add('select * from sblx where cdate(left(cstr(rq),10)) between ''' datetostr(DateTimePicker1.date) ''' and ''' datetostr(DateTimePicker2.date) ''''); 风花雪月 e梦情缘
------
风花雪月 e梦情缘
wnhoo
高階會員


發表:75
回覆:443
積分:198
註冊:2003-04-22

發送簡訊給我
#16 引用回覆 回覆 發表時間:2003-05-23 18:30:46 IP:61.155.xxx.xxx 未訂閱
不知道你用的是什麼指令,help也找不到,不過從你的解說中我知道該用什麼去取代~ 我寫成如下,fdate1和fdate2沒datetostr是因為加上會error,所以拿掉了... [Error] Unit5.pas(94): Incompatible types: 'TDateTime' and 'String'    SQL.Add('select * from 借閱記錄 where strtodate(left(datetostr(日期),10)) between '''+fdate1+''' and '''+fdate2+'''');    執行結果還是錯誤,原因為語法錯誤,我是覺得問題出在紅字的地方,但你說你測試成功 So~再test去....        nachi 兄弟: 是这样!!!!    SQL.Add('select * from sblx where cdate(left(cstr(rq),10)) between ''' datetostr(DateTimePicker1.date) ''' and ''' datetostr(DateTimePicker2.date) ''''); 您用的是DELPHI函数,我用的是SQL中ACCESS支持的函数。DEAR! 风花雪月 e梦情缘
------
风花雪月 e梦情缘
chih
版主


發表:48
回覆:1186
積分:639
註冊:2002-04-02

發送簡訊給我
#17 引用回覆 回覆 發表時間:2003-05-23 18:33:14 IP:61.216.xxx.xxx 未訂閱
hi..nachi.. 我上面post的語法不知道你有沒有試看看ㄋ?
Justmade
版主


發表:94
回覆:1934
積分:2030
註冊:2003-03-12

發送簡訊給我
#18 引用回覆 回覆 發表時間:2003-05-23 18:35:19 IP:218.16.xxx.xxx 未訂閱
sql.add('and (round([日期]) between ' IntToStr(trunc(dtp1.Date)) ' and ' IntToStr(trunc(dtp2.Date)) ')'); 這樣便應可以了 只是補充一下你誤會了 william 兄解答的地方, 記得解答是他提出的。
nachi
初階會員


發表:40
回覆:116
積分:31
註冊:2003-02-26

發送簡訊給我
#19 引用回覆 回覆 發表時間:2003-05-23 18:49:51 IP:218.165.xxx.xxx 未訂閱
chih~我有試,也是語法錯誤,我對你紅字的地方感到奇怪,不過就算我改成select * ....,也是語法錯誤 >('> ' >...先說聲謝謝ㄋㄟ
chih
版主


發表:48
回覆:1186
積分:639
註冊:2002-04-02

發送簡訊給我
#20 引用回覆 回覆 發表時間:2003-05-23 18:54:58 IP:61.216.xxx.xxx 未訂閱
ㄝ奇怪了喔..我是按照你原來的Table,借閱記錄的日期我有輸入資料, 都是日期 時間,可是我Run起來是OK的ㄋ,你把這一各部份完整的Code POST上來吧, 我想你可能又有其他地方寫漏了.. <>< face="Verdana, Arial, Helvetica">引言: chih~我有試,也是語法錯誤,我對你紅字的地方感到奇怪,不過就算我改成select * ....,也是語法錯誤 < face="Verdana, Arial, Helvetica">
nachi
初階會員


發表:40
回覆:116
積分:31
註冊:2003-02-26

發送簡訊給我
#21 引用回覆 回覆 發表時間:2003-05-23 19:11:59 IP:218.165.xxx.xxx 未訂閱
最好不是因為我miss了什麼,不然被大家k屬.... < class="code"> procedure TForm5.Button1Click(Sender: TObject); //學號查詢 begin with datamodule3.ADOQuery1 do begin active := true; close; sql.Clear; SQL.Add('SELECT 借閱記錄.* ' ' FROM 借閱記錄 ' 'WHERE left(日期,8) between ' #39 FORMATDATETIME('yyyymmdd',dtp1.Date) #39 ' and ' #39 FORMATDATETIME('yyyymmdd',dtp2.Date) #39); //sql.add('select * from 借閱記錄 where 學號=' #39 edit1.Text #39); sql.add('and 學號=' #39 edit1.Text #39); end; findsql(sender); end; procedure tform5.findsql(Sender: TObject);//附屬條件 var fdate1, fdate2: string; begin fdate1 := AnsiReplaceText(FormatDateTime('yyyy,mm,dd', dtp1.Date), ',', '/'); fdate2 := AnsiReplaceText(FormatDateTime('yyyy,mm,dd', dtp2.Date), ',', '/'); with datamodule3.ADOQuery1 do begin //sql.add('and (round([日期]) between ' IntToStr(trunc(dtp1.Date)) ' and ' IntToStr(trunc(dtp2.Date)) ')'); //SQL.Add('select * from 借閱記錄 where cdate(left(cstr(日期),10)) between' #39 fdate1 #39 'and' #39 fdate2 #39); //sql.add('and (日期) between' #39 datetostr(fdate1) #39 'and' #39 datetostr(fdate2) #39); //sql.add('and (round([日期]) between ' IntToStr(trunc(fdate1)) ' and ' IntToStr(trunc(fdate2)) ')'); if (edit3.Text <> '') then sql.Add('and 書名=' #39 edit3.Text #39); if (checkbox1.Checked = true) then sql.add('and 還書情形=true'); if (checkbox2.Checked = true) then sql.Add('and 還書情形=false'); open; end; end;
chih
版主


發表:48
回覆:1186
積分:639
註冊:2002-04-02

發送簡訊給我
#22 引用回覆 回覆 發表時間:2003-05-23 19:28:53 IP:61.216.xxx.xxx 未訂閱
procedure TForm5.Button1Click(Sender: TObject); //學號查詢
begin
   with datamodule3.ADOQuery1 do
      begin
         active := False;
         close;
         sql.Clear;
         SQL.Add('SELECT 借閱記錄.* ' ' FROM 借閱記錄 ');
         //接下來這一句試的結果還是William 兄的對
         sql.add('where (round([日期]) between '   IntToStr(trunc(dtp1.Date))   ' and '   IntToStr(trunc(dtp2.Date)) ')');
         sql.add('and 學號=' #39 edit1.Text #39);
         active := true;
      end;
   findsql(sender);
end;
另外你的findsql(sender);我就沒有幫你檢查了,William 兄先答對的.. TRY TRY SEE
發表人 - chih 於 2003/05/23 19:56:20
Justmade
版主


發表:94
回覆:1934
積分:2030
註冊:2003-03-12

發送簡訊給我
#23 引用回覆 回覆 發表時間:2003-05-23 19:47:07 IP:218.16.xxx.xxx 未訂閱
引言: justmade~我照你POST的又run了一次,雖錯誤,但訊息不一樣了,它說 參數[日期]沒有預設值....
應該是不用 [ ] 啦 sql.add('and (round(日期) between ' IntToStr(trunc(dtp1.Date)) ' and ' IntToStr(trunc(dtp2.Date)) ')'); William 用 [] 的意思應是不知你用甚麼欄位名所以用 [] 括住即是用你真正的欄位名代替.... 我沒用 Access 沒試過,但若可以這應是最快的方式,因為對一個數字比對一段文字快很多的。
nachi
初階會員


發表:40
回覆:116
積分:31
註冊:2003-02-26

發送簡訊給我
#24 引用回覆 回覆 發表時間:2003-05-23 19:59:54 IP:218.165.xxx.xxx 未訂閱
ㄟ~justmade、chih 還是error 且都指向 >
william
版主


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

發送簡訊給我
#25 引用回覆 回覆 發表時間:2003-05-23 22:43:27 IP:210.3.xxx.xxx 未訂閱
引言: ㄟ~justmade、chih 還是error 且都指向 >< face="Verdana, Arial, Helvetica"> 請問你有那些資料欄位?該error應該是因為沒有"日期"這個欄位。可以的話,還是用英文作為欄位名稱,ADO好像在中文欄位/參數上有BUG
系統時間:2024-07-03 20:05:14
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!