sql語法抓不到我的值 |
答題得分者是:T.J.B
|
miga
初階會員 發表:61 回覆:92 積分:30 註冊:2002-08-27 發送簡訊給我 |
這段sql語法我在sql下測試過了,是沒問題的
只是拿到delphi中,要丟變數進去,sql就抓不到變數,只會幫我排序,
並不會幫我找出介於這區間的資料,
請大家幫我看看好嗎…謝謝
with DM_MT.Query_MT_choose do
begin
close;
sql.Clear;
sql.LoadFromFile('sql\Dchice.sql'); case choose_item.ItemIndex of
0: sql.add('and STUDENT_COURSE.STU_ID >=:start_id and STUDENT_COURSE.STU_ID <=:end_id order by STUDENT_COURSE.STU_ID');
1: sql.add('and COURSE.CRS_ID >=:start_id and COURSE.CRS_ID <=:end_id order by COURSE.CRS_ID');
end;
ParamByName('start_id').asstring:=edit1.text;
ParamByName('end_id').asstring:=edit2.text;
prepare;
open; if recordcount=0 then
showmessage('找不到符合的資料!!');
bitbtn2Click(nil);
end;
|
william
版主 發表:66 回覆:2535 積分:3048 註冊:2002-07-11 發送簡訊給我 |
Don't know if it is related. I remember encountering a BUG in using BDE with Access DB back in Delphi 2.0: RecordCount will be zero when FIRST called. So I used to call it twice, e.g.
Query1.RecordCount; { it fixed a BUG???} if Query1.RecordCount<>0 then begin {....} end; |
chih
版主 發表:48 回覆:1186 積分:639 註冊:2002-04-02 發送簡訊給我 |
底下改成這樣試看看..
case choose_item.ItemIndex of
0: sql.add('and STUDENT_COURSE.STU_ID BETWEEN ' #39 edit1.text #39 ' and ' #39 edit2.text #39 ' order by STUDENT_COURSE.STU_ID');
1: sql.add('and COURSE.CRS_ID BETWEEN ' #39 edit1.text #39 ' and 'v #39 edit2.text #39 ' order by COURSE.CRS_ID');
end;
引言: case choose_item.ItemIndex of 0: sql.add('and STUDENT_COURSE.STU_ID >=:start_id and STUDENT_COURSE.STU_ID <=:end_id order by STUDENT_COURSE.STU_ID'); 1: sql.add('and COURSE.CRS_ID >=:start_id and COURSE.CRS_ID <=:end_id order by COURSE.CRS_ID'); end; ParamByName('start_id').asstring:=edit1.text; ParamByName('end_id').asstring:=edit2.text; |
ko
資深會員 發表:28 回覆:785 積分:444 註冊:2002-08-14 發送簡訊給我 |
miga你好:
你有試過between start_id and end_id 嗎?
引言: case choose_item.ItemIndex of 0: sql.add('and STUDENT_COURSE.STU_ID >=:start_id and STUDENT_COURSE.STU_ID <=:end_id order by STUDENT_COURSE.STU_ID'); 1: sql.add('and COURSE.CRS_ID >=:start_id and COURSE.CRS_ID <=:end_id order by COURSE.CRS_ID'); end;
------
====================== 昏睡~ 不昏睡~ 不由昏睡~ |
ccchen
版主 發表:61 回覆:940 積分:1394 註冊:2002-04-15 發送簡訊給我 |
|
miga
初階會員 發表:61 回覆:92 積分:30 註冊:2002-08-27 發送簡訊給我 |
[quote]
底下改成這樣試看看..
case choose_item.ItemIndex of
0: sql.add('and STUDENT_COURSE.STU_ID BETWEEN ' #39 edit1.text #39 ' and ' #39 edit2.text #39 ' order by STUDENT_COURSE.STU_ID');
1: sql.add('and COURSE.CRS_ID BETWEEN ' #39 edit1.text #39 ' and 'v #39 edit2.text #39 ' order by COURSE.CRS_ID');
end;
我試過了…還是不行,只會排序,而且也不會出現訊息告知說沒抓到變數
真是奇怪
|
miga
初階會員 發表:61 回覆:92 積分:30 註冊:2002-08-27 發送簡訊給我 |
|
miga
初階會員 發表:61 回覆:92 積分:30 註冊:2002-08-27 發送簡訊給我 |
[quote]
Don't know if it is related. I remember encountering a BUG in using BDE with Access DB back in Delphi 2.0: RecordCount will be zero when FIRST called. So I used to call it twice, e.g.
Query1.RecordCount; { it fixed a BUG???} if Query1.RecordCount<>0 then begin {....} end;我不太懂哎,要把這段程式加在那做判斷呢 你的意思是先判斷query1裡面有沒有值嗎 |
P.D.
版主 發表:603 回覆:4038 積分:3874 註冊:2006-10-31 發送簡訊給我 |
引言: 這段sql語法我在sql下測試過了,是沒問題的 只是拿到delphi中,要丟變數進去,sql就抓不到變數,只會幫我排序, 並不會幫我找出介於這區間的資料, 請大家幫我看看好嗎…謝謝 with DM_MT.Query_MT_choose do begin close; sql.Clear; sql.LoadFromFile('sql\Dchice.sql'); case choose_item.ItemIndex of 0: sql.add('and STUDENT_COURSE.STU_ID >=:start_id and STUDENT_COURSE.STU_ID <=:end_id order by STUDENT_COURSE.STU_ID'); 1: sql.add('and COURSE.CRS_ID >=:start_id and COURSE.CRS_ID <=:end_id order by COURSE.CRS_ID'); end; ParamByName('start_id').asstring:=edit1.text; ParamByName('end_id').asstring:=edit2.text; prepare; open; if recordcount=0 then showmessage('找不到符合的資料!!'); bitbtn2Click(nil); end; >>< face="Verdana, Arial, Helvetica"> 這應該不是參數傳不進的問題, SQL資料庫本身並不支援RECORDCOUNT用法, 以下截取DELPHI HELP說明 an application should only use RecordCount with Paradox and dBASE tables. 可以看出, RECORDCOUNT 只支援 DB, DBF格式, 如果你只是要判斷資料是否存在, 有兩個做法 1. if (DM_MT.Query_MT_choose.eof) and (DM_MT.Query_MT_choose.bof) then showmessage('記錄不存在') 2.另一種(舉例) DM_MT.Query_MT_choose.sql.text:= 'select count(*) from ..... where STUDENT_COURSE.STU_ID >=:start....'; DM_MT.Query_MT_choose.sql.execsql; DM_MT.Query_MT_choose.fieldbyname('COUNT').Asinteger=0 then showmessage('記錄不存在'); |
miga
初階會員 發表:61 回覆:92 積分:30 註冊:2002-08-27 發送簡訊給我 |
|
ko
資深會員 發表:28 回覆:785 積分:444 註冊:2002-08-14 發送簡訊給我 |
引言: case choose_item.ItemIndex of 0: sql.add('and STUDENT_COURSE.STU_ID BETWEEN ' #39 edit1.text #39 ' and ' #39 edit2.text #39 ' order by STUDENT_COURSE.STU_ID'); 1: sql.add('and COURSE.CRS_ID BETWEEN ' #39 edit1.text #39 ' and 'v #39 edit2.text #39 ' order by COURSE.CRS_ID'); end;紅色部分確定沒錯嘛? 改成 case choose_item.ItemIndex of 0: sql.add('and STUDENT_COURSE.STU_ID BETWEEN :start_id and :end_id order by STUDENT_COURSE.STU_ID'); 1: sql.add('and COURSE.CRS_ID BETWEEN ':start_id and :end_id order by COURSE.CRS_ID'); ParamByName('start_id').asstring:=edit1.text; ParamByName('end_id').asstring:=edit2.text; OPEN;...以下都一樣 end;
------
====================== 昏睡~ 不昏睡~ 不由昏睡~ |
miga
初階會員 發表:61 回覆:92 積分:30 註冊:2002-08-27 發送簡訊給我 |
引言:嗯…100%的確定哦… 第二個方法我也試過了… 結果是一樣 我想要的是只show出在區間的資料 但是全部的資料都會出來, 只有做排序而已引言: case choose_item.ItemIndex of 0: sql.add('and STUDENT_COURSE.STU_ID BETWEEN ' #39 edit1.text #39 ' and ' #39 edit2.text #39 ' order by STUDENT_COURSE.STU_ID'); 1: sql.add('and COURSE.CRS_ID BETWEEN ' #39 edit1.text #39 ' and 'v #39 edit2.text #39 ' order by COURSE.CRS_ID'); end;紅色部分確定沒錯嘛? 改成 case choose_item.ItemIndex of 0: sql.add('and STUDENT_COURSE.STU_ID BETWEEN :start_id and :end_id order by STUDENT_COURSE.STU_ID'); 1: sql.add('and COURSE.CRS_ID BETWEEN ':start_id and :end_id order by COURSE.CRS_ID'); ParamByName('start_id').asstring:=edit1.text; ParamByName('end_id').asstring:=edit2.text; OPEN;...以下都一樣 end; |
P.D.
版主 發表:603 回覆:4038 積分:3874 註冊:2006-10-31 發送簡訊給我 |
引言: 因為判斷有沒有資料庫中的資料是否存在 對我並不是太重要, 所以我就先把他註解掉 但是重點是… 我所輸入的區間,資料庫中確實是有資料存在的, 但是他卻出不來… 到底為何因哩… >>< face="Verdana, Arial, Helvetica"> 嗯! 1.請先把 sql.text內容寫在 query中proerty的SQL內容, 成為固定寫法, 來確認你的 loadformfile的內容是否有問題, 然後檢查一下 query的property中的 parameter 是否有 start... , end..這兩個參數, 如果沒有, 則表示語法基本上有不對 另外, 我曾碰到一個狀況, 雖然不可思議, 但確實發生過 2.把 STUDENT_COURSE.STU_ID >=:start.... 改為 STUDENT_COURSE.STU_ID >= :start.... , 請在 :start.. 前加一個空白 good luck! 發表人 - P.D. 於 2002/12/17 01:11:36 |
miga
初階會員 發表:61 回覆:92 積分:30 註冊:2002-08-27 發送簡訊給我 |
嗯!
1.請先把 sql.text內容寫在 query中proerty的SQL內容, 成為固定寫法, 來確認你的 loadformfile的內容是否有問題, 然後檢查一下 query的property中的 parameter 是否有 start... , end..這兩個參數, 如果沒有, 則表示語法基本上有不對 另外, 我曾碰到一個狀況, 雖然不可思議, 但確實發生過
2.把 STUDENT_COURSE.STU_ID >=:start.... 改為
STUDENT_COURSE.STU_ID >= :start.... , 請在 :start.. 前加一個空白 good luck! 發表人 - P.D. 於 2002/12/17 01:11:36
[/quote] 哇~~~~~
我是先把 >
|
chih
版主 發表:48 回覆:1186 積分:639 註冊:2002-04-02 發送簡訊給我 |
|
hagar
版主 發表:143 回覆:4056 積分:4445 註冊:2002-04-14 發送簡訊給我 |
引言: 這段sql語法我在sql下測試過了,是沒問題的 只是拿到delphi中,要丟變數進去,sql就抓不到變數,只會幫我排序, 並不會幫我找出介於這區間的資料, 請大家幫我看看好嗎…謝謝 with DM_MT.Query_MT_choose do begin close; sql.Clear; sql.LoadFromFile('sql\Dchice.sql'); case choose_item.ItemIndex of 0: sql.add('and STUDENT_COURSE.STU_ID >=:start_id and STUDENT_COURSE.STU_ID <=:end_id order by STUDENT_COURSE.STU_ID'); 1: sql.add('and COURSE.CRS_ID >=:start_id and COURSE.CRS_ID <=:end_id order by COURSE.CRS_ID'); end; ParamByName('start_id').asstring:=edit1.text; ParamByName('end_id').asstring:=edit2.text; prepare; 在這一行之前加個 ShowMessage(sql.Text); 或 Memo1.Lines.Add(sql.Text); 看看 SQL 內容結果到底為何? open; if recordcount=0 then showmessage('找不到符合的資料!!'); bitbtn2Click(nil); end; >>< face="Verdana, Arial, Helvetica"> -- Everything I say is a lie. |
william
版主 發表:66 回覆:2535 積分:3048 註冊:2002-07-11 發送簡訊給我 |
引言: Don't know if it is related. I remember encountering a BUG in using BDE with Access DB back in Delphi 2.0: RecordCount will be zero when FIRST called. So I used to call it twice, e.g.Query1.RecordCount; { it fixed a BUG???} if Query1.RecordCount<>0 then begin {....} end;我不太懂哎,要把這段程式加在那做判斷呢 你的意思是先判斷query1裡面有沒有值嗎>>< face="Verdana, Arial, Helvetica"> As ccchen said, you cannot trust RecordCount in all cases. I find callinf RecordCount twice in an application I developed using Delphi 2 will return the correct count (strange, eh?). If possible using 'select count(*) .......' first to return the count or simply use query1.Eof right after open instead of quert1.RecordCount=0 to test if the query is empty. |
miga
初階會員 發表:61 回覆:92 積分:30 註冊:2002-08-27 發送簡訊給我 |
引言: 我覺得問題點應該是出在sql.LoadFromFile('sql\Dchice.sql');這一段.. 我原來POST那一段是沒有問題的....可以Run... 我看你原來的寫法是>= 跟<=...這樣好像是SELECT出全部的資料喔... 如果你Dchice.sql的語法SELECT出來就是沒有資料... 那你在加條件也沒有用... 要不要把Dchice.sql POST上來讓大家幫你看ㄋ??這是我的sql\dchice.SQL select STUDENT_COURSE.STU_ID,STUDENT_COURSE.CRS_ID,STUDENT.STU_CNAME,COURSE.CRS_NAME,COURSE.CRS_POINT,TEACHER.TEA_CNAME,DEPARTMENT.DEP_SCNAME FROM STUDENT_COURSE LEFT JOIN STUDENT ON STUDENT_COURSE.STU_ID=STUDENT.STU_ID LEFT JOIN COURSE ON STUDENT_COURSE.CRS_ID=COURSE.CRS_ID LEFT JOIN COURSE_DETAIL ON COURSE.CRS_ID=COURSE_DETAIL.CRS_ID LEFT JOIN TEACHER ON COURSE_DETAIL.TEA_ID=TEACHER.TEA_ID LEFT JOIN DEPARTMENT ON COURSE_DETAIL.DEP_ID=DEPARTMENT.DEP_ID 謝謝大家撥空幫我回答問題 另外,我有加shomessage(DM_MT.Query_MT_choose.sql.text); 出來的訊息就是dchice.sql再加上我另外加 的那些sql語法喲~~ |
T.J.B
版主 發表:29 回覆:532 積分:497 註冊:2002-08-14 發送簡訊給我 |
|
miga
初階會員 發表:61 回覆:92 積分:30 註冊:2002-08-27 發送簡訊給我 |
引言: [quote] 我覺得問題點應該是出在sql.LoadFromFile('sql\Dchice.sql');這一段.. 我原來POST那一段是沒有問題的....可以Run... 我看你原來的寫法是>= 跟<=...這樣好像是SELECT出全部的資料喔... 如果你Dchice.sql的語法SELECT出來就是沒有資料... 那你在加條件也沒有用... 要不要把Dchice.sql POST上來讓大家幫你看ㄋ??今天我利用本機上資料庫去測這段語法, 我發現我真的沒辦法去把資料SELECT出來, 也就是說,這段語法真的有錯誤囉, 我也有改成BETWEEN 但是好像一樣 我用的是MYSQL哦 大家幫我看看我的語法吧 另外,我會用LEFT JOIN,是因為我用WHERE的話 好像多於兩個TABLE做關聯,他就會變成空集合,完全沒資料 麻煩大家了 |
T.J.B
版主 發表:29 回覆:532 積分:497 註冊:2002-08-14 發送簡訊給我 |
|
miga
初階會員 發表:61 回覆:92 積分:30 註冊:2002-08-27 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |