Date: Wed, 22 Mar 2006 09:52:36 +0900
From: "Kohichiroh Ohta" <who@example.co.jp>
いつもお世話になっております。太田です。
Nakamuraさんへ
私がそういう場面で使う手法を紹介します。
もしかしたらよくない方法かもしれません。
その場合はご指摘ください。
まず、IDですが今はACCESSで言うところの
オートナンバー型にされていると思います。
それを varchar(50) に変えてください。
次に以下のようなストアドプロシージャを作成します。
--------------------------------------------------
ALTER PROCEDURE myNewID
AS
-- uniqueidentifier 型の変数を宣言
DECLARE @ID uniqueidentifier
-- uniqueidentifier 型の一意な値を得る
SET @ID = NEWID()
-- varchar型へ変換して出力
SELECT CAST( @ID AS varchar(50) ) AS NewID
RETURN
--------------------------------------------------
NEWID関数はGUIDを返す関数です。
実行するだびに二度と重複しない値を返してくれます。
myNEWIDは、NEWID関数で得たGUID値を文字列型に変換しています。
私の場合インターフェイスアプリケーションはACCESSで開発しますので
ここからはACCESSの話をします。
ACCESSのモジュールに以下のような関数を作ります。
--------------------------------------------------
Public Function myNewID() As String
Dim cmd As New ADODB.Command
Dim RS As New ADODB.Recordset
' コマンドにストアドプロシージャをセットする
Set cmd.ActiveConnection = conn
cmd.CommandText = "dbo.myNewID"
cmd.CommandType = adCmdStoredProc
' コマンドを実行しレコードセットに取り込む
Set RS = cmd.Execute
' NewIDを返す
myNewID = RS!NewID
RS.Close
Set RS = Nothing
Set cmd = Nothing
End Function
--------------------------------------------------
この関数を実行して、得た値をフォーム上の
フィールドか何かに保存しておきます。
レコードの挿入時にはその値を書き込みます。
つまり事前にIDの値を自分で用意して
それをレコードにも書き込むという手法です。
ちなみにイミディエイトウィンドウにて
?myNewID
と入力すると
4BCF806F-0A36-4CEE-8A96-750620DADD7B
などという値が返ってきます。
これは完全にユニークな値で、世界中のコンピュータで
同時に実行しても、あるいは何度実行しても
同じ値は出ない。
らしいです。
これを私なりに利用した方法なのですが
あまり自信はありません。
[MSDE/SQLServerに関して、今、どんなことにお困りですか?] |
よろしければお困りの内容を、電子メールで教えて下さい。 |
質問を電子メールで作成する
|
[ウィンドを閉じる][MSDE/SQLServer FAQ ][MSDE / MSDE2000 技術サポート情報一覧]
|