2017-05-15 77 views
0

何が間違っていますか?テーブルdbo_customerからレコードを1つコピーしてから、テーブルdbo_active_taskにコピーする必要があります。しかし、エラー "エラー3622 - IDENTITY列を持つSQL Serverテーブルにアクセスするときに、OpenRecordsetでdbSeeChangesオプションを使用する必要があります。"エラー3622識別列を持つSQL Serverテーブルを開きます

Dim stSQlIns As String 
Dim stSqlD As String 
Dim rs As DAO.Recordset 

If MsgBox("Copy № " & Me![id].Value, vbYesNo + vbDefaultButton2, "Moving to the archive ") = vbYes Then 

stSQlIns = "INSERT INTO [dbo_new] " _ 
& "SELECT [dbo_customer].[id], [dbo_customer].[apartment], [dbo_customer].[description], [dbo_customer].[documents], [dbo_customer].[email], [dbo_customer].[first_name], [dbo_customer].[house_number], [dbo_customer].[last_name], [dbo_customer].[middle_name], [dbo_customer].[passport_number_str], [dbo_customer].[passport_number], [dbo_customer].[passport_series], [dbo_customer].[tel_number], [dbo_customer].[street_id], [dbo_active_task].[check_number], [dbo_active_task].[enable], [dbo_active_task].[production_datetime], [dbo_active_task].[production_method], [dbo_active_task].[shedule_datetime], [dbo_active_task].[shedule_end_datetime], [dbo_active_task].[task_desc], [dbo_active_task].[vip], [dbo_active_task].[customer_id], [dbo_active_task].[schedule_person_id], [dbo_active_task].[task_id]" _ 
& "FROM [dbo_customer], [dbo_active_task] " _ 
& "WHERE ((([dbo_customer].[id])=" & Me![id].Value & ")) " 

stSqlD = "DELETE [dbo_customer].*, [dbo_active_task].* " _ 
& "FROM [dbo_customer], [dbo_active_task] " _ 
& "WHERE ((([dbo_customer].[id])=" & Me![id].Value & "))" 
Set rs = Me.Recordset 
CurrentDb.Execute (stSQlIns) 
CurrentDb.Execute (stSqlD) 
Me![id].Requery 

End If 
+1

実際に使用していないデータベースタグを削除してください。 –

+0

これは役に立ちますか? http://stackoverflow.com/questions/22486176/how-to-use-the-dbseechanges-option-with-openrecordset-when-accessing-a-sql-serve – Nayak

+0

@Nayakこのコードを追加しました。 'CurrentDb.Execute stSQlIns、dbSeeChanges' 'CurrentDb.Execute stSqlD、dbSeeChanges'はこの' CurrentDb.Execute(stSQlIns) ' ' CurrentDb.Execute(stSqlD) 'のインストゥルメントで、何度もレコードをコピーします。それをテーブルから削除しないでください。 –

答えて

0
& "FROM [dbo_customer], [dbo_active_task] " _ 
& "WHERE ((([dbo_customer].[id])=" & Me![id].Value & ")) " 

これは、あなたが顧客のためではなく、タスクをフィルタリングデカルト積です。

したがって、レコード数はdbo_active_taskになります。

このソーステーブルが必要な場合は、単一タスクをフィルタリングするためにWHERE句を追加する必要があります。

+0

それは今作動する!ヒントありがとうございました:) –

関連する問題