PDA

View Full Version : ایجاد شماره فاکتور



nahidmoh
سه شنبه 02 تیر 1394, 17:36 عصر
با سلام
من می خوام شماره فاکتور ایجاد کنم فقط نمی دونم که باید اونو کلید اصلی قرار دهم که یکی یکی زیاد شود و یا در محیط کد یک عدد رندم ایجاد کنم و اونو با شماره فاکتور های داخل جدول مقایسه کنم که تکراری نباشد و بعد ثبت کنم . دوستان لطفا راهنمایی کنید که چه روشی برای ایجاد اعداد unique مرسوم هست :ناراحت:

malloc
سه شنبه 02 تیر 1394, 18:32 عصر
سلام ... اگه auto بزاری فکر نمیکنم خیلی جالب باشه.... بهتره روش دومتو پی بگیری

nahidmoh
سه شنبه 02 تیر 1394, 18:48 عصر
ممنون از پاسختون .
یه سوال دیگه داشتم هنگام پرداخت آنلاین مثل اینکه یک شماره سفارش یا پرداخت باید ارسال بشه که منحصر به فرد باشه و به هیچ عنوان تکراری نباشه حتی در صورت پرداخت ناموفق اینو به چه صورت باید ایجاد کنم ؟؟

پیام حیاتی
سه شنبه 02 تیر 1394, 19:38 عصر
یک عدد در فیلد قرار بدید مثلا 55 هر بار که روی دکمه پرداخت یا ... کلیک شد یک واحد به اون اضافه بشه و به کاربر نمایش داده بشه.

mohammad2407
سه شنبه 02 تیر 1394, 19:57 عصر
بهتره شما چند الگوریتم در نظر بگیرین و انتخاب به عهده کاربر نهایی بزارین

نکته : شماره فاکتور اصلا نباید تکراری باشه

1- بر اساس تاریخ میتونه باشه
2- بر اساس ساعت پایان یک روز
3- به مقدار قبلی یکی اضافه بشه
4- یا اینکه خوده کاربر شماره وارد کنه

معمولا بر اساس تاریخ هست

nahidmoh
سه شنبه 02 تیر 1394, 20:05 عصر
منظورتون از این که براساس تاریخ باشه می شه یکم بیشتر توضیح بدهید ؟؟

malloc
سه شنبه 02 تیر 1394, 21:33 عصر
ممنون از پاسختون .
یه سوال دیگه داشتم هنگام پرداخت آنلاین مثل اینکه یک شماره سفارش یا پرداخت باید ارسال بشه که منحصر به فرد باشه و به هیچ عنوان تکراری نباشه حتی در صورت پرداخت ناموفق اینو به چه صورت باید ایجاد کنم ؟؟

شما میتونی یه کد n رقمی رندم توی اسکیول ایجاد کنی ... بعد اون کد رو چک کنی اگه توی شرایط مشخص موجود بود یه کد دیگه تولید کنی .... ضمنا میتونی مثلا یه عدد 8 رقمی تولید کنی بعد ساعت و دقیقه و ثانیه فعلی رو هم بهش بچسبونی (که میشه 14 رقم) و مطمعن باشی که قطعا تکراری نیست

xsbehx
چهارشنبه 03 تیر 1394, 14:41 عصر
شما اگر بخواید عدد منحصر بفرد تو sql ایجاد بکنی باید از فیلد مورد نظرتو از نوع UniqueIdentifire انتخاب کنی و بعدا تو سی شارپ اونو با نوع GUID پرش کنی
خودش یک مقدار منحصر بفرد بهت می ده که تضمین می کنه هرگز تو هیچ حالتی تکراری نباشه

malloc
چهارشنبه 03 تیر 1394, 18:44 عصر
شما اگر بخواید عدد منحصر بفرد تو sql ایجاد بکنی باید از فیلد مورد نظرتو از نوع UniqueIdentifire انتخاب کنی و بعدا تو سی شارپ اونو با نوع GUID پرش کنی
خودش یک مقدار منحصر بفرد بهت می ده که تضمین می کنه هرگز تو هیچ حالتی تکراری نباشه

سلام دوست عزیز ... ممنون بخاطر مطلب مفیدتون.... اون کد سی شارپ این ماجرا رو میتونید با یه نمونه نشون بدید

mbasirati
چهارشنبه 03 تیر 1394, 19:29 عصر
سلام ... اگه auto بزاری فکر نمیکنم خیلی جالب باشه.... بهتره روش دومتو پی بگیری

چرا auto باشه جالب نیست؟ مشکلش چیه؟

mbasirati
چهارشنبه 03 تیر 1394, 19:30 عصر
ممنون از پاسختون .
یه سوال دیگه داشتم هنگام پرداخت آنلاین مثل اینکه یک شماره سفارش یا پرداخت باید ارسال بشه که منحصر به فرد باشه و به هیچ عنوان تکراری نباشه حتی در صورت پرداخت ناموفق اینو به چه صورت باید ایجاد کنم ؟؟

سلام
لطفا برای هر سوال یه تاپیک جداگانه باز کنید و توی یه تاپیک چند سوال مطرح نکنید
ممنون

nahidmoh
چهارشنبه 03 تیر 1394, 22:29 عصر
شما اگر بخواید عدد منحصر بفرد تو sql ایجاد بکنی باید از فیلد مورد نظرتو از نوع UniqueIdentifire انتخاب کنی و بعدا تو سی شارپ اونو با نوع GUID پرش کنی
خودش یک مقدار منحصر بفرد بهت می ده که تضمین می کنه هرگز تو هیچ حالتی تکراری نباشه
میشه یکم واضح تر با مثال توضیح دهید؟؟؟؟ممنون .

xsbehx
پنج شنبه 04 تیر 1394, 01:39 صبح
شما چرای می خوای انقدر بخودت زحمت بدی!؟
خوب اگر شماره فاکتورت رو با همون int و identity تولید کنی هیچ موقع تکراری نمی شه دیگه ! هر بار هم فاکتور جدیدی ثبت بشه کدش منحصربفرده. البته تو اون جدول. شما وقتی فیلدی رو کلید اصلی یا PrimaryKey می کنی یعنی اینکه دیگه نمی تونه تکراری باشه دیگه!
حتی اگر شما موقع ثبت داده هم به مشکل بر بخوری و داده ثبت نشه، خود فیلدی identity یکی اضافه می شه. یعنی اگر دفعه اول شما بخوای ثبت کنی، شمارنده 20 باشه جتی اگر به مشکل بر بخوره دفعه بعد دوباره 20 نیست بلکه 21 خواهد بود.

یه روش دیگه هم همینه که دوستان گفتند. شما بیای تاریخ + ساعت و دقیقه و ثانیه رو به عنوان کلید اصلی تو یک فیلد رشته ای ذخیره کنی. که البته به احتمال 99 درصد تکراری نخواهد بود. چون احتمال داره همزمان دوتا کاربر تو یک تاریخ و زمان فاکتور جدیدی ثبت کنند که البته اونو هم می تونید با اضفه کردن نام کاربری طرف رو هم به کد بالا اضافه کنی که دیگه بطور 100 درصد منحصربفرد خواهد شد

اینا ماله موقعی که شما یک فیلد منحصر بفرد می خوای داشته باشی فقط تو یک جدول.
ولی اگر بخوای یک فیلد منحصر بفرد داشته باشی که تو تمام دنیا یکتا باشه چی؟
اونوقت که می یا از GUID استفاده می کنی.
نوع identifier و استفاده از guid تضمین می کنه که تو هیچ حالتی و هیچ جای دنیا مقدار شما تکراری نخواهد بود.
البته استفاده کردن از این نوع داده ای هم مشکلات خودشو داره. مثلا بیشترین حجم رو نسبت به نوع داده های دیگه اشغال می کنه(16 بایت) و اگر به عنوان کلید اصلی انتخاب بشه یا کلا ایندکس بشه، سرعت شما رو نسب به نوع int پایین تر می یاره و ...
اینو موقعی استفاده می کنند که مثلا بخواند یک کد کاربری به طرف بدن نه شماره فاکتور و این چیزا که یکتا بودنش فقط تو جدول خودش مهمه نه جای دیگه
به هر حال ازش اینطوری استفاده می کنند:
کد استفاده تو سی شارپ به این صورته :


Guid PK = Guid.NewGuid();
TextBox1.Text = Convert.ToString(PK);


تو Sql هم اینطوری ازش استفاده می شه:


select newid()

هر چند بار که f5 بزنید داده متفاوتی بهتون نشون خواهد داد. برای اینکه همه رو با هم یکجا ببینید می تونید از مثال پایین استفاده کنید


create table tblTest(fldGUID uniqueidentifier)
go
declare @i int
set @i=0
while @i<=100
begin
insert into tblTest(fldGUID) values(newid())
set @i +=1
end
select fldGUID as 'عمرا تکراری باشه' from tblTest