用一個ADOCommand.Execute完成新增一條記錄 + 自訂自動編號 |
|
sryang
尊榮會員 發表:39 回覆:762 積分:920 註冊:2002-06-27 發送簡訊給我 |
先聲明:以下僅適用於 SQL Server,其他 DB 不適用 假設 ORDERS 這個 table 中只有以下欄位
ORDER_ID char(12) 訂單編號,自動編號 YYYYMMDD9999
CUST_ID char(10) 客戶編號 SQL 下法:
--宣告變數 DECLARE @NEXT INT DECLARE @ORDER_ID CHAR(12) DECLARE @DATE CHAR(8) --取得日期字串 SET @DATE = CONVERT(CHAR(8), GETDATE(), 112) --取得目前最大編號 SELECT @NEXT = CONVERT(INT, RIGHT(MAX(ORDER_ID), 4)) FROM ORDERS WHERE ORDER_ID LIKE @DATE+'%' --如沒有最大編號,則令為 1,否則加 1 SET @NEXT = CASE WHEN @NEXT IS NULL THEN 1 ELSE @NEXT+1 END --組合成要 insert 進去的值 SET @ORDER_ID = @DATE+RIGHT('0000'+RTRIM(CONVERT(CHAR, @NEXT)), 4) --INSERT 啦 INSERT INTO ORDERS (ORDER_ID, CUST_ID) VALUES (@ORDER_ID, :CUST_ID)以上 SQL 全部貼到 ADOCommand.CommandText 中,只要一個 ADOCommand.Execute 就可以完成自動編號+新增一條記錄(+號要改成半形) 加油喔,喵~
------
歡迎參訪 "腦殘賤貓的備忘錄" http://maolaoda.blogspot.com/ |
Derek馬桶
一般會員 發表:14 回覆:11 積分:5 註冊:2003-02-08 發送簡訊給我 |
|
sryang
尊榮會員 發表:39 回覆:762 積分:920 註冊:2002-06-27 發送簡訊給我 |
引言: 首先感謝SRYANG大大提供上述方式做流水碼的新增,也解決小弟近日來的煩惱 但是上述的方法是否可以放在SQL SERVER中讓SERVER自己去新增建立,而非由程式上面去控制以避免掉程式上面的負擔,如果可以放在SERVER上面的話,還煩請大大不吝指導該放在哪個功能或是事件中。 商祈 Derek 馬桶當然可以啦,建立一個 Stored Procedure 就行了 請參考 SQL Server 線上叢書關於「預儲程序」部分的說明 然後使用 ADOCommand 來執行這個 Stored Proceuder 加油喔,喵~
------
歡迎參訪 "腦殘賤貓的備忘錄" http://maolaoda.blogspot.com/ |
NO.5
初階會員 發表:18 回覆:35 積分:25 註冊:2005-02-23 發送簡訊給我 |
|
sryang
尊榮會員 發表:39 回覆:762 積分:920 註冊:2002-06-27 發送簡訊給我 |
引言: SRYANG,您提供的方式引起我的興趣,雖然文章開頭就標明限定SQL Server,但小弟依然愚蠢的想請教您,跟SQL Server係出同源的ACCESS是否也可以使用嗎?很抱歉,Access (應該說是 Jet SQL,因為使用 Jet Engine 去連接 .MDB 資料庫) 沒辦法用 BTW, Access 跟 SQL Server 並不是系出同源的 Access 使用的 SQL,預測值是 SQL 89, SQL Server 使用的 SQL,預測值是 SQL 92, 兩者的關鍵字、萬用字元有些不同,例如使用 LIKE 做查詢時,SQL 89 的萬用字元是 *,而 SQL 92 的萬用字元是 % 再者,本文中使用的,還包括 SQL Server 的 T-SQL 裡面的變數宣告與運算,Jet SQL 是沒辦法支援的 加油喔,喵~
------
歡迎參訪 "腦殘賤貓的備忘錄" http://maolaoda.blogspot.com/ |
figo
初階會員 發表:47 回覆:70 積分:28 註冊:2004-12-18 發送簡訊給我 |
|
sryang
尊榮會員 發表:39 回覆:762 積分:920 註冊:2002-06-27 發送簡訊給我 |
引言: 請問DBE能否用呢...如果以 DBExpress 連接 SQL Server 的話,新增一條記錄和自訂自動編號 是可以完成的,不過沒辦法在同一個動作之內取得自動編號的值 如果用 SQLDataSet.Open 的話,會返回 Cursor not returned from Query 的錯誤,但記錄還是會新增的 用 SQLDataSet.ExecSQL 的話,SELECT @ORDER_ID AS NEW_ORDER_ID 這一行沒有作用 個人對於 DBExpress 不太熟,初步試出來的結果是這樣,不知其他高手能否解決? 加油喔,喵~
------
歡迎參訪 "腦殘賤貓的備忘錄" http://maolaoda.blogspot.com/ |
figo
初階會員 發表:47 回覆:70 積分:28 註冊:2004-12-18 發送簡訊給我 |
|
sryang
尊榮會員 發表:39 回覆:762 積分:920 註冊:2002-06-27 發送簡訊給我 |
引言: sryang不好意思..是我的错..害你多測試了 我要的是BDE不是DBE... 再次說聲對不起沒有關係,人難免忙中有錯 用 BDE 的話,跟使用 DBExpress 的狀況相同。 用 TQuery.Open 的話,會出現 Error Create Cursor Handle 的錯誤訊息,但是記錄還是會新增的 用 TQuery.ExecSQL 的話,SELECT @ORDER_ID AS NEW_ORDER_ID 這一行沒有作用 但是,假如將這一組 SQL 敘述建立成一個 Stored Procedure 的話,用 TStoredProc.Open 之後,就可以用 TStoredProc.FieldByName('NEW_ORDER_ID').AsString 取得剛才自動編號的值了 加油喔,喵~
------
歡迎參訪 "腦殘賤貓的備忘錄" http://maolaoda.blogspot.com/ |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |