вадя |
требуется - Me.ResyncCommand = "exec dbo.xxxxx_resync " & Me!id & набор нужных мне значений Me.Recordset.Resync adAffectCurrent
чтоб вернулись поля (по типу, порядку и по названию совпадающие с источником данных), но значением установленным в хранимке синхронизации (не обязательно, что при этом происходит изменение в таблицах)
если есть id - нет проблем... |
Ну дык это совсем просто...
Чтобы сделать синхронизацию чего угодно нужно просто подсунуть левую однозначную таблицу:
CREATE TABLE [dbo].[AccessResync](
[SyncInd] [int] NOT NULL CONSTRAINT [DF_Resync_SyncInd] DEFAULT ((1)),
CONSTRAINT [PK_Resync] PRIMARY KEY CLUSTERED
(
[SyncInd] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY];
insert into dbo.AccessResync(SyncInd) values(1);
таблица с одной записью готова. далее легкое изменение хранимки формы:
ALTER PROCEDURE [dbo].[disigner_orders]
@disigner int,
@status int
AS
SET NOCOUNT ON;
----- добавляем к select : cross join dbo.AccessResync R и выводим R.SyncInd
select
R.SyncInd,
row_number() over( order by isnull(dd.id_orders,9999999)) as nn,
number_order, namep,dp,df,isnull(dd.id_orders,0) id_orders,isnull(stat,0) stat,userss.name,isnull(id_plan,0) id_plan,up_line,picline from
(
select
row_number() over(partition by t.n_or order by t.nn) as nn,
case row_number() over(partition by t.n_or order by t.nn)
when 1 then space(6)+cast(t.n_or as nvarchar)
when 2 then
case stat
when 0 then 'создан'
when 1 then 'в работе'
when 2 then 'выполнен'
when 3 then 'сдан'
when 4 then 'закрыт'
end
else null end as number_order,
namep,dp,df,t.id_orders,stat,id_plan,
case
when (row_number() over( order by t.n_or, t.nn)>1) and (row_number() over(partition by t.n_or order by t.nn)=1)
then (SELECT pic FROM pic WHERE (number = 5))
ELSE null
end AS up_line,
(SELECT pic FROM pic WHERE (1=2)) as picline
from tt t) dd FULL OUTER JOIN userss on userss.id_order=dd.id_orders and userss.nn=dd.nn
cross join dbo.AccessResync R
теперь процедура ресинхронизации:
ALTER PROCEDURE [dbo].[disigner_orders_picline_resync]
@nn int,
@number_order nvarchar(15),
@namep nvarchar(15),
@dp nvarchar(8),
@df nvarchar(8),
@id_orders int,
@stat int,
@name nvarchar(15),
@id_plan int,
@up_line image,
@picline image,
@SyncInd int
AS
SET NOCOUNT ON;
-- кстати, не пробовал ни разу но неужели select без имен полей в процедуре синхронизации прокатывает?
select
R.SyncInd
@nn ,
@number_order ,
@namep ,
@dp ,
@df ,
@id_orders ,
@stat ,
@name ,
@id_plan ,
@up_line ,
(select pic from pic where number=3)
from dbo.AccessResync R where SyncInd=@SyncInd
И в конце концов собственно ресинхронизация:
В форме в свойстве UniqueTable ставим "AccessResync"
и
Me.ResyncCommand = "exec dbo.xxxxx_resync " & Me!id & набор нужных мне значений +", ?"
Me.Recordset.Resync adAffectCurrent
Я тыщу раз так делал :)
И еще очень важно, иначе будут ошибки - типы полей основной процедуры и процедуры синхронизации должны
полностью совпадать. Если нет уверенности - делайте cast/convert. Иначе в аксе можно получить загадочное сообщение : "ошибка в ходе вполнения многошаговой процедуры".