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

資料超過1000筆的查詢問題

尚未結案
breeze_1
一般會員


發表:33
回覆:72
積分:21
註冊:2003-05-26

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-10-03 08:45:25 IP:202.104.xxx.xxx 未訂閱
SELECT * FROM TABEL WHERE SN IN ('1','2','3',.....'1001') 這樣就會提示超過1000筆,有什麽辦法能讓這1000多筆資料查詢后顯示在同一個dbgrid
pedro
尊榮會員


發表:152
回覆:1187
積分:892
註冊:2002-06-12

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-10-03 08:57:07 IP:210.61.xxx.xxx 未訂閱
不懂? 您在Query裡下SQLText返回的DataSet 不就整個顯示在對應DataSource的DbGrid裡? 還是另有所指?
cashxin2002
版主


發表:231
回覆:2555
積分:1937
註冊:2003-03-28

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-10-03 09:02:25 IP:63.84.xxx.xxx 未訂閱
您好!    在遇及範圍查詢條件的時候, 建議您使用Between...and的子句來做這樣的查詢條件: Select * From Table Where SN Between '1' and '1001' 參考看看! ===================== 努力,相信會獲得美麗! 忻晟
------
忻晟
breeze_1
一般會員


發表:33
回覆:72
積分:21
註冊:2003-05-26

發送簡訊給我
#4 引用回覆 回覆 發表時間:2003-10-03 09:14:37 IP:202.104.xxx.xxx 未訂閱
cashxin2002,您好 但是SN不是連續的,有可能是1,3,5,7.....不能BETWEEN AND
cashxin2002
版主


發表:231
回覆:2555
積分:1937
註冊:2003-03-28

發送簡訊給我
#5 引用回覆 回覆 發表時間:2003-10-03 09:18:44 IP:63.84.xxx.xxx 未訂閱
您好!    不是連續的喔< >, 那它之間有沒有什么規律呢? 不然這樣寫條件真的會很累喔< >, 那您所指的顯示在同一個DBGrid是何意呢? ===================== 努力,相信會獲得美麗! 忻晟
------
忻晟
breeze_1
一般會員


發表:33
回覆:72
積分:21
註冊:2003-05-26

發送簡訊給我
#6 引用回覆 回覆 發表時間:2003-10-03 09:26:40 IP:202.104.xxx.xxx 未訂閱
沒有規律,顯示在同一個DBGRID的意思就是查詢一次就夠了,如果查詢2000筆資料的話,第一次查1000筆,OPEN后顯示在DBGRID,查詢下1000筆,OPEN后,也只會顯示1000筆,上一次的查詢結果就沒了,除非保存下來,能否讓這2000筆資料同時顯示在DNGRID中
cashxin2002
版主


發表:231
回覆:2555
積分:1937
註冊:2003-03-28

發送簡訊給我
#7 引用回覆 回覆 發表時間:2003-10-03 09:39:44 IP:63.84.xxx.xxx 未訂閱
您好!    DBGrid元件似乎沒有這種暫存顯示結果的功能. 小弟的想法是, 您在Select前1000筆資料的時候, 可使用Select * Into NewTable From Table Where SN IN(...)的語法, 將查詢結果建立一個暫存表, 然后查后1000筆資料的時候, 就用Insert Into NewTable Select * From Table Where SN In (...)來追加進NewTable, 最后用Select * From NewTable的方法來顯示所以之前查詢過的資料.    參考看看!    ===================== 努力,相信會獲得美麗! 忻晟 發表人 - cashxin2002 於 2003/10/03 09:50:46
------
忻晟
breeze_1
一般會員


發表:33
回覆:72
積分:21
註冊:2003-05-26

發送簡訊給我
#8 引用回覆 回覆 發表時間:2003-10-03 10:17:34 IP:202.104.xxx.xxx 未訂閱
能否給個詳細的例子
pedro
尊榮會員


發表:152
回覆:1187
積分:892
註冊:2002-06-12

發送簡訊給我
#9 引用回覆 回覆 發表時間:2003-10-03 10:28:37 IP:210.61.xxx.xxx 未訂閱
>能否給個詳細的例子 cashxin2002兄已經講出做法了 就是您可以在用一個Sql 語法在SQL Server上建立一個暫存Table 這個暫存Table就是放進您每次下條件所查詢到的資料 最後再以Query調出整個臨時性的Table的資料 如此就可以在一個DBgrid裡全部顯示出來
cashxin2002
版主


發表:231
回覆:2555
積分:1937
註冊:2003-03-28

發送簡訊給我
#10 引用回覆 回覆 發表時間:2003-10-03 10:34:23 IP:63.84.xxx.xxx 未訂閱
您好!    舉個例子來講, 現在訂單資料表中共有2000筆記錄, 鍵值欄位是編號(字串形態欄位), 其值為'RD0001'到'ORD2000':    第一步的工作是先查詢編號欄位值小于'ORD1001'的所有資料: Select * Into 訂單備份 From 訂單 Where 編號<'ORD1001' //這樣, 就已經查詢出前1000筆資料了, 并存進一個新資料表 //名為訂單備份 第二步工作是要查詢出后1000筆資料: Insert Into 訂單備份 Select * From 訂單 Where 編號>'ORD1000' //這里的Insert Into語法就是將Select查詢結果追加到第一步 //已經建立的訂單備份資料表中, 如果要單獨看到這后1000筆的資料內容 //在完成追加工作后, 用Select語法就可以了, 如下: Select * From 訂單 Where 編號>'ORD1000' 第三步工作是查過剛才所有查詢過的資料: Select * From 訂單備份 附: 訂單備份是一個新增的資料表, 可以用如下的方式進行刪除: Drop Table 訂單備份 參考看看! ===================== 努力,相信會獲得美麗! 忻晟
------
忻晟
breeze_1
一般會員


發表:33
回覆:72
積分:21
註冊:2003-05-26

發送簡訊給我
#11 引用回覆 回覆 發表時間:2003-10-03 10:47:19 IP:202.104.xxx.xxx 未訂閱
cashxin2002 多謝再次解答 這個訂單備份的table 怎麽建立呢
cashxin2002
版主


發表:231
回覆:2555
積分:1937
註冊:2003-03-28

發送簡訊給我
#12 引用回覆 回覆 發表時間:2003-10-03 10:52:58 IP:63.84.xxx.xxx 未訂閱
您好!    在第一步中: Select * Into 訂單備份 From 訂單 Where 編號<'ORD1001' 就已經建立這個資料表了 不過需要注意的事, 如果結合資料集元件(如>> 而不能用<>> 參考看看! <><>===================== 努力,相信會獲得美麗! 忻晟
------
忻晟
breeze_1
一般會員


發表:33
回覆:72
積分:21
註冊:2003-05-26

發送簡訊給我
#13 引用回覆 回覆 發表時間:2003-10-03 11:05:16 IP:202.104.xxx.xxx 未訂閱
執行SQL時出現MISSING KEYWORD的錯誤 需要TABLE元件嗎
cashxin2002
版主


發表:231
回覆:2555
積分:1937
註冊:2003-03-28

發送簡訊給我
#14 引用回覆 回覆 發表時間:2003-10-03 11:10:11 IP:63.84.xxx.xxx 未訂閱
您好!    是否可請貼出您的程式碼, 小弟用此段測試過, 應該沒有問題, SQL指令的使用不會涉及到需要Table元件的嫌疑! 參考看看! <><>===================== 努力,相信會獲得美麗! 忻晟
------
忻晟
breeze_1
一般會員


發表:33
回覆:72
積分:21
註冊:2003-05-26

發送簡訊給我
#15 引用回覆 回覆 發表時間:2003-10-03 13:07:23 IP:202.104.xxx.xxx 未訂閱
 
with radio1_q do begin close; sql.Clear; sqlstr:=' select * into BBB from AAA where serial_number in (' memo1_str ')'; sql.Add(sqlstr); execsql; end; 其中MEMO1_STR 是一字符串 ,如 '1','2','3'... AAA 為一已存在TABLE,BBB不存在
cashxin2002
版主


發表:231
回覆:2555
積分:1937
註冊:2003-03-28

發送簡訊給我
#16 引用回覆 回覆 發表時間:2003-10-03 13:25:04 IP:63.84.xxx.xxx 未訂閱
您好!
begin
  with radio1_q do 
    begin
      close;
      sql.Clear;
      sql.add('select * into BBB from AAA where serial_number in (''' memo1_str ''')');
      sql.Add(sqlstr);
      execsql;
  end;
end;
參考看看! ===================== 努力,相信會獲得美麗! 忻晟
------
忻晟
breeze_1
一般會員


發表:33
回覆:72
積分:21
註冊:2003-05-26

發送簡訊給我
#17 引用回覆 回覆 發表時間:2003-10-03 13:40:29 IP:202.104.xxx.xxx 未訂閱
cashxin2002您好 應該不是引號的問題,在字符串中我已經加了引號,單步調試顯示的sql也是對的 如果直接 'select * from aaa where serial_number in ('memo1_str')' 是可以顯示結果的。 我的是d6 oracle,是否需要特殊的權限,建立的bbb table不需要申明嗎,不需要給出其字段定義嗎
breeze_1
一般會員


發表:33
回覆:72
積分:21
註冊:2003-05-26

發送簡訊給我
#18 引用回覆 回覆 發表時間:2003-10-03 13:41:52 IP:202.104.xxx.xxx 未訂閱
cashxin2002您好 應該不是引號的問題,在字符串中我已經加了引號,單步調試顯示的sql也是對的 如果直接 'select * from aaa where serial_number in ('memo1_str')' 是可以顯示結果的。 我的是d6 oracle,是否需要特殊的權限,建立的bbb table不需要申明嗎,不需要給出其字段定義嗎 如果不行,只有用stringgrid一行一行添加了
cashxin2002
版主


發表:231
回覆:2555
積分:1937
註冊:2003-03-28

發送簡訊給我
#19 引用回覆 回覆 發表時間:2003-10-03 13:51:27 IP:63.84.xxx.xxx 未訂閱
您好!    我想應該不需要設定形態吧, 因為Select Into的語法是直接依据來源資料表的欄位形態來建立新的資料表.    不然, 您就先試一下直接指定條件值的方法看一看是否是語法的問題, 如下:
begin
  with radio1_q do 
    begin
      close;
      sql.Clear;
      sql.add('select * into BBB from AAA where serial_number in ('1','2','3','4')');
      sql.Add(sqlstr);
      execsql;
  end;
end;
如果以上執行沒有問題的話, 那語法就沒有問題, 從memo1_str這個變數的寫法 上去修正. 參考看看! ===================== 努力,相信會獲得美麗! 忻晟
------
忻晟
breeze_1
一般會員


發表:33
回覆:72
積分:21
註冊:2003-05-26

發送簡訊給我
#20 引用回覆 回覆 發表時間:2003-10-03 14:43:05 IP:202.104.xxx.xxx 未訂閱
  with radio1_q do begin
         close;
         sql.Clear;
         sqlstr:=' select *  from aaa where serial_number in (''1'',''2'',''3'')';
         sql.Add(sqlstr);
         open;
      end;
沒有問題
with radio1_q do begin
         close;
         sql.Clear;
         sqlstr:=' select * into bbb from aaa where serial_number in (''1'',''2'',''3'')';
         sql.Add(sqlstr);
         execsql;
      end;
[/code] 就有問題
cashxin2002
版主


發表:231
回覆:2555
積分:1937
註冊:2003-03-28

發送簡訊給我
#21 引用回覆 回覆 發表時間:2003-10-03 15:07:32 IP:63.84.xxx.xxx 未訂閱
您好!    我試了Access和MSSQL, 此語法皆可新增資料表, 也沒有問題, 是否Oracle資料庫形態不支援這句語法.    ===================== 努力,相信會獲得美麗! 忻晟
------
忻晟
timhuang
尊榮會員


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

發送簡訊給我
#22 引用回覆 回覆 發表時間:2003-10-03 17:58:20 IP:61.220.xxx.xxx 未訂閱
引言: SELECT * FROM TABEL WHERE SN IN ('1','2','3',.....'1001') 這樣就會提示超過1000筆,有什麽辦法能讓這1000多筆資料查詢后顯示在同一個dbgrid
hi, 多於 1000 筆時, 又沒有規律的話, 可以採用 union 的方式, 如: select * from tael where sn in ('1','2',...'1000') union select * from tael where sn in ('1001','1002',....) 試試看!
breeze_1
一般會員


發表:33
回覆:72
積分:21
註冊:2003-05-26

發送簡訊給我
#23 引用回覆 回覆 發表時間:2003-10-04 10:14:46 IP:202.104.xxx.xxx 未訂閱
多謝timhuang兄 果然能行,也多謝cashxin2002兄的耐心解答.
系統時間:2024-11-23 2:58:10
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!