الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

الاخ ابو الهدى..ارجو الدخول

مغلق
بدأه المثابر في 13 يونيو 2002 · 7 رد · 737 مشاهدة · في لغة Ms Visual Basic 6 وما قبلها من إصدارات
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

اخي الفاضل...

عذرا لاشغالك في اسئلتي..ارجو مساعدتي مع خالص الشكر.

اريد ان اعمل حقل ترقيم تلقائي..(ليس به مفتاح اساسي) بشرط ان يبدا اول رقم بالرقم 2002001 اي 001 في سنة 2002 ويزيد رقم 001 اي يصبح 2002002,2002003 وهكذا....وعندما تنتهي سنة 2002 وندخل سنة 2003 يصبح الرقم 2003001 وهكذا يبدا من جديد في كل سنة جديدة يرجع الرقم الى 001 ويزداد وبنهاية السنة يقف الترقيم ويبدا من جديد.

بالحقية الجدول ساربطه بالفيجوال اي ان الحقل سيرتبط ب تكست ..ليس شرط ان يكون ترقيم تلقائي يمكن ان يكون نص وتكون الزيادة من الفيجوال داخل التكست ثم تحفظ في الحقل.

ولك جزيل الشكر.

#2

السلام عليكم:

أتمنى منك توضيح عدة نقاط لتأخذ الجواب المناسب:

هل الخانات الأولى الثلاث ستدل على رقم ترتيب اليوم ضمن السنة أي يجب جلبه من التاريخ أم أنك تريد بمجرد إضافة سجل جديد أن تزداد الخانات الثلاث الأولى بمقدار واحد.

ما هي القيمة التي تود البدء منها؟

هل تقصد بانتهاء السنة انتهاء الـ 365 يوم في السنة العادية والـ 366 يوم في السنة الكبيسة.

طبعاً لا يمكن جعل حقل ترقيم تلقائي ينفذ ما طلبت، فلا بد من بناء خوارزمية لذلك.

بانتظار التوضيح، وبالتوفيق.

#3

شكرا جزيلا اخي العزيز...واليك التوضيح :

**نعم اريد ( بمجرد إضافة سجل جديد أن تزداد الخانات الثلاث الأولى بمقدار واحد. ) وليس له علاقة بتاريخ يوم او شهر بل هو رقم عادي يزداد بمقدار واحد.

** القيمة التي اود البدء منها هي 001 وبالتالي تصبح 002 وووووووو

الى 0010 ثم 0011 ثم 0012 وهكذا

** نعم اقصد ( بانتهاء السنة انتهاء الـ 365 يوم في السنة العادية والـ 366 يوم في السنة الكبيسة)

وعندما تنتهي سنة 2002 يبدا الترقيم من 2003001 وهكذا

ولك خالص الشكر اخي الفاضل

#4

السلام عليكم

تهيئة الاتصال مع قاعدة البيانات

Option Explicit
Dim cnn1 As ADODB.Connection
Dim rstTable As ADODB.Recordset
Dim strCnn As String

Private Sub Form_Load()
Set cnn1 = New ADODB.Connection
cnn1.Open "Provider= Microsoft.Jet.OLEDB.4.0; " _
       & "Data Source=" & App.Path & "Test.mdb;"
End Sub

الدالة giveMaxOldValue تجلب أكبر قيمة موجودة في الجدول للحقل المطلوب Field1

ووضعت لك البارامتر strartValue من أجل تحديد أول قيمة تود البدء منها

Private Function giveMaxOldValue(startValue As String) As String
Set rstTable = New ADODB.Recordset
Dim strSQL As String
strSQL = "SELECT MAX(Field1) AS LastValue FROM Table1"
rstTable.CursorType = adOpenKeyset
rstTable.LockType = adLockOptimistic
rstTable.Open strSQL, cnn1, , , adCmdText

With rstTable
    If .State = 1 Then .Close
    .Open strSQL
    If IsNull(.Fields("LastValue")) Then
        giveMaxOldValue = startValue
    Else
        giveMaxOldValue = .Fields("LastValue")
    End If
End With
rstTable.Close
End Function

الدالة giveNewValue تجلب القيمة الجديدة للحقل وتأخذ بارامتر وهو القيمة الكبرى لهذا الحقل

Private Function giveNewValue(oldValue As String)
If Val(Mid(oldValue, 1, 4)) Mod 4 = 0 Then
    If Val(Mid(oldValue, 5, 3)) = 366 Then
        giveNewValue = Format(Str(Val(Mid(oldValue, 1, 4)) + 1), "0000") & "001"
    Else
        giveNewValue = Mid(oldValue, 1, 4) & Format(Str(Val(Mid(oldValue, 5, 3)) + 1), "000")
    End If
Else
    If Val(Mid(oldValue, 5, 3)) = 365 Then
        giveNewValue = Format(Str(Val(Mid(oldValue, 1, 4)) + 1), "0000") & "001"
    Else
        giveNewValue = Mid(oldValue, 1, 4) & Format(Str(Val(Mid(oldValue, 5, 3)) + 1), "000")
    End If
End If
End Function

وتركت عملية التخزين لتقوم بها أنت

أرجو ان يحقق هذا مطلوبك

ملاحظة: لا أستطيع إدراج ملف مرفق ولا أدري لماذا؟

#5

اخي العزيز

اشكرك جزيل الشكر وجعلها الله في ميزان حسناتك باذنه تعالى.

اخي الفاضل..

بالحقيقة انا صممت البرنامج على dao مع الاسف ولن استطيع تغييره الى ado ....هل يصلح نفس الكود على dao ....ارجوك اخي الفاضل حاول ان ترسل لي البرنامج على بريدي...مع الف شكر

azhar69@maktoob.com

#6

السلام عليكم:

في الحقيقة الأمر الوحيد الذي سيختلف هو طريقة الربط مع قاعدة البيانات.

فكرة الحل ببساطة هي:

أن تجلب أكبر قيمة مخزنة في الجدول، ثم تضيف عليها واحد إذا لم تنته السنة،

أو تعيد العداد إلى الواحد وتزيد واحد على السنة مع مراعاة كون السمة كبيسة أم لا.

بما أنك متصل بواسطة DAO فغير طريقة الاتصال في الـ FormLoad.

عرف متحول من نوع RecordSet وليكن rst.

اكتب الكود:

rst.OpenRecordset ("SEELCT MAX (Field1) AS LastValue FROM Table1")
    If IsNull(.Fields("LastValue")) Then
        giveMaxOldValue = startValue
    Else
        giveMaxOldValue = .Fields("LastValue")
    End If

في الدالة الأولى، والدالة الثانية تبقى على حالها.

#7

اخي الفاضل..

اسف جدا..لقد حاولت عمل البرنامج ..وحاولت وضعه هنا ولكن الخاصية معطلة...رجاءا يااخي ارسل لي البرنامج او اعطني بريدك لارسله لك وانت تعمل التغيرات فيه..ولك مني اجمل تحية.

azhar69@maktoob.com

#8

السلام عليكم:

إليك بريدي Hadisyr1@Hotmail.com

وبانتظار رسالتك.

هذا الموضوع مغلق.

مواضيع مشابهة