اسلام عليكم إخواني
ماهي أفضل طريقة لتخزين رقم في قاعدة البيانات والنداء عليه في كل مرة
بمعنى فتح و غلق الجدول كل خمس تواني مثلا
الرقم الذي أريد تخزينه هو رقم الفاتورة
و هو رقم تسلسلي كما تعرفون أي يجب تخزينه و النداء عليه و إضافة +1 ثم تخزينه ....
إستعملت الطريقة العادية
لكن إريد استشارتكم فقد تكون هده الطريقة متعبة لقاعدة البيانات أو تسبب تقل باليرنامج
شكرا لكم
جرب هذا الاستعلام :
كود :
Select IIF(Max(ID) Is NULL,1,Max(ID)+1) As ID From Test
يغنيك عن الجملة الشرطية :
كود :
Dim StrSQL as String= "Select IIF(Max(ID) Is NULL,1,Max(ID)+1) As ID From Test"
Dim da As New SqlDataAdapter(StrSQL, cn)
Dim dt As New DataTable
da.Fill(dt)
Txt_Id.Text=dt.Rows(0)(0).ToString()
أما بالنسبة لطريقة الحفظ هناك عدة طرق الطرقة الاولى التي وضعتها في كودك و الثانية عن طريق الاستعلام مثل Insert أو Update
حسب ما تريد بالنسبة لي أفضل طرقة الاستعلام و إغلاق الاتصال مع كل استعلام .
انا ارى ان افضل طريقة لتخزين رقم الفاتورة هي عن طريق تخزين قيمة التاريخ و الوقت فتاريخ اليوم لن يتكرر ابدا مثلا : تاريخ اليوم هو 10/01/2019 قم بحذف "/" ليصبح 10012019 وأضف له الوقت بنفس الطريقة
لقد ارفقت لك مثال اتمنى ان يفيدك
بالنسبة لرقم الفاتورة فجميعنا يعلم ان كل تاجر يملك دفتر فواتير ورقية له ارقام محددة غير مكرر يبدأ برقم و ينتهي برقم و هكذا لذالك تعلم ان تضع خانة في خصائص الفواتير اسمها رقم الدفتر و من ثم تزيد عليه واحد و هكذا ..
ممكن تستخدم الطريقة التالية عبارة عن جلب اكبر رقم ثم اضف اليه 1
لو الجدول فارغ يعنى القيمة 0 الكود هيضيف 1
PHP كود :
Public Function max_Sales_numb()
' جلب اكبر رقم
Dim id As New Integer
Try
Dim cmd As New OleDbCommand("select max(sales_numb) from tbl_sales", con)
con.Open()
id = cmd.ExecuteScalar
Catch ex As Exception
id = 0
End Try
con.Close()
Return id
End Function
عند الاستدعاء ضع الكود التالي
PHP كود :
txt_invsal_nub.Text = max_Sales_numb() + 1 ' جلب اكبر رقم
السّلام عليكم و رحمة الله و بركاته
مشاركة للإخوة الأكارم بارك الله فيهم ..
من رأيي يتم إختيار أحد أكواد السّادة الأفاضل و التي كلها تفي بالغرض .. مع التّفكير بإضافة الجزء الذي لا يتكرّر لأبد الآبدين .. و هو الوقت و التّاريخ باحتساب الثواني ..و عمل ربط بينهما هكذا مثلاً :
كود :
TextBox1.Text = "INV" & DateTime.Now.ToString("ddMMyyyyhhmmss")
تحياتي
(09-01-19, 09:21 PM)asemshahen5 كتب : [ -> ]جرب هذا الاستعلام :
كود :
Select IIF(Max(ID) Is NULL,1,Max(ID)+1) As ID From Test
جميل جدا أخي
شكؤا لك على هذا الإختصار
لدي استفسار إذا أمكن
- هل من الضروري أن أكتب
As ID يعني هل من لضروري ن أكتب إسم العمود الذي أستعلم فيه أم يمكنني أن أكتب أي متغير مثل
As n
- كيف يمكنني البحث في أكثر من عمود و في نفس الإستعلام مثلا
Max(ID) As n, Max(ID) As m, Max(ID) As k
("MsgBox _dt.Rows(0).Item("n
("MsgBox _dt.Rows(0).Item("m
("MsgBox _dt.Rows(0).Item("k
هل هكذا صحيح
-هل الإكثار من فتح و غلق الاستعلام يسبب مشاكل لقاعدة البيانات ,,, أكسس مثلا
شكرا لك كثيرا أخي على مساعدتك
(11-01-19, 12:41 AM)عبد العزيز البسكري كتب : [ -> ]
كود :
TextBox1.Text = "INV" & DateTime.Now.ToString("ddMMyyyyhhmmss")
فعلا أخي الكريم
التاريخ و الوقت لن يتكرر
أنا أستخدم هده الطريقة في Clé Index حتى لا تتكرر القيم
لكن أضن أنه لا يمكن إستخدامها في فاتورة تجارية
لأن الفاتورة التجارية رقم تسلسلي يبدأ من 1
و يجب أن يكون متتابع
السّلام عليكم و رحمة الله و بركاته
أعلم ذلك أخي الكريم .. و القصد مثلما كتبت لك .. أنّه يجب فقط إضافة هذا الجزء من الكود تحت أي اسم بحقل منفرد
و أثناء عمليّة حفظ الفاتورة بترقيمها العادي الذي لديك .. تعمل إختبار إحتياطي بهذا الجزء من الكود .. من باب التأمين و الإحتياط
تحياتي
فعلا أخي عبد العزيز هده هي الفكرة
شكرا لك على المتابعة