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

عمليه منطقيه أرجو المساعده !

بدأه عمر علاء في 16 يوليو 2014 · 6 رد · 328 مشاهدة · في قواعد بيانات Microsoft Access
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم 
اريد تنفيذ عمليه معينه وهي اضافه سطر في جدول X مثلا 
وعندي جدول اخر y مثلا يحتوي عده بيانات مثلا تاريخين للمقارنه  وقميه ماليه وو 

اريد كيفيه اضافه سطر جديد في جدول x وفقا للشروط الموضوعه في جدول y
اي انه قبل اضافه سطر جديد في X 
يذهب الى جدول y ويتحقق ان كان التاريخ  مثلا يقع قبل التاريخ المدرج مثلا وهكذا . 
وجزاكم الله خيرا  

 

#2

أخي عمر يجب ان تجزأ العملية الى جزئين كالتالي : الجزء الاول هو عملية التحقق من القيم المدخلة من خلال النموذج مع القيم الموجودة في جدول y فإذا تطابقت فان سوف يتم الانتقال الى الجزء الثاني من العملية وهو اضافة البيانات الى جدول x ..لنفترض ان لديك نموذج ادخال بيانات يحتوي على الاسم والرقم السري وتريد ان تتأكد من ان الاسم والرقم الموجودان في النموذج هما مدرجان في جدول y ام لا ..فإذا تطابق اسم الشخص ورقمه السري فسوف يتم ادراج باقي البيانات في جدول x  

 

هنا يلزمنا استعمال دالة ال Elookup للتحقق من الاسم والرقم

 

ضع الكود التالي في وحدة نمطية جديدة وسمها Elookup

Option Explicit
Option Compare Database

Public Function Elookup(Expr As String, Domain As String, Optional Criteria As Variant, _
    Optional OrderClause As Variant) As Variant
On Error GoTo Err_ELookup
     'Purpose:   Faster and more flexible replacement for ELookup()
    'Arguments: Same as DLookup, with additional Order By option.
    'Return:    Value of the Expr if found, else Null.
    '           Delimited list for multi-value field.
    'Author:    Allen Browne. allen@allenbrowne.com
    'Updated:   December 2006, to handle multi-value fields (Access 2007.)
    'Examples:
    '           1. To find the last value, include DESC in the OrderClause, e.g.:
    '               ELookup("[Surname] & [FirstName]", "tblClient", , "ClientID DESC")
    '           2. To find the lowest non-null value of a field, use the Criteria, e.g.:
    '               ELookup("ClientID", "tblClient", "Surname Is Not Null" , "Surname")
    'Note:      Requires a reference to the DAO library.
    Dim db As DAO.Database          'This database.
    Dim rs As DAO.Recordset         'To retrieve the value to find.
    Dim rsMVF As DAO.Recordset      'Child recordset to use for multi-value fields.
    Dim varResult As Variant        'Return value for function.
    Dim strSQL As String            'SQL statement.
    Dim strOut As String            'Output string to build up (multi-value field.)
    Dim lngLen As Long              'Length of string.
    Const strcSep = ","             'Separator between items in multi-value list.

    'Initialize to null.
    varResult = Null

    'Build the SQL string.
    strSQL = "SELECT TOP 1 " & Expr & "  FROM  " & Domain
    If Not IsMissing(Criteria) Then
        strSQL = strSQL & "  WHERE  " & Criteria
    End If
    If Not IsMissing(OrderClause) Then
        strSQL = strSQL & " ORDER BY " & OrderClause
    End If
    strSQL = strSQL & ";"

    'Lookup the value.
    Set db = DBEngine(0)(0)
    Set rs = db.OpenRecordset(strSQL, dbOpenForwardOnly)
    If rs.RecordCount > 0 Then
        'Will be an object if multi-value field.
        If VarType(rs(0)) = vbObject Then
            Set rsMVF = rs(0).Value
            Do While Not rsMVF.EOF
                strOut = strOut & rsMVF![Value].Value & strcSep
                rsMVF.MoveNext
            Loop
            'Remove trailing separator.
            lngLen = Len(strOut) - Len(strcSep)
            If lngLen > 0& Then
                varResult = Left(strOut, lngLen)
            End If
            Set rsMVF = Nothing
        Else
            'Not a multi-value field: just return the value.
            varResult = rs(0)
        End If
    End If
    rs.close

    'Assign the return value.
    Elookup = varResult

Exit_ELookup:
    Set rs = Nothing
    Set db = Nothing
    Exit Function

Err_ELookup:
    MsgBox Err.Description, vbExclamation, "ELookup Error " & Err.Number
    Resume Exit_ELookup
End Function

ومن ثم استعمل الكود التالي في النموذج (بإمكانك استعماله تحت زر أمر مثلا)

If Elookup("*", "table1", "column_name='" & Form![form_name] & "' AND column_pass='" & Form![form_pass] & "'") <> Empty Then
MsgBox "نص الرسالة", vbInformation, "عنوان الرسالة"

DoCmd.close
DoCmd.OpenForm "form1"
Else
MsgBox "نص رسالة الخطأ", vbCritical + vbMsgBoxRight, "عنوان رسالة الخطأ ..."
undo
End If

عند التأكد من تطابق الاسم والرقم السري فإننا سوف نطبق الكود التالي لإدراج بيانات معينة في جدول x (طبعاً تضع الكود التالي مكان الأمر DoCmd.OpenForm "form1" ) 

Dim strSQL As String
strSQL = ("INSERT INTO TABLE1([Colume1] , [Colume2]) VALUES('" & Me!txt1 & "', '" & Me!txt2 & "')")
CurrentDb.Execute strSQL, dbFailOnError
Me.Requery

انتهىت العملية .. ارجو ان تكون واضحة لك .. تحياتي

تم تعديل هذه المشاركة بواسطة SANDANET في 16 يوليو 2014 في 05:18

ما من كاتبٍ إلا سيفنى ... ويبقي الدهر ما كتبت يداه

فلا تكتب بخطك غير شيءٍ ... يسرك في القيامة أن تراه

 

 

مواضيع مفيدة

 

منظومة حضور وغياب موظفين/index.php/topic/290636-%D8%A5%D9%87%D8%AF%D8%A7%D8%A1-%D8%A7%D9%84%D9%89-%D9%85%D9%86%D8%AA%D8%AF%D9%89-%D8%A7%D9%84%D8%A3%D9%83%D8%B3%D8%B3-%D9%85%D9%86%D8%B8%D9%88%D9%85%D8%A9-%D8%AA%D8%B3%D8%AC%D9%8A%D9%84-%D8%AD%D8%B6%D9%88%D8%B1-%D9%88%D8%BA%D9%8A%D8%A7%D8%A8-%D9%85/

#3

جزاك الله خيرا اخي .. 
لكن هل يمكن عملها بالاستعلامات .|

كل مااريده هو اني املك استعلام اضافه .. وعندي جدول يحمل تاريخين مختلفين
 اريد الاستعلام ( استعلام اضافه ) قبلل ان يضيف سطر جديد في جدولمعين ان يذهب الى الجدول الذي فيه التواريخ ويتحقق ان كان التاريخ يقع بينهما ام لا .
اعتقد ان الأمر ابسط من ما وصل اليك مني اخي الفاضل ..  

#4

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

If date >= #date1# And date <= #date2# Then
 
DoCmd.OpenQuery "اسم_الاستعلام", acNormal
 
Else

undo

end if

وان كان خارج نطاق تلك التواريخ فيظهر لك رسالة مثلاً

تم تعديل هذه المشاركة بواسطة SANDANET في 16 يوليو 2014 في 05:57

ما من كاتبٍ إلا سيفنى ... ويبقي الدهر ما كتبت يداه

فلا تكتب بخطك غير شيءٍ ... يسرك في القيامة أن تراه

 

 

مواضيع مفيدة

 

منظومة حضور وغياب موظفين/index.php/topic/290636-%D8%A5%D9%87%D8%AF%D8%A7%D8%A1-%D8%A7%D9%84%D9%89-%D9%85%D9%86%D8%AA%D8%AF%D9%89-%D8%A7%D9%84%D8%A3%D9%83%D8%B3%D8%B3-%D9%85%D9%86%D8%B8%D9%88%D9%85%D8%A9-%D8%AA%D8%B3%D8%AC%D9%8A%D9%84-%D8%AD%D8%B6%D9%88%D8%B1-%D9%88%D8%BA%D9%8A%D8%A7%D8%A8-%D9%85/

#5

ارفقت ملفا صنعته للتو .. لاني الفكرة عندي على ورق لم ابدأ بها .. 

الملف يحتوي جدولين 
فكرة المشروع .. لمدرسه 
اريد ان انشا ميزة الخصم للمدرسه 
هناك نوع من انواعه وهو الخصم النقدي 
وهو ااذا دفع ولي المر خلال مده معينه ( االفترة الاولى ) ياخذ خصم معين 
اذا دفع في الفترة الثانيه ياخذ خصم معين |
بعدها لا يأخذ خصم ..

فكرة البرنامج تعتمدعلى انشاء جدول الحركه Movment يجعل الحركه مدين ودائن في حساب الاب 
بحيث انه اذا اخذ الاب مثلا خصم مقداره 1000 ريال .. يرحل مباشرة الى جانب credit في جدول الحركه 

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

- بالتالي كل مرحله لها قسط مختلف

- هناك فترتين الفترة الدفع خلال الفترة الاةلى خصم معين - الدفع خلال الفترة الثانيه خصم معين - بعدها لايوجد

- تلافي حدوث الخصم اكثر من مرة بالخطا  
 وجزاك الله خيرا

Database411.rar

Database411.rar

تم تعديل هذه المشاركة بواسطة عمر علاء في 16 يوليو 2014 في 06:22

#6

ضع جدول خاص بفترات الخصم يحتوي على ( تاريخ البداية - تاريخ النهاية - مبلغ الخصم ) 

 

وعند الدفع وإدخال تاريخ الدفع نستخدم دالة dlookup لإحضار بيانات السجل الذي يقع تاريخ الدفع بينه ... وبالتاريخ نحضر قيمة الخصم او نسبة الخصم ونجري عليها المعادلة .

mk17481_26bccea871.gif
#7

ارجو منك اخي الفاضل جزاك الله الجنه ان توضح ليا عمليا 
حيث انهما فترتات للخصم وليستا فترة واحده ,, 

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