-Поиск по дневнику

Поиск сообщений в rss_sql_ru_access_programming

 -Подписка по e-mail

 

 -Постоянные читатели

 -Статистика

Статистика LiveInternet.ru: показано количество хитов и посетителей
Создан: 16.03.2006
Записей:
Комментариев:
Написано: 4


Конфликт записи при копировании заказа

Четверг, 27 Марта 2014 г. 16:59 + в цитатник
Добрый день.
Работаю с ACCES + SQL SERVER 2008.
Есть две таблицы "Учет заказов" с самими заказами и "Строки заказов" с позициями в счете.
Создана форма с подформой, где можно просматривать эти счета.
По кнопке вызываю сохраненную процедуру копирования счета
    With cmd
        .ActiveConnection = CurrentProject.Connection
        .CommandText = "CopyOrder"
        .CommandType = adCmdStoredProc
        
        .Parameters.Append .CreateParameter("@fOrder", adInteger, adParamInput, , Me.ÊîäÇàêàçà)
        .Parameters.Append .CreateParameter("@fOper", adInteger, adParamInput, , Me.Îïåðàòîð)
        .Parameters.Append .CreateParameter("@LastID", adInteger, adParamOutput)
        
        .Execute

        Me.RecordSource = "exec Òîðãîâëÿ_Ñïèñîê_ñ÷åòîâ 'order','" & .Parameters("@LastID") & "'"
        'Debug.Print .Parameters("@LastID")
    End With


Код самой процедуры:
ALTER PROCEDURE [dbo].[CopyOrder]
   @fOrder int, -- код копируемого счета
   @fOper int,   -- код оператора, копирующего счет
   @LastID int OUTPUT
AS
BEGIN

   SET NOCOUNT ON;
   
   -- Вставляем  строку
   INSERT INTO dbo.[Учёт заказов]
			   ([КодКлиента],
				[Дата выписки счёта],
				[Заметки],
				[Оператор],
				[БукваСчёта],
				[ПроцСкидки],
				[КодСклада],
				[СкладОтгрузки],
				[ОтправкаТК],
				[ОтправкаЗаСчет],
				[ОтправкаГород],
				[ОтправкаАдрес],
				[ОтправкаКонтЛицо],
				[ОтправкаТип],
				Примечение,
				КодКонтЛица)
		SELECT	dbo.[Учёт заказов].КодКлиента, 
				CONVERT(datetime, GETDATE(), 102) AS [Дата выписки счёта], 
				dbo.[Учёт заказов].Заметки, 
				Oper.Оператор, 
				Oper.БукваСчета, 
				dbo.[Учёт заказов].ПроцСкидки, 
				dbo.[Учёт заказов].КодСклада, 
				dbo.[Учёт заказов].СкладОтгрузки, 
				dbo.[Учёт заказов].ОтправкаТК, 
				dbo.[Учёт заказов].ОтправкаЗаСчет, 
				dbo.[Учёт заказов].ОтправкаГород, 
				dbo.[Учёт заказов].ОтправкаАдрес, 
				dbo.[Учёт заказов].ОтправкаКонтЛицо, 
				dbo.[Учёт заказов].ОтправкаТип,
				dbo.[Учёт заказов].Примечение,
				dbo.[Учёт заказов].КодКонтЛица
FROM         dbo.[Учёт заказов] CROSS JOIN
                          (SELECT     Оператор, БукваСчета
                            FROM          dbo.Операторы
                            WHERE      (Оператор = @fOper)) AS Oper
WHERE     (dbo.[Учёт заказов].КодЗаказа = @fOrder)
   

   -- Получаем id вставленной строки
   SET @LastID = SCOPE_IDENTITY()
   

 -- вставляем позиции в счете
   INSERT INTO dbo.[Строки заказов] (КодЗаказа, [Код товара], Количество, Скидка, Цена2)
	SELECT @LastID As КодЗаказа , [Строки заказов].[Код товара], Количество, [Коды скидок].[%скидки] As Скидка, 
	CEILING(((ROUND(dbo.[Перечень товаров].ЦенаРозн0 + dbo.[Перечень товаров].[Цена отп ЕВРО] 
	* dbo.Курс.[Курс ЕВРО] + dbo.[Перечень товаров].[Цена отп $] * dbo.Курс.[Курс $], 0)) * 
	(1 - ISNULL([Коды скидок].[%скидки], 0) / 100)) * (1 + ISNULL(dbo.[Строки заказов].Наценка, 0) / 100)) AS Цена2
	FROM dbo.[Строки заказов] 
	INNER JOIN [Перечень товаров] ON [Перечень товаров].[Код товара] = [Строки заказов].[Код товара]
	INNER JOIN [Учёт заказов] ON [Строки заказов].КодЗаказа = [Учёт заказов].КодЗаказа
	INNER JOIN Предприятия ON Предприятия.КодПредприятия = [Учёт заказов].КодКлиента 
	LEFT OUTER JOIN [Коды скидок] ON [Коды скидок].ГруппаСкидок = Предприятия.ГруппаСкидок AND [Коды скидок].Тип=[Перечень товаров].Тип
	CROSS JOIN Курс
	WHERE [Строки заказов].КодЗаказа=@fOrder
	
	UPDATE [Учёт заказов] SET [№счёта]=@LastID WHERE КодЗаказа = @LastID
   
       RETURN @LastID
   
END


Сами строки в таблицу вставляются нормально.
Потом источнику данных формы мы задаем этот уже скопированный заказ. НО когда теперь пытаюсь редактировать его через форму, в момент сохранения выдает ошибку "Конфликта записи: пока вы редактировали эту запись она уже была изменена".
Подскажите, пожалуйста, как это можно исправить? Это в коде где-то ошибка?

http://www.sql.ru/forum/1085355/konflikt-zapisi-pri-kopirovanii-zakaza


 

Добавить комментарий:
Текст комментария: смайлики

Проверка орфографии: (найти ошибки)

Прикрепить картинку:

 Переводить URL в ссылку
 Подписаться на комментарии
 Подписать картинку