2017-02-20 10 views
2

Я в процессе перемещения нашей БД из брандмауэра доступа к серверу SQL Server, сохраняя переднюю часть Access. Одна из таблиц была настроена с идентификатором репликации для ПК. В качестве базы данных доступа мы могли вставлять значения в эту таблицу без ссылки на поле PK, так как Access автоматически генерирует новый GUID.Вставка в таблицу SQL Server с GUID pk из MS Access

У нас есть функция, которая создает запись для этой таблицы, которая больше не работает со связанной версией SQL Server SQL Server, и я уверен, что она должна иметь какое-то отношение к этому полю replcationID. В SQL Server он импортируется как тип данных «uniqueidentifier». Когда функция запускается, она не возвращает никаких ошибок, но также ничего не вставляет.

Я хотел бы знать, есть ли способ заставить это работать, не меняя его на сквозной проход. Как получить доступ MS Access к SQL Server для генерации нового GUID при вставке новой записи.

В качестве примечания, поле PK называется PurchaseID и не ссылается в настоящее время в VBA (так как она используется для автоматического генерирования для этого поля)

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

Я попытался с помощью NEWID() в строке SQL, но когда доступ работает оператор db.execute, я получаю сообщение об ошибке:. «Неопределенная функция„NewID“в выражении – ArcherBird

ответ

2

Вы можете добавить ограничение по умолчанию на столе для этого столбца в SQL-сервере, так как:

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

Или вы можете использовать пользовательскую функцию доступа для генерации GUID как stguidgen()

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

С запросом проходном, вы могли бы использовать newid(), который генерирует новый uniqueidentifier в SQL Server.

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

Добавление таблицы ограничение работает хорошо для меня Спасибо за все предложения! – ArcherBird

+0

@ArcherBird рад помочь! – SqlZim