PDA

View Full Version : برگرداندن شماره تكراري بوسيله sp



Tasnim
سه شنبه 24 اردیبهشت 1387, 09:40 صبح
سلام دوستان
من يه برنامه دارم كه بانكم sql 2000 و برنامه تحت شبكه كار مي كنه
توي يه قسمت از برنامه تعداد ركورد يكي از جداول رو به دست ميدارم و به كاربر نشون ميدم
من همه كارا رو توي sp انجام ميدم اما با اين حال زماني كه چند كاربر همزمان اقدام به ثبت ميكنن sp به كاربران يك شماره مده در حالي كه بايد به هر كاربر يه شماره جداگونه بده.
به نظرتون براي حل اين مشكل من بايد چي كنم؟
ممنون ميشم اگه كمكم كنيد

Amir_Safideh
سه شنبه 24 اردیبهشت 1387, 10:31 صبح
درست متوجه نشدم . این sp چی رو دقیقا بر میگردونه ؟ تعداد رکوردهای یه جدول رو برمیگردونه ؟ لطفا کدتون رو هم که برای این پروسیجر نوشتید بزارید تا ببینیم .
------------
موفق باشید .

Tasnim
سه شنبه 24 اردیبهشت 1387, 10:44 صبح
ببين دوست عزيز
اين sp كه من نوشتم مياد يه سري اطلاعات رو توي چند تا جدول وارد مي كنه و از يه جدول ديگه هم ركوردكانت ميگيره و براي كاربر بر مي گردونه

delphiprog3000
سه شنبه 24 اردیبهشت 1387, 10:54 صبح
لطفا متن پروسیجر و دستور اجرای که با ابزارهای دییتابیسی نوشتید بزارید تا بشه راجبش نظر داد........


موفق باشید...........

Tasnim
سه شنبه 24 اردیبهشت 1387, 11:37 صبح
CREATE PROCEDURE QSabtSand(

@FCoSand int,
@FYerSand varchar(50),
@FCirSand varchar(10),
@FDateSand varchar(8),
@FNumSand varchar(20),
@FTypSand varchar(20),
@FSecur tinyint,
@FSubSand varchar(100),
@FDateSabt varchar(8),
@FSendSand varchar(50),
@FRecSand varchar(50),
@FTypDo varchar(20),
@FStorSand varchar(15),
@FAccSand bit,
@FCoSabtgar varchar(13),
@FTimeSabt varchar(10))
as
declare @Year_Code int ,@Year_Start int
select @Year_Code=FCoYear ,@Year_Start=FYerStart from dbo.F_sabt(@FYersand)
-- ************************************************** ******************************--************************************************** ************************************
if EXISTS(SELECT * FROM TUser_Access WHERE (Fco_Usr = @FCoSabtgar) AND (FCoYear = @Year_Code) AND (FIns_Sa = 1))
begin
declare @Code_sa int
if @FCoSand=-1
begin
set @Code_sa=dbo.f_cosan(@FYerSand )
set @Code_sa=@Code_sa+@Year_Start -- کد سند
end
else
set @Code_sa=@FCoSand

--************************************************** ********************************
if @FNumSand='#'
set @FNumSand=ltrim(str(@Code_sa)+'\'+@FStorSand)

if exists ( select * from TInsSand where ( FYerSand like @FYerSand and FCoSand=@Code_sa) )
begin
update TInsSand set
FCoSand=@Code_sa ,
FYerSand=@FYerSand,
FCirSand=@FCirSand,
FDateSand=@FDateSand,
FNumSand=@FNumSand,
FTypSand=@FTypSand,
FSecur=@FSecur,
FSubSand=@FSubSand,
FDateSabt=@FDateSabt,
FSendSand=@FSendSand,
FRecSand=@FRecSand,
FTypDo=@FTypDo,
FStorSand=@FStorSand,
FAccSand=@FAccSand,
FCoSabtgar=@FCoSabtgar,
FTimeSabt=@FTimeSabt
where ( FYerSand =@FYerSand and FCoSand=@Code_sa )
end
else
begin
insert into TInsSand ( FCoSand,FYerSand,FCirSand,FDateSand,FNumSand,FTypS and,FSecur,FSubSand,FDateSabt,FSendSand,FRecSand,F TypDo,FStorSand,FAccSand,FCoSabtgar,FTimeSabt)
values( @Code_sa,@FYerSand,@FCirSand,@FDateSand,@FNumSand, @FTypSand,@FSecur,@FSubSand,@FDateSabt,@FSendSand, @FRecSand,@FTypDo,@FStorSand,@FAccSand,@FCoSabtgar ,@FTimeSabt)
end
select * from TInsSand where fcosand=@Code_sa and fyersand like @FYerSand and faccsand between 1 and 6
end
else
select 0
GO

حمیدرضاصادقیان
سه شنبه 24 اردیبهشت 1387, 19:22 عصر
CREATE PROCEDURE QSabtSand(

@FCoSand int,
@FYerSand varchar(50),
@FCirSand varchar(10),
@FDateSand varchar(8),
@FNumSand varchar(20),
@FTypSand varchar(20),
@FSecur tinyint,
@FSubSand varchar(100),
@FDateSabt varchar(8),
@FSendSand varchar(50),
@FRecSand varchar(50),
@FTypDo varchar(20),
@FStorSand varchar(15),
@FAccSand bit,
@FCoSabtgar varchar(13),
@FTimeSabt varchar(10))
as
declare @Year_Code int ,@Year_Start int
select @Year_Code=FCoYear ,@Year_Start=FYerStart from dbo.F_sabt(@FYersand)
-- ************************************************** ******************************--************************************************** ************************************
if EXISTS(SELECT * FROM TUser_Access WHERE (Fco_Usr = @FCoSabtgar) AND (FCoYear = @Year_Code) AND (FIns_Sa = 1))
begin
declare @Code_sa int
if @FCoSand=-1
begin
set @Code_sa=dbo.f_cosan(@FYerSand )
set @Code_sa=@Code_sa+@Year_Start -- کد سند
end
else
set @Code_sa=@FCoSand

--************************************************** ********************************
if @FNumSand='#'
set @FNumSand=ltrim(str(@Code_sa)+'\'+@FStorSand)

if exists ( select * from TInsSand where ( FYerSand like @FYerSand and FCoSand=@Code_sa) )
begin
update TInsSand set
FCoSand=@Code_sa ,
FYerSand=@FYerSand,
FCirSand=@FCirSand,
FDateSand=@FDateSand,
FNumSand=@FNumSand,
FTypSand=@FTypSand,
FSecur=@FSecur,
FSubSand=@FSubSand,
FDateSabt=@FDateSabt,
FSendSand=@FSendSand,
FRecSand=@FRecSand,
FTypDo=@FTypDo,
FStorSand=@FStorSand,
FAccSand=@FAccSand,
FCoSabtgar=@FCoSabtgar,
FTimeSabt=@FTimeSabt
where ( FYerSand =@FYerSand and FCoSand=@Code_sa )
end
else
begin
insert into TInsSand ( FCoSand,FYerSand,FCirSand,FDateSand,FNumSand,FTypS and,FSecur,FSubSand,FDateSabt,FSendSand,FRecSand,F TypDo,FStorSand,FAccSand,FCoSabtgar,FTimeSabt)
values( @Code_sa,@FYerSand,@FCirSand,@FDateSand,@FNumSand, @FTypSand,@FSecur,@FSubSand,@FDateSabt,@FSendSand, @FRecSand,@FTypDo,@FStorSand,@FAccSand,@FCoSabtgar ,@FTimeSabt)
end
select * from TInsSand where fcosand=@Code_sa and fyersand like @FYerSand and faccsand between 1 and 6
end
else
select 0

حمیدرضاصادقیان
سه شنبه 24 اردیبهشت 1387, 19:26 عصر
سلام.اینطوری که من فهمیدم شما میخوای شماره سند رو درشبکه کنترل کنی.خوب وقتی که چند کاربر همزمان دارند سند میزنند مسلمه وقتی مثلا 5 کاربر باهم دکمه اضافه رو بزنن پروسیجر ما اخرین شماره سند رو میخونه از دیتابیس و به کاربر نمایش میده. عملی که شما باید انجام بدین هنگام ذخیره کردن هست.که وقتی کاربر دکمه تایید رو میزنه ابتدا چک کنی ببینی اون شماره سند هست یا نه . اگر نبود ذخیره کنی اگر بود اخرین شماره رو بدست بیاری و یکی بهش اضافه کنی و به مقدار سند پاس بدی دوباره ذخیره کنی. در این فاصله هم امکان نداره رکورد جدیدی بتونه ثبت بشه.