這種情況的sql該怎麼寫... |
答題得分者是:william
|
nachi
初階會員 ![]() ![]() 發表:40 回覆:116 積分:31 註冊:2003-02-26 發送簡訊給我 |
|
chih
版主 ![]() ![]() ![]() ![]() ![]() ![]() 發表:48 回覆:1186 積分:639 註冊:2002-04-02 發送簡訊給我 |
|
wnhoo
高階會員 ![]() ![]() ![]() ![]() 發表:75 回覆:443 積分:198 註冊:2003-04-22 發送簡訊給我 |
|
nachi
初階會員 ![]() ![]() 發表:40 回覆:116 積分:31 註冊:2003-02-26 發送簡訊給我 |
|
wnhoo
高階會員 ![]() ![]() ![]() ![]() 發表:75 回覆:443 積分:198 註冊:2003-04-22 發送簡訊給我 |
|
nachi
初階會員 ![]() ![]() 發表:40 回覆:116 積分:31 註冊:2003-02-26 發送簡訊給我 |
|
chih
版主 ![]() ![]() ![]() ![]() ![]() ![]() 發表:48 回覆:1186 積分:639 註冊:2002-04-02 發送簡訊給我 |
|
william
版主 ![]() ![]() ![]() ![]() ![]() 發表:66 回覆:2535 積分:3048 註冊:2002-07-11 發送簡訊給我 |
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 發送簡訊給我 |
|
wnhoo
高階會員 ![]() ![]() ![]() ![]() 發表:75 回覆:443 積分:198 註冊:2003-04-22 發送簡訊給我 |
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 發送簡訊給我 |
|
nachi
初階會員 ![]() ![]() 發表:40 回覆:116 積分:31 註冊:2003-02-26 發送簡訊給我 |
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 發送簡訊給我 |
|
nachi
初階會員 ![]() ![]() 發表:40 回覆:116 積分:31 註冊:2003-02-26 發送簡訊給我 |
不知道你用的是什麼指令,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 發送簡訊給我 |
|
wnhoo
高階會員 ![]() ![]() ![]() ![]() 發表:75 回覆:443 積分:198 註冊:2003-04-22 發送簡訊給我 |
不知道你用的是什麼指令,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 發送簡訊給我 |
|
Justmade
版主 ![]() ![]() ![]() ![]() ![]() ![]() 發表:94 回覆:1934 積分:2030 註冊:2003-03-12 發送簡訊給我 |
|
nachi
初階會員 ![]() ![]() 發表:40 回覆:116 積分:31 註冊:2003-02-26 發送簡訊給我 |
|
chih
版主 ![]() ![]() ![]() ![]() ![]() ![]() 發表:48 回覆:1186 積分:639 註冊:2002-04-02 發送簡訊給我 |
|
nachi
初階會員 ![]() ![]() 發表:40 回覆:116 積分:31 註冊:2003-02-26 發送簡訊給我 |
最好不是因為我miss了什麼,不然被大家k屬....
|
chih
版主 ![]() ![]() ![]() ![]() ![]() ![]() 發表:48 回覆:1186 積分:639 註冊:2002-04-02 發送簡訊給我 |
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 發送簡訊給我 |
引言: 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 發送簡訊給我 |
|
william
版主 ![]() ![]() ![]() ![]() ![]() 發表:66 回覆:2535 積分:3048 註冊:2002-07-11 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |