Select 進來的筆數,第一個欄位自動給編號+1 |
尚未結案
|
eric039
中階會員 ![]() ![]() ![]() 發表:57 回覆:126 積分:51 註冊:2002-11-30 發送簡訊給我 |
|
pedro
尊榮會員 ![]() ![]() ![]() ![]() ![]() ![]() 發表:152 回覆:1187 積分:892 註冊:2002-06-12 發送簡訊給我 |
|
hahalin
版主 ![]() ![]() ![]() ![]() ![]() ![]() 發表:295 回覆:1698 積分:823 註冊:2002-04-14 發送簡訊給我 |
|
cashxin2002
版主 ![]() ![]() ![]() ![]() ![]() ![]() 發表:231 回覆:2555 積分:1937 註冊:2003-03-28 發送簡訊給我 |
您好! 小弟覺得您的意思是資料表中并無這個編號的欄位(就是您所說的第一欄位), 而是想手動建立, 并按+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 發送簡訊給我 |
|
william
版主 ![]() ![]() ![]() ![]() ![]() 發表:66 回覆:2535 積分:3048 註冊:2002-07-11 發送簡訊給我 |
|
Mickey
版主 ![]() ![]() ![]() ![]() ![]() 發表:77 回覆:1882 積分:1390 註冊:2002-12-11 發送簡訊給我 |
|
bruce0211
版主 ![]() ![]() ![]() ![]() ![]() 發表:157 回覆:668 積分:279 註冊:2002-06-13 發送簡訊給我 |
如果您的意思是:無論 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 發送簡訊給我 |
不好意思給大家添麻煩了。
是這樣的 我有一個 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 發送簡訊給我 |
|
cashxin2002
版主 ![]() ![]() ![]() ![]() ![]() ![]() 發表:231 回覆:2555 積分:1937 註冊:2003-03-28 發送簡訊給我 |
|
wuabc
初階會員 ![]() ![]() 發表:6 回覆:60 積分:33 註冊:2002-10-28 發送簡訊給我 |
引言: 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 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |