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

想問幾個ADO相關的問題

尚未結案
jiing
一般會員


發表:1
回覆:0
積分:0
註冊:2002-06-16

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-12-24 10:48:09 IP:211.74.xxx.xxx 未訂閱
想請教幾個問題 1. 請問ADODataSet SQL 查詢完後的資料,如果要再被SQL查詢,how 例如:    strSQL:='select A from LOG where A>10 ';    ADODataSet1.Close;    ADODataSet1.CommandText := strSQL;    ADODataSet1.Open;    這樣子 ADODataSet1內是查詢後的結果資料集    現在想再次查詢ADODataSet1,該怎麼做?       概念上是 strSQL := 'select A from ADODataSet1 where A>15';    還是要用別的元件    我目前是用strSQL:='select A from (select * from LOG where A>10) where A>15';    來做    想問的是:"可以查詢已經執行過查詢的資料集ADODataSet 嗎?,還是要用到別的元件?"     謝謝! =============================================================================    另外,如果我想要將資料表內某一欄的資料分類    用了SQL陳述式取出了一些資料,想放在一個新的資料表中的第一欄,和第二欄    我先試用select A into new_table from LOG where A>10; 來開新資料表          不過似乎不行,好像是我的資料庫不給我寫入    請問       這該怎麼做?    謝謝! ============================================================================    另外, 我想要放二個查詢出來的資料欄(但其數目不同) 到一張資料表裡,該怎麼做呢?    例如:         有一個是 select A, TIME from LOG where A>10;         另一個是 select B, TIME from LOG where B<3; A 有十筆, B只有一筆 但我想把A和B放在同一個資料表中,並比較其TIME來產生第三欄 這又該怎麼做呢? 謝謝!
cashxin2002
版主


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

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-12-24 11:39:41 IP:202.62.xxx.xxx 未訂閱
1. 請問ADODataSet SQL 查詢完後的資料,如果要再被SQL查詢,how 例如:    strSQL:='select A from LOG where A>10 ';    ADODataSet1.Close;    ADODataSet1.CommandText := strSQL;    ADODataSet1.Open;    這樣子 ADODataSet1內是查詢後的結果資料集    現在想再次查詢ADODataSet1,該怎麼做?
//同樣的﹐先賦字串值給strSQL變數﹐然后再指定給ADODataSet資料集元件﹐再做Open動作即可﹕
   strSQL:='...........';
   ADODataSet1.Close;
   ADODataSet1.CommandText := strSQL;
   ADODataSet1.Open;
概念上是 strSQL := 'select A from ADODataSet1 where A>15'; 還是要用別的元件 我目前是用strSQL:='select A from (select * from LOG where A>10) where A>15'; 來做 想問的是:"可以查詢已經執行過查詢的資料集ADODataSet 嗎?,還是要用到別的元件?" 謝謝!
//此語法為子查詢語法﹐可以使用﹐也不需要用到別的元件
============================================================================= 另外,如果我想要將資料表內某一欄的資料分類 用了SQL陳述式取出了一些資料,想放在一個新的資料表中的第一欄,和第二欄 我先試用select A into new_table from LOG where A>10; 來開新資料表 不過似乎不行,好像是我的資料庫不給我寫入 請問 這該怎麼做? 謝謝!
//ADODataSet元件不支援無資料回傳的SQL語法﹐諸如Insert, Delete, Update等等﹐你試用的SQL語句亦是無資料回傳的SQL語法﹐故無法寫入﹐你可換用ADOQuery元件或ADOCommand元件來處理﹐如下﹕
begin
  ADOQuery1.Close;
  ADOQuery1.SQL.Clear;
  ADOQuery1.SQL.Add('select A into new_table from LOG where A>10');
  ADOQuery1.ExecSQL;
end;
注意﹕使用無資料回傳的SQL語法時﹐需要使用資料集元件的ExecSQL方法﹐而不是Open方法
============================================================================ 另外, 我想要放二個查詢出來的資料欄(但其數目不同) 到一張資料表裡,該怎麼做呢? 例如: 有一個是 select A, TIME from LOG where A>10; 另一個是 select B, TIME from LOG where B<3; A 有十筆, B只有一筆 但我想把A和B放在同一個資料表中,並比較其TIME來產生第三欄 這又該怎麼做呢? 謝謝!
試試看如下的方法﹕
begin
  ADOQuery1.Close;
  ADOQuery1.SQL.Clear;
  ADOQuery1.SQL.Add('Select A, '' As B, Time From LOG Where A>10 ');
  ADOQuery1.SQL.Add('Union Select '' As A, B, Time From LOG ');
  ADOQuery1.SQL.Add('Where B<3');
end;
================================= 有空來瞅瞅我﹗因為我是您的朋友﹐有您真好﹗ ================================
------
忻晟
kenspc
一般會員


發表:1
回覆:20
積分:4
註冊:2004-12-09

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-12-24 14:37:37 IP:61.6.xxx.xxx 未訂閱
引言: 1. 請問ADODataSet SQL 查詢完後的資料,如果要再被SQL查詢,how 例如: strSQL:='select A from LOG where A>10 '; ADODataSet1.Close; ADODataSet1.CommandText := strSQL; ADODataSet1.Open; 這樣子 ADODataSet1內是查詢後的結果資料集 現在想再次查詢ADODataSet1,該怎麼做? 概念上是 strSQL := 'select A from ADODataSet1 where A>15'; 還是要用別的元件 我目前是用strSQL:='select A from (select * from LOG where A>10) where A>15'; 來做 想問的是:"可以查詢已經執行過查詢的資料集ADODataSet 嗎?,還是要用到別的元件?"
設: 第一個QUERY名為 QUERY A 'select A from ADODataSet1 where A>10' 設: 第二個QUERY名為 QUERY B 'select A from ADODataSet1 where A>15' 如果你的目的是想在QUERY A 里找出 (A > 15) 的資料, 那我的建議有兩個: A. 使用FILTER, 例如: ADODataSet1.Filter := 'A >15'; ADODataSet1.Filtered; B. 使用子查詢語法(subquery), 不過先決條件是你的database是否支持, 例如: ADODataSet1.Close; ADODataSet1.CommandText := 'select A from (select * from LOG where A>10) where A>15'; ADODataSet1.Open; (此時QUERY B就是subquery, 子查詢??-怪怪的中文名稱) (注mysql, ms sql等大型database一定有支持, 其它的就不一定了)
引言: 另外,如果我想要將資料表內某一欄的資料分類 用了SQL陳述式取出了一些資料,想放在一個新的資料表中的第一欄,和第二欄 我先試用select A into new_table from LOG where A>10; 來開新資料表 不過似乎不行,好像是我的資料庫不給我寫入 請問
就誠如cashxin2002所說的, 需要使用資料集元件的ExecSQL方法﹐而不是Open方法 不過, 一樣的先決條件是select ... into 是否有被你的database支持.
引言: 另外, 我想要放二個查詢出來的資料欄(但其數目不同) 到一張資料表裡,該怎麼做呢? 例如: 有一個是 select A, TIME from LOG where A>10; 另一個是 select B, TIME from LOG where B<3; A 有十筆, B只有一筆 但我想把A和B放在同一個資料表中,並比較其TIME來產生第三欄 這又該怎麼做呢?
就照著cashxin2002所說的去試試吧, 嘻嘻
kenspc
一般會員


發表:1
回覆:20
積分:4
註冊:2004-12-09

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-12-24 14:39:56 IP:61.6.xxx.xxx 未訂閱
補充: ADODataSet1.Close; ADODataSet1.CommandText := 'select A from (select * from LOG where A>10) where A>15'; ADODataSet1.Open; (此時QUERY A就是subquery 不是QUERY B, 打錯了)
系統時間:2024-06-26 6:44:13
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!