PDA

View Full Version : سوال: بدست آوردن identity جاری با کد نویسی در ASP



ALI_REZA_6
پنج شنبه 26 آبان 1390, 15:41 عصر
سلام
من یه جدول برای نگهداری مشخصات کالا دارم که فیلد کد کالا به صورت خود کار مقدار دهی میشود (Identity=Yes) و دیگه اینکه یکی از فیلدش برای نگهداری مسیر عکس کالا است
عکس کالا در پوشه ای در App_Themes قرار میگیرد و فراخوانی میشود

حال می خوام که با اضافه کردن رکورد جدید در جدول کد کالا که به صورت Identity است (مقدار دهی میشود) برای نام عکس نیز در نظر گرفته بشود (یعنی عکس با نام کد کالا ذخیره بشود)

حال برای بدست آوردن کد کالای جاری قبل از درج در بانک چه کار کنم؟

قبلا پست هایی در مورد اینکه از Max میشه آخرین رکورد جدول بدست آورد دیده ام اما یه مشکلی داره
اونم اینه که اگه ما بیایم آخرین کالایی که درج کردیم را حذف کنیم، مقداری که تابع Max به ما میدهد اشتباه است

smm2006sh
پنج شنبه 26 آبان 1390, 16:03 عصر
سلام دوست من


اگه ما بیایم آخرین کالایی که درج کردیم را حذف کنیم، مقداری که تابع Max به ما میدهد اشتباه است
شما اگه اخرین رکورد را حذف کنید چرا باید مشکل پیش بیاد ؟؟ خوب اخرین مقدار میشه یکی قبل از اونی که حذف کردید .

ALI_REZA_6
پنج شنبه 26 آبان 1390, 16:19 عصر
سلام دوست من


شما اگه اخرین رکورد را حذف کنید چرا باید مشکل پیش بیاد ؟؟ خوب اخرین مقدار میشه یکی قبل از اونی که حذف کردید .

خوب اون وقت از اونجایی که فیلد کد کالا به صورت Identiy است برای درج کالا جدید مقدارش یکی بعد از مقدار کالای حذف شده است ولی مقدار Max یکی کمتر از مقدار کد جاری است

smm2006sh
پنج شنبه 26 آبان 1390, 16:25 عصر
دوست من یا این هست که شماره هایی که میزنی پشت سر هم نباشه و یا این که شماره ها را دستی وارد کنی. چون بازم اگه ترتیبش برات مهم هست و بخوای شماره ها به صورت اتوماتیک بخوره بازم به مشکل بر میخوری ! میدونی کجا ؟ اگه یه بار یه رکورد را از وسط هم پاک کنی بازم ترتیب اونا میخوره به هم .

ALI_REZA_6
پنج شنبه 26 آبان 1390, 16:45 عصر
دوست من یا این هست که شماره هایی که میزنی پشت سر هم نباشه و یا این که شماره ها را دستی وارد کنی. چون بازم اگه ترتیبش برات مهم هست و بخوای شماره ها به صورت اتوماتیک بخوره بازم به مشکل بر میخوری ! میدونی کجا ؟ اگه یه بار یه رکورد را از وسط هم پاک کنی بازم ترتیب اونا میخوره به هم .

من هدفم اینه که می خوام نام عکس که در بانک ذخیره میشه با کد کالا یکی باشه تا عکس هم خاصیت منحصر به فرد داشته باشه تا بعد اگه زمانی کاربر بخواد یک رکورد را حذف کنه عکس دیگری به اشتباه پاک نشه. چرا که ممکن حتی در زمان ذخیره عکس در پوشه قبلا عکسی همنام با عکس جاری وجود داشته باشه به این دلیل می خوام نام عکس با نام کد کالا یکی باشه
راه حلی دیگه ای وجود داره؟:متفکر:
با تشکر که وقت میزارید

fakhravari
پنج شنبه 26 آبان 1390, 18:25 عصر
با سلام
این بر میگرده به خودتون که چطوری بسازیش.
می تونید در هنگام اپلود عکس به اسم کاربر کنید .
در کل همه کار میشه کرد

aliasghar2
پنج شنبه 26 آبان 1390, 19:45 عصر
روش دوستان درسته ولی با خود sql هم میشه این کارو کرد فقط کافیه کدزیر رو به دستور sql تون اضافه کنید
insert into table values ('string value');select scope_identity()

بعد اونو بایه دیتاریدر میخونی

ALI_REZA_6
پنج شنبه 26 آبان 1390, 22:06 عصر
روش دوستان درسته ولی با خود sql هم میشه این کارو کرد فقط کافیه کدزیر رو به دستور sql تون اضافه کنید
insert into table values ('string value');select scope_identity()

بعد اونو بایه دیتاریدر میخونی

میشه یه توضیحی بدید در مورد اون کد که گفتید
دستور Sql Command چه جوری باید بنویسم
اون کد کجا باید بنوسم

FirstLine
جمعه 27 آبان 1390, 08:16 صبح
با سلام
یه راه ساده که با مشکل مواجهه نشی اینه که ورود اطلاعاتت رو دو مرحله ای کنی :
1- در مرحله اول یا صفحه اول بیا یه رکورد توی دیتابیس اضافه کن و با آی دی این رکورد جدید یه لینک واسه صفحه ادیت یا ویرایش بزار
2- در این صفحه یا مرحله کافیه با استفاده از آی دی که از صفحه یک اومده هرکاری خواستی بکنی
در ضمن این بعنوان صفحه ویرایش هم عمل میکنه
یه نمونه SP برای اضافه کردن رکورد جدید و بدست اوردن شناسه یا آی دی ان:



Create Procedure Confirm_List_InsertRow
@Confirm_News_ID bigint = 0 ,
@Confirm_UserName varchar(100) = '' ,
@Confirm_Date datetime = NULL,
@Confirm_Comment nvarchar(200) = ''
As
Begin



IF (@Confirm_Date ='' OR @Confirm_Date =null)
BEGIN
SELECT @Confirm_Date =GETDATE()
END

Insert Into Simpa_DB_tbl_News_Confirm_List
([Confirm_News_ID],[Confirm_UserName],[Confirm_Date],[Confirm_Comment])
Values
(@Confirm_News_ID,@Confirm_UserName,@Confirm_Date, @Confirm_Comment)

Declare @ReferenceID int
Select @ReferenceID = @@IDENTITY

Return @ReferenceID

End

GO


واسه تهیه sp هم از spgenerator استاد کرامتی استفاده کن
با تشکر

aliasghar2
جمعه 27 آبان 1390, 10:08 صبح
روشی که گفتم کاری نداره فقط کافی مثل یه select باهاش رفتار کن به این صورت که بریزیش توی یه دیتاریدر بعد اونو بخونی

ALI_REZA_6
شنبه 28 آبان 1390, 13:33 عصر
با تشکر از دوستان
راه حل های (آقا یا خانم) Firstline و aliasghar2 روش های خوبی هستند.
من مشکلم را به صورت زیر حل کردم
نام عکس بدون پسوند در فیلد عکس ذخیره کردم و خود عکس هم در مسیر پروژه درون یه پوشه قرار دادم
برای فیلد عکس نوع داده عددی گرفتم
هربار که خواستم یک رکورد را اضافه کنم ماکزیمم فیلد عکس را گرفته مقدارش به اضافه یک می کنم به این صورت نام عکس بعدی برای ذخیره بدست می آید و اگر هم که کاربر عکسی انتخاب نکرد مقدار 0 در فیلد مربوطه وارد میشود
برای ویرایش اگر عکس قبلا انتخاب شده بود که عکس جدید با نام عکس قبلی ذخیره می شود ولی اگر مقدار فیلد 0 بود (عکسی انتخاب نشده بود) دوباره ماکزیمم فیلد عکس را گرفته نام عکس بدست می آید
در این صورت همه عکس ها نامشان منحصر به فرد میشه
باز هم از دوستان که مرا راهنمایی کردند تشکر می کنم:لبخندساده::لبخندساده::ل خندساده:

FirstLine
شنبه 28 آبان 1390, 15:40 عصر
با سلام
اگر در زمان اضافه کردن رکورد ، بنا به دلایلی رکورد اضافه نشود یا رکورد حذف شود چون Id جدول autonumber است رکورد بعدی دقیقا بعد از رکورد قبلی نخواهد بود و قطعا مشکل پیش خواهد آمد
با تشکر