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

Select 進來的筆數,第一個欄位自動給編號+1

尚未結案
eric039
中階會員


發表:57
回覆:126
積分:51
註冊:2002-11-30

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-09-25 15:58:18 IP:211.75.xxx.xxx 未訂閱
請問 我要從資料表Select 資料 第一個欄位要排序,從1-2-3-4-5-.....,要如何下命令 麻煩各位 Eric Lin
------
Eric Lin
pedro
尊榮會員


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

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-09-25 17:16:40 IP:210.61.xxx.xxx 未訂閱
select f1 1,f2,f3 from tablex order by f1 發表人 - pedro 於 2003/09/25 17:22:01
hahalin
版主


發表:295
回覆:1698
積分:823
註冊:2002-04-14

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-09-25 17:17:14 IP:211.76.xxx.xxx 未訂閱
select fieldname1,fieldname2... from tablename order by fieldname1 回覆後修改:抱歉,回覆後發現已經有回應了... 發表人 - hahalin 於 2003/09/25 17:18:59
cashxin2002
版主


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

發送簡訊給我
#4 引用回覆 回覆 發表時間:2003-09-26 00:31:23 IP:63.84.xxx.xxx 未訂閱
您好!    小弟覺得您的意思是資料表中并無這個編號的欄位(就是您所說的第一欄位), 而是想手動建立, 并按+1的順序來排列, 不知對与否, 若有錯誤, 懇請指正, 若是如此, 請參考如下:    
在Form的OnCreate事件中, 寫入如下程式碼:
procedure TForm1.FormCreate(Sender: TObject);
Var
  I : Integer;
begin
  ADOQuery1.Close;
  ADOQuery1.SQL.Clear;
  ADOQuery1.SQL.Add('Alter Table 訂單 Add 編號 Integer');
  ADOQuery1.ExecSQL;
  ADOQuery1.Close;
  ADOQuery1.SQL.Clear;
  ADOQuery1.SQL.Add('Select * From 客戶');
  ADOQuery1.Open;
  ADOQuery1.First;
  I := 0;
  While not ADOQuery1.Eof do
    begin
      I := I 1;
      ADOQuery1.Edit;
      ADOQuery1.FieldByName('編號').AsInteger := I;
      ADOQuery1.Post;
      ADOQuery1.Next;
    end;
  ADOQuery1.Close;
  ADOQuery1.SQL.Clear;
  ADOQuery1.SQL.Add('Select 客戶編號,客戶名稱,地區,地址,電話,日期 From 客戶');
  ADOQuery1.Open;
end;    最后記得要刪除此新增的欄位, 在Form的OnClose事件中寫入如下程式碼: 
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  ADOQuery1.Close;
  ADOQuery1.SQL.Clear;
  ADOQuery1.SQL.Add('Alter Table 訂單 Drop 編號');
  ADOQuery1.ExecSQL;
  ADOQuery1.Close;
end;
參考看看! ===================== 努力,相信會獲得美麗! 忻晟
------
忻晟
hahalin
版主


發表:295
回覆:1698
積分:823
註冊:2002-04-14

發送簡訊給我
#5 引用回覆 回覆 發表時間:2003-09-26 08:38:37 IP:210.243.xxx.xxx 未訂閱
抬個槓,假設這個頁面同時間會有一位以上的使用者來操作,那可能就不適用了唷
william
版主


發表:66
回覆:2535
積分:3048
註冊:2002-07-11

發送簡訊給我
#6 引用回覆 回覆 發表時間:2003-09-26 09:09:40 IP:147.8.xxx.xxx 未訂閱
Subject: 
引言:【問題】Select 進來的筆數,第一個欄位自動給編號 1
Question:
引言:請問 我要從資料表Select 資料 第一個欄位要排序,從1-2-3-4-5-.....,要如何下命令
Mickey
版主


發表:77
回覆:1882
積分:1390
註冊:2002-12-11

發送簡訊給我
#7 引用回覆 回覆 發表時間:2003-09-26 15:45:59 IP:218.163.xxx.xxx 未訂閱
eric039 你好 : 可否請你說明清楚一些, 免的大家一頭霧水... 另外請說明是何種資料庫?
bruce0211
版主


發表:157
回覆:668
積分:279
註冊:2002-06-13

發送簡訊給我
#8 引用回覆 回覆 發表時間:2003-09-26 17:14:49 IP:211.21.xxx.xxx 未訂閱
如果您的意思是:無論 select 條件如何,秀出的第一筆資料序號一定是001,第二筆序號一定是002(為了畫面上的美觀) 可以替 Query 產生一個臨時的欄位, 不過最好不要去動到資料庫(在資料庫中產生臨時用的欄位), 因為 1.資料權限及安全的問題,user 應沒資格去修改資料結構 2.網路多人存取同一資料庫會錯亂    我的方法為 1.替 Query 產生一臨時用的欄位,在Delphi 中 Query1 按滑鼠右鍵 "Fields Editor",新增一個名叫 No 的 Calculated 欄位  2.在程式中宣告一個公用變數 i 3.在 Query 的 OnCalculated 事件中寫道
void __fastcall TForm1::Query1CalcFields(TDataSet *DataSet)
{
  i=i 1;
  Query1->FieldByName("no")->AsInteger=i;
} 
eric039
中階會員


發表:57
回覆:126
積分:51
註冊:2002-11-30

發送簡訊給我
#9 引用回覆 回覆 發表時間:2003-09-26 17:16:05 IP:211.75.xxx.xxx 未訂閱
不好意思給大家添麻煩了。 是這樣的 我有一個 Table (M$ SQL 2000) 假設有 Name, Tel, Address 在 Form 內我要放一個 DBGrid ,AdoQuery, DataSource adoQuery 直接取 Table 的資料。 可是要如何下 SQL 語法才能的達到類似以下的效果 id name tel address --------------------------------------------- 1 Eric 036512452 ajsf;ljldj;ljldsjfd;l 2 Apple 054875632 12346546546465465646 3 ................. 4 ................. 5 .................... 6 ..................... 7 .................... . .................... . ....................... . ........................ 也就是 Table 內原本沒有一個連續的編號欄位 我要 Select 過來後自動加上,並且逐筆自動加 1 真的麻煩大家了。 Eric Lin
------
Eric Lin
bruce0211
版主


發表:157
回覆:668
積分:279
註冊:2002-06-13

發送簡訊給我
#10 引用回覆 回覆 發表時間:2003-09-26 17:29:01 IP:211.21.xxx.xxx 未訂閱
Oracle 的 SQL 語法有個叫 ROWNUM 的函數,用來產生虛擬欄位 (MSSQL 應有類似的東西) Oracle SQL 的寫法如下 SELECT ROWNUM , t.Name, t.Tel, t.Address FROM YOUR_TABLE t
cashxin2002
版主


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

發送簡訊給我
#11 引用回覆 回覆 發表時間:2003-09-27 09:36:46 IP:63.84.xxx.xxx 未訂閱
您好﹗    如果沒有涉及到多人存取動作的話﹐小弟以上的寫法可行﹐只是說如果SQL有諸如bruce0221前輩所說的賦予自動編號的SQL函數﹐當然是最好的方法﹒    參考看看﹗    ===================== 努力,相信會獲得美麗! 忻晟
------
忻晟
wuabc
初階會員


發表:6
回覆:60
積分:33
註冊:2002-10-28

發送簡訊給我
#12 引用回覆 回覆 發表時間:2003-09-27 10:24:47 IP:203.204.xxx.xxx 未訂閱
引言: Oracle 的 SQL 語法有個叫 ROWNUM 的函數,用來產生虛擬欄位 (MSSQL 應有類似的東西) Oracle SQL 的寫法如下 SELECT ROWNUM , t.Name, t.Tel, t.Address FROM YOUR_TABLE t
MSSQL一個折衷的辦法:    SELECT RowNum = IDENTITY(int,1,1), Name, Tel, Address
INTO #temp
FROM YOUR_TABLE    SELECT * FROM #temp
DROP TABLE #temp 
不過個人認為bruce版主前一篇的做法較好,只是新加的序號欄位不要 用fkCalculated,改用fkInternalCalc,當然就不能在OnCalcField事件 填入,改在AfterOpen自己用while..do填入序號
eric039
中階會員


發表:57
回覆:126
積分:51
註冊:2002-11-30

發送簡訊給我
#13 引用回覆 回覆 發表時間:2003-09-27 18:19:44 IP:140.111.xxx.xxx 未訂閱
感謝大家的鼎力相助 SQL Server 裡面的函數我有找過,好像不太好處理 我會用 bruce0211 跟 wuabc 的綜合來做 謝謝!! Eric Lin
------
Eric Lin
系統時間:2024-05-18 4:51:30
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!