2017-02-20 19 views
2

アクセスフロントエンドを維持しながら、DBをAccessバックエンドからSQL Serverバックエンドに移動しています。テーブルの1つに、そのPKのレプリケーションIDが設定されていました。アクセスDBは、Accessが自動的に新しいGUIDを生成するため、PKフィールドを参照せずにこのテーブルに値を挿入できます。MS AccessからGUID pkを使用してSQL Serverテーブルに挿入

このテーブルに挿入するレコードを作成し、リンクされたSQL Serverバージョンのテーブルでは機能しない関数があり、このreplcationIDフィールドと何か関係があると確信しています。 SQL Serverでは、データ型 'uniqueidentifier'としてインポートされました。関数が実行されると、エラーは返されませんが、何も挿入されません。

これをパススルーに変更せずに動作させる方法があるかどうかを知りたいと思います。新しいレコードを挿入するときに新しいGUIDを生成するようにSQL Serverに指示するにはどうすればよいですか?あなたが追加することができます

注意点として、PKフィールドがPurchaseIDと呼ばれ、VBAで現在参照されていません(それがautoに使用するので、このフィールド用に生成)

Public Sub BuildReorderRecord(Market As String, MPID As String, FloorsetID As String) 
Dim values As String 
Dim sql As String 
Dim P3ID As String 
Dim Username As String 
Dim dt As String 
Dim db As Database 
Dim rs As Recordset 
Set db = CurrentDb 
Set rs = db.OpenRecordset("SELECT ID FROM tblAttributes WHERE MPID = """ & MPID & """") 

    'Get P3ID and auditing values 
    dt = Now() 
    Username = Environ("USERNAME") 
    P3ID = rs![ID] 

    'build record values string 
    values = """" & P3ID & """, """ & Market & """, """ & MPID & "', """ & FloorsetID & """" 
    values = values & ", #" & dt & "#, """ & Username & """, #" & dt & "#, """ & Username & """" 

    'build sql string 
    sql = "INSERT INTO tblReorders (P3ID, country, mpid, floorsetID" 
    sql = sql & ", CreateDate, CreatorUsername, ChangeRecord_Timestamp, ChangeRecord_Username)" & vbNewLine 
    sql = sql & "VALUES(" & values & ")" 

    'insert the new record 
    db.Execute sql 

Set db = Nothing 
Set rs = Nothing 

End Subの

+0

私は、SQL文字列でNEWIDを()を使用してみましたが、アクセスがdb.execute文を実行したとき、私はエラーを取得:「未定義関数は、式の中で 『NEWID』 – ArcherBird

答えて

2

そのようなSQLサーバーで、その列のテーブルの上にデフォルトの制約:

alter table t 
    add constraint [df_t_guid] 
    default newid() for [guid]; 

それとも、GUIDを生成するために、アクセスしてカスタム関数を使用することができますようパススルークエリでは3210

insert into ... (guid... 
values (stguidgen(), ...) 

、あなたは、SQL Serverの新しいuniqueidentifierを生成newid()を使用することができます。

insert into ... (guid... 
values (newid(), ...) 
+0

テーブル制約を追加する私のためによく働い。すべての提案をありがとう! – ArcherBird

+0

@ArcherBirdお手伝いを喜んで! – SqlZim

関連する問題