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

用一個ADOCommand.Execute完成新增一條記錄 + 自訂自動編號

 
sryang
尊榮會員


發表:39
回覆:762
積分:920
註冊:2002-06-27

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-03-11 21:12:10 IP:211.20.xxx.xxx 未訂閱
先聲明:以下僅適用於 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

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-04-11 17:25:04 IP:211.20.xxx.xxx 未訂閱
首先感謝SRYANG大大提供上述方式做流水碼的新增,也解決小弟近日來的煩惱 但是上述的方法是否可以放在SQL SERVER中讓SERVER自己去新增建立,而非由程式上面去控制以避免掉程式上面的負擔,如果可以放在SERVER上面的話,還煩請大大不吝指導該放在哪個功能或是事件中。 商祈 Derek 馬桶
sryang
尊榮會員


發表:39
回覆:762
積分:920
註冊:2002-06-27

發送簡訊給我
#3 引用回覆 回覆 發表時間:2005-04-17 00:53:04 IP:219.81.xxx.xxx 未訂閱
引言: 首先感謝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

發送簡訊給我
#4 引用回覆 回覆 發表時間:2005-04-18 11:01:33 IP:210.64.xxx.xxx 未訂閱
SRYANG,您提供的方式引起我的興趣,雖然文章開頭就標明限定SQL Server,但小弟依然愚蠢的想請教您,跟SQL Server係出同源的ACCESS是否也可以使用嗎?
sryang
尊榮會員


發表:39
回覆:762
積分:920
註冊:2002-06-27

發送簡訊給我
#5 引用回覆 回覆 發表時間:2005-04-18 14:54:26 IP:211.20.xxx.xxx 未訂閱
引言: 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

發送簡訊給我
#6 引用回覆 回覆 發表時間:2005-05-11 12:22:44 IP:202.175.xxx.xxx 未訂閱
請問DBE能否用呢...
sryang
尊榮會員


發表:39
回覆:762
積分:920
註冊:2002-06-27

發送簡訊給我
#7 引用回覆 回覆 發表時間:2005-05-11 13:28:31 IP:211.21.xxx.xxx 未訂閱
引言: 請問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

發送簡訊給我
#8 引用回覆 回覆 發表時間:2005-05-11 14:06:16 IP:202.175.xxx.xxx 未訂閱
sryang不好意思..是我的错..害你多測試了 我要的是BDE不是DBE... 再次說聲對不起
sryang
尊榮會員


發表:39
回覆:762
積分:920
註冊:2002-06-27

發送簡訊給我
#9 引用回覆 回覆 發表時間:2005-05-11 18:17:39 IP:211.21.xxx.xxx 未訂閱
引言: 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/
系統時間:2024-06-28 2:12:33
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!