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

SQL新增的語法~

答題得分者是:Chance36
depblue
一般會員


發表:38
回覆:29
積分:13
註冊:2004-12-27

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-03-09 11:17:59 IP:211.22.xxx.xxx 未訂閱
我問題是: 如何從原本Select的資料中在加入其他資料? acelutf資料表 (MS SQL) ORDNO REL_01 1 QQ 2 PP 3 LL 4 KK 5 II 6 HH 7 YY 8 RR 9 TT 10 DD 11 WW 12 EE 13 SS 14 RR 15 FF ........... with elutfQu do begin Close; SQL.Clear; SQL.Add('Select * from acelutf where ordno >= :p_ordno1 and ordno <= :p_ordno2'); Parameters.ParamByName('p_ordno1').Value := '1'; Parameters.ParamByName('p_ordno2').Value := '10'; Open; end; 以上是把1-10的SELECT出來 如果我要把1-10的資料保留 並再加上 ORDNO = 13 的資料 (資料都顯示在同一個TDBGrid 並且1-10的資料已經修改過 我採用全部修改完,在一起更新到資料庫 ) 我之前用UNION把兩個SELECT並在一起 (Select * from acelutf where ordno >= '1' and ordno <= '10' UNION select * from acelutf where ordno = '13') 可是這並不是我要的結果並且之前修改的資料都會變成原本的資料 請問要如何下手? ?
pillar62
資深會員


發表:9
回覆:324
積分:271
註冊:2002-04-15

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-03-09 11:38:29 IP:210.64.xxx.xxx 未訂閱
你好 如果只是要顯示!可以試試看用另外一個暫存用的query,將原來的資料和新的資料一起寫到暫存用的query裡面,然後再用來顯示,這樣應該就可以!!query搭配updatesql和屬性cachedupdate設定成true,以及條件裡面加入where 1=0就可以做一個暫存用的query,資料庫裡面不用新增暫存用的表格喔!!試試看吧!! Pillar Wang
------
Pillar Wang
depblue
一般會員


發表:38
回覆:29
積分:13
註冊:2004-12-27

發送簡訊給我
#3 引用回覆 回覆 發表時間:2005-03-09 12:02:25 IP:211.22.xxx.xxx 未訂閱
引言: 你好 如果只是要顯示!可以試試看用另外一個暫存用的query,將原來的資料和新的資料一起寫到暫存用的query裡面,然後再用來顯示,這樣應該就可以!!query搭配updatesql和屬性cachedupdate設定成true,以及條件裡面加入where 1=0就可以做一個暫存用的query,資料庫裡面不用新增暫存用的表格喔!!試試看吧!! Pillar Wang
恩...我是要把顯示的資料可以修改 並且除了最初select的資料之外還要從資料庫中select另外符合條件的資料 所以TDBGrids中顯示的資料是 最初select的資料 最新select的資料
cashxin2002
版主


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

發送簡訊給我
#4 引用回覆 回覆 發表時間:2005-03-09 12:06:48 IP:202.62.xxx.xxx 未訂閱
您好﹗    試試改成如下﹕ Select * from acelutf where ordno >= '1' and ordno <= '10'  or ordno = '13'    ================================= 有空來瞅瞅我﹗因為我是您的朋友﹐有您真好﹗ ================================
------
忻晟
depblue
一般會員


發表:38
回覆:29
積分:13
註冊:2004-12-27

發送簡訊給我
#5 引用回覆 回覆 發表時間:2005-03-09 12:36:56 IP:211.22.xxx.xxx 未訂閱
引言: 您好﹗ 試試改成如下﹕ Select * from acelutf where ordno >= '1' and ordno <= '10' or ordno = '13' ================================= 有空來瞅瞅我﹗因為我是您的朋友﹐有您真好﹗ ================================
如果改成上面的語法 我之前(ordno = 1~10)修改的資料就會不見 因為ordno = 1~10是最初select的資料 我設一個新增按鈕 讓ordno = 13這筆資料顯示在同一個TDBGrids裡 (現在TDBGrid有ordno= 1~10(已經修改過) 和 ordno = 13的資料)
cashxin2002
版主


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

發送簡訊給我
#6 引用回覆 回覆 發表時間:2005-03-09 12:46:09 IP:202.62.xxx.xxx 未訂閱
您好﹗    小弟的意思是既然1-10筆和13筆資料都是需要更新回資料庫的﹐那為何不在開始的時候就使用所述的SQL一起查詢出來呢﹖還是您有其它的需求﹖    ================================= 有空來瞅瞅我﹗因為我是您的朋友﹐有您真好﹗ ================================
------
忻晟
depblue
一般會員


發表:38
回覆:29
積分:13
註冊:2004-12-27

發送簡訊給我
#7 引用回覆 回覆 發表時間:2005-03-09 13:06:47 IP:211.22.xxx.xxx 未訂閱
引言: 您好﹗ 小弟的意思是既然1-10筆和13筆資料都是需要更新回資料庫的﹐那為何不在開始的時候就使用所述的SQL一起查詢出來呢﹖還是您有其它的需求﹖ ================================= 有空來瞅瞅我﹗因為我是您的朋友﹐有您真好﹗ ================================
因為一開始我只要求1-10筆的資料修改 再1-10筆還沒更新回資料庫之前 又select出第13筆資料 等到1-10筆和13筆修完在更新回資料庫
cashxin2002
版主


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

發送簡訊給我
#8 引用回覆 回覆 發表時間:2005-03-09 14:25:49 IP:202.62.xxx.xxx 未訂閱
您好﹗    呵呵﹐實在是不太清楚您此需要的目的為何﹖ 小弟有如下的想法﹐供您參考﹐說明﹕
Step1.先將資料表acelutf中1~10的資料錄擷取到一個新的資料表中
begin
  elutfQu.Close;
  elutfQu.SQL.Clear;
  elutfQu.SQL.Add('Select * Into TableTemp1 From acelutf Where ');
  elutfQu.SQL.Add('ordno Between '1' and '10');
  elutfQu.ExecSQL;
  elutfQu.SQL.Text := 'Select * From TableTemp1';
  elutfQu.Open;
end;
//至此步驟﹐已將資料表中1~10的資料錄新增到一個新的資料表TableTemp1中
//而后即可對此TableTemp1中的資料錄進行異動    Step2.對TableTemp1中的資料錄異動完成后﹐再將原資料表中的RecNo.13的資料錄﹐新增到TableTemp1中
begin
  elutfQu.Close;
  elutfQu.SQL.Clear;
  elutfQu.SQL.Add('Insert Into TableTemp1 From acelutf Where ');
  elutfQu.SQL.Add('ordno = ''13'');
  elutfQu.ExecSQL;
  elutfQu.SQL.Text := 'Select * From TableTemp1';
end;
//到此步驟﹐即已在TableTemp1資料表中新增了RecNo=13的資料錄    Step3.將資料表TableTemp1中的所有資料錄更新到acelutf資料表中
begin
  elutfQu.Close;
  elutfQu.SQL.Clear;
  elutfQu.SQL.Add('Update acelutf, TableTemp1 Set ');
  elutfQu.SQL.Add('acelutf.REL_01 = TableTemp1.REL_01 ');
  elutfQu.SQL.Add('Where acelutf.ORDNO = TableTemp1.ORDNO');
  elutfQu.ExecSQL;
end;    Step4.將資料表TableTemp1刪除
begin
  elutfQu.Close;
  elutfQu.SQL.Clear;
  elutfQu.SQL.Add('Drop Table TableTemp1');
  elutfQu.ExecSQL;
end;
================================= 有空來瞅瞅我﹗因為我是您的朋友﹐有您真好﹗ ================================
------
忻晟
depblue
一般會員


發表:38
回覆:29
積分:13
註冊:2004-12-27

發送簡訊給我
#9 引用回覆 回覆 發表時間:2005-03-09 23:56:22 IP:59.114.xxx.xxx 未訂閱
對不起,我問題敘述的不清楚,請見諒!    我想表達的是 我設計兩各畫面 第一各畫面:是select出符合條件的資料(A)    第二各畫面:是顯示出上面所符合條件到TDBGrids中 並進行修改 並設計一各新增按鈕,新增一筆資料(B)到TDBGrids裡 所以現在TDBGrids裡面共有 修改後的A+B 資料 全部修改完後,在一起批次更新到資料庫裡   (TDBGrids -> acelutfQu)    如果使用 select * from acelutf where ordno>='1' and ordno <= '10' or ordno = '13' 因為我採用的是批次更新,所以新增一筆資料的話 上面的結果就只是顯示資料庫裡面的資料 我之前修改過後的A資料就不存在    我現在的做法是 按 新增 按鈕後,會把我要新增的那筆從資料庫刪除, 而刪除的資料那筆資料在重新計算之後,在Append到acelutf裡 delete acelutf where ordno='13'    acelutfQu.Append; acelutfQuordno.Value := 13 acelutfQurel_o1.Value := m_qty;    大約是上述的語法,會呈現我所要的畫面, 不過有沒有更方便、更聰明的方法, 不用刪除後新增,便可達到我所要的畫面??              不知我的敘述是否可以明確表達我的意思
pillar62
資深會員


發表:9
回覆:324
積分:271
註冊:2002-04-15

發送簡訊給我
#10 引用回覆 回覆 發表時間:2005-03-23 12:01:55 IP:210.64.xxx.xxx 未訂閱
你好 我的建議是,跟我之前寫的處理方式一樣,先全部丟到暫存中,然後新增的時候也是針對暫存去作處理!新增修改刪除都可以,只要在全部處理完成之後,下QUERY.APPLYUPDATES;QUERY.COMMITUPDATES這樣就會將資料異動到資料庫中!!試試看吧!! Pillar Wang
------
Pillar Wang
Chance36
版主


發表:31
回覆:1033
積分:792
註冊:2002-12-31

發送簡訊給我
#11 引用回覆 回覆 發表時間:2005-03-24 03:10:35 IP:203.204.xxx.xxx 未訂閱
depblue 你好    個人覺得你這個需求使用midas技術最適合不過了    用一個TClientDataSet(搭配TDataSet及TDataSetProvider元件)取得第一個查詢資料,再用另一個TClientDataSet取得另一個查詢資料,並將它合併到第一個TCLientDataSet中(可無限次數的查詢併入動作),經過修改後,然後一起更新回資料庫。    你要的是這個嗎?    _______________________________________ 深藍的魚,祝您好運..........連連
系統時間:2024-06-24 19:57:11
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!