اذهب الي المحتوي
أوفيسنا

الاستعلام عن الأرقام المحذوفة (الثغرات)


الردود الموصى بها

أعضاء منتدى

السلام عليكم ورحمة الله وبركاته

ارغب في عمل استعلام عن الأرقام السجل التي تم حذفه

مثال الأرقام من 1 إلى 11

الأرقام المحذوف 4 /7

يظهر الأرقام المحذوف 4 /7 فقط

حتى يتم الاستفادة من الأرقام المحذوف في تسجيل السجل

الارقام.rar

تم تعديل بواسطه عبداللهM
رابط هذا التعليق
شارك

جزاك الله خير

لي سؤالين

1- ماهي - الاشياء- الاسماء اقصد التي اغيرها واين موضعها في الكود لتتناسب مع الجدول او الاستعلام الخاص بي

2- كيفية ربطها بنموذج فرعي

ارجو الشرح وليس الحل

رابط هذا التعليق
شارك

اخي عبد الله

هذا هو البرنامج كما طلبت

اضغط زر display وسترى النتيجة

اخي ابا حفص

لاحظ عبارة SQL التالية

Set Rc = Db.OpenRecordset("SELECT CLng(number22) AS ChequeNumber FROM tab22 WHERE ((Left(number22, 1) <> 'V')) ORDER BY CLng(number22);")

tab22 يمثل اسم الجدول

number22 يمثل اسم الحقل المراد البحث فيه

اما بالنسبة الى سؤالك عن النماذج الفرعية فأنا لم اتعامل من قبل مع النماذج الفرعية

هل تستطيع رفع مرفق للتجريب ؟؟

db4.rar

رابط هذا التعليق
شارك


Private Sub cmdDisplay_Click()

On Error Resume Next


    Dim Db As DAO.Database

    Dim Rc As DAO.Recordset

    Dim ChequesFound 'the array to hold the values from the table

    Dim ChequeNoStart As Long 'the first check number in the table

    Dim ChequeNoEnd As Long 'The last check number in the table

    Dim i As Long 'index counter

    Set Db = CurrentDb

    'open up the recordset looking at only those checks that do not contain a "V", convert these to Long Values

    Set Rc = Db.OpenRecordset("SELECT CLng(ChequeNo) AS ChequeNumber FROM cheques WHERE ((Left(chequeNo, 1) <> 'V')) ORDER BY CLng(ChequeNo);")

    'Loop to the last recordset

    Do While Not Rc.EOF

	    Rc.MoveNext

    Loop

    'trap incase there are no records

    If Rc.RecordCount = 0 Then

	    MsgBox "No Records Found"

	    GoTo cmdDisplay_Exit

    End If

    'return to the first record and capture all values into the array

    Rc.MoveFirst

    ChequesFound = Rc.GetRows(Rc.RecordCount)

    'the rc.getrows will return a two dimensional array so code accordingly

    ChequeNoStart = ChequesFound(0, 0)

    ChequeNoEnd = ChequesFound(0, UBound(ChequesFound, 2))

    'make sure that the rowsource type for the output list box is value list

    lstMissing.RowSourceType = "Value List"


    DoCmd.SetWarnings False

    DoCmd.OpenForm "nullform"

    DoCmd.RunCommand acCmdSelectAllRecords

    DoCmd.RunCommand acCmdDeleteRecord

    DoCmd.Close acForm, "nullform"

    DoCmd.SetWarnings True


    'set the counter to search from the first cheque number to the last cheque number

    For i = ChequeNoStart To ChequeNoEnd

	    'call the binary search with the temporary array and the cheque number that

	    'is being looked for, if this returns false meaning not found then place it into the

	    'output listbox

	    If BinarySearch(ChequesFound, i) = False Then

		    lstMissing.AddItem i




		    DoCmd.OpenForm "nullform", , , , acFormAdd, acHidden

		    Form_nullform.nnumber = i

		    DoCmd.Close acForm, "nullform"






		    'if not available in 2k then change switch the above with the below

		    'lstMissing.RowSource = lstMissing.RowSource & i & ";"

	    End If

    Next i


    DoCmd.OpenReport "report1", acViewPreview


cmdDisplay_Exit:

    'close references and exit sub

    Set Rc = Nothing

    Set Db = Nothing

End Sub

Private Function BinarySearch(pArray, pTarget As Long) As Boolean

    Dim High As Long

    Dim Low As Long

    Dim Middle As Long

    Dim Found As Boolean


    Low = LBound(pArray, 2) 'set the intitial lowest point of the array

    High = UBound(pArray, 2) 'set the initial highest point of the array


    'perform a loop that uses mid point comparison until either the target value is found or not

    Do While Low <= High And Not Found

	    'take the middle point of the array

	    Middle = Int((Low + High) / 2)

	    'check to see if the target is at this middle point or not

	    If pTarget = pArray(0, Middle) Then

		    'it is so set the found flag to be true

		    Found = True

	    ElseIf pTarget < pArray(0, Middle) Then

		    'it isn't but the target is less than the value at mid point so change the high

		    'value to be one less than the mid point

		    High = Middle - 1

	    Else

		    'the midpoint is lower than the target so set the low value to one more than the

		    'midpoint

		    Low = Middle + 1

	    End If

    Loop


    'set the function return boolean to be equal to whether or not the target was found

    BinarySearch = Found

End Function

انا اقصد اخي ان هذا هوا الكود المستخدم اين مواطن ذكرالجدول الذي يتم استخدامه لتغيرها لتكون مناسبه لكل حالة وكل مالزم تغييره - وهل يمكن ان اربطها علي نموذج ام لابد ان اربطها علي جدول .. وجزاك الله خير

رابط هذا التعليق
شارك

بارك الله فيك اخي محمد ايمن

وسامحنى لو كنت ثقلت عليك

النموذج يعمل بطريقة صحيح

اما التقرير لايعمل بطريقة صحيح

مثال إدخال من 1 إلى 1000 لايظهار الأرقام المحذوف في تقرير

رابط هذا التعليق
شارك

بارك الله فيك اخي محمد ايمن

يعتمد التقرير على النموذج (Form1)

ثم (nullform)

وكذلك الجدول (tab1)

وهذا معقد

إثناء فتح النموذج (Form1)

يتم يتأخر في التقرير

وفي حالة تغيير احد النماذج لايعمل التقرير

رابط هذا التعليق
شارك

اخي الكريم

مبدأ العمل هو كالآتي

الزر display الموجود في form1 يفحص الأرقام الشاغرة في جدول cheques

ثم يقوم بفتح النموذج nullform وهو مرتبط بالجدول tab1 و يقوم بنسخ الأرقام الشاغرة اليه

و اخيرا مصدر التقرير هو من nullform و ليس form1

رابط هذا التعليق
شارك

بارك الله فيك اخي محمد ايمن جزأك الله خير الجزاء

كلامك صحيح

هل يوجد طريقه سهل من ذلك في فحص الأرقام الشاغرة في جدول cheques

هو ربط النموذج form1 بتقرير مباشره

رابط هذا التعليق
شارك

إخوتي الفضلاء

أتابع الموضوع منذ فترة وراقني ما دار بينكم من حوارات أظنها طيبة ، ولكنني رأيت أن أزعجكم بتدخلي بحواركم الطيب لنصل للنتائج المرجوة ، بالطريقة المناسبة أن شاء الله.

ودعونا هنا نحلل الحاجة التي نبحث عنها بابسط الطرق

الأخ عبدالله و الأخ ابو حفص ، يتحدثون عن النماذج و التقارير ، للتعامل مع النتائج وهذه أبسط الطرق للتعامل معها هي الجداول

النتائج قد تكون كبيرة جداً ومتشعبة ، أي أن مواقع الثغرات متقطعة ، و العدد كبير

وقد يصل الرقم أو الأرقام المهملة للآلاف مثلاً

وإختصاراً للوقت نعرض الروتين التالي:

قراءة الأرقام من الجدول المستهدف وتحديد بدايات الثغرات ونهاياته

انشاء جدول مؤقت ونقل مناطق التسلسل الفارغة له ( من ... الى)

إنشاء جدول جديد نقوم بتخزين الارقام المتسلسلة فيه 1 2 3 ... 77 ، 78 ، 79 ، 80 .... وهكذا

هنا يكون لدينا جدول متاح للاستخدام متى نشاء في نموذج أو تقرير

وطبعاً سيكون الأمر - ولا بد - مرنأً وبسيطاً ومتاحاً

سنبداً بالتطبيق ونوافيكم بالنتيجة ، قريباً بإذن الله

.....................

رابط هذا التعليق
شارك

  1. عندي سؤال لماذا عملت جدول حطيت فيه الارقام متسلسلة ... لماذا لم ترتب الارقام المراد ايجاد الناقص منها تنازليا واخذت اكبرها ليكون الحد الاقصي للبحث
  2. (Missing_Seq («MyTable»; «MyField ... انا جربت وفتحت استعلام جديد وقولت اجرب ففتحت الدوال لاقيت دالة ايجاد الارقام الناقصة حطيت اسم الجدول Orders وحطيت اسم الحقل OrderID ولم ينجح التقرير ياتري الخطا فين؟؟؟؟
رابط هذا التعليق
شارك

أخي ابو حفص

  • بدون لماذا عملت ولماذا لم تعمل ، فهذه اسئلة لا مجال لها هنا ، هذا تحليل نفذته بما رأيت في المسألة من حاجات ، فإذا كانت لك حاجات أخرى ، فلا بأس في الأمر وصدرنا يتسع لك طلب نستطيع تنفيذه.
  • ملاحظتك الثانية لم أفهما جيداً ، اذا سمحت وضح الغاية التي تريد الوصول اليها ، حتى نتمكن من تنفيذها لك ، إن شاء الله

رابط هذا التعليق
شارك

من فضلك سجل دخول لتتمكن من التعليق

ستتمكن من اضافه تعليقات بعد التسجيل



سجل دخولك الان
  • تصفح هذا الموضوع مؤخراً   0 اعضاء متواجدين الان

    • لايوجد اعضاء مسجلون يتصفحون هذه الصفحه
×
×
  • اضف...

Important Information