السلام عليكم
اريد تنفيذ عمليه معينه وهي اضافه سطر في جدول X مثلا
وعندي جدول اخر y مثلا يحتوي عده بيانات مثلا تاريخين للمقارنه وقميه ماليه وو
اريد كيفيه اضافه سطر جديد في جدول x وفقا للشروط الموضوعه في جدول y
اي انه قبل اضافه سطر جديد في X
يذهب الى جدول y ويتحقق ان كان التاريخ مثلا يقع قبل التاريخ المدرج مثلا وهكذا .
وجزاكم الله خيرا
عمليه منطقيه أرجو المساعده !
أخي عمر يجب ان تجزأ العملية الى جزئين كالتالي : الجزء الاول هو عملية التحقق من القيم المدخلة من خلال النموذج مع القيم الموجودة في جدول 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
ما من كاتبٍ إلا سيفنى ... ويبقي الدهر ما كتبت يداه
فلا تكتب بخطك غير شيءٍ ... يسرك في القيامة أن تراه
مواضيع مفيدة
جزاك الله خيرا اخي ..
لكن هل يمكن عملها بالاستعلامات .|
كل مااريده هو اني املك استعلام اضافه .. وعندي جدول يحمل تاريخين مختلفين
اريد الاستعلام ( استعلام اضافه ) قبلل ان يضيف سطر جديد في جدولمعين ان يذهب الى الجدول الذي فيه التواريخ ويتحقق ان كان التاريخ يقع بينهما ام لا .
اعتقد ان الأمر ابسط من ما وصل اليك مني اخي الفاضل ..
أخي الكريم انا أرى ان لو تضع مثالك هنا عسى ولعل نستطيع مساعدتك فيه على قدر الإمكان .. بالنسبة لطريقة عملها بالاستعلامات فيمكن ان تستخدم عبارة if بشكل بسيط بدل كود Elookup حيث تقوم عبارة if بمقارنة التاريخ الحالي بالتواريخ الموجودة في جدولك فإن كان ضمن تلك التواريخ فإنه سوف ينفذ الاستعلام
If date >= #date1# And date <= #date2# Then DoCmd.OpenQuery "اسم_الاستعلام", acNormal Else undo end if
وان كان خارج نطاق تلك التواريخ فيظهر لك رسالة مثلاً
تم تعديل هذه المشاركة بواسطة SANDANET في 16 يوليو 2014 في 05:57
ما من كاتبٍ إلا سيفنى ... ويبقي الدهر ما كتبت يداه
فلا تكتب بخطك غير شيءٍ ... يسرك في القيامة أن تراه
مواضيع مفيدة
ارفقت ملفا صنعته للتو .. لاني الفكرة عندي على ورق لم ابدأ بها ..
الملف يحتوي جدولين
فكرة المشروع .. لمدرسه
اريد ان انشا ميزة الخصم للمدرسه
هناك نوع من انواعه وهو الخصم النقدي
وهو ااذا دفع ولي المر خلال مده معينه ( االفترة الاولى ) ياخذ خصم معين
اذا دفع في الفترة الثانيه ياخذ خصم معين |
بعدها لا يأخذ خصم ..
فكرة البرنامج تعتمدعلى انشاء جدول الحركه Movment يجعل الحركه مدين ودائن في حساب الاب
بحيث انه اذا اخذ الاب مثلا خصم مقداره 1000 ريال .. يرحل مباشرة الى جانب credit في جدول الحركه
سترى اخي جدول الخصم .. سترى انه يوجد قسط يدفعه الاب .. لا اعلم كيف ارتب بين عناصر هذه المعادله ..
كيف ساقوم بها
-كل مرحله لها مصاريف مختلفه
- بالتالي كل مرحله لها قسط مختلف
- هناك فترتين الفترة الدفع خلال الفترة الاةلى خصم معين - الدفع خلال الفترة الثانيه خصم معين - بعدها لايوجد
- تلافي حدوث الخصم اكثر من مرة بالخطا
وجزاك الله خيرا
تم تعديل هذه المشاركة بواسطة عمر علاء في 16 يوليو 2014 في 06:22
ضع جدول خاص بفترات الخصم يحتوي على ( تاريخ البداية - تاريخ النهاية - مبلغ الخصم )
وعند الدفع وإدخال تاريخ الدفع نستخدم دالة dlookup لإحضار بيانات السجل الذي يقع تاريخ الدفع بينه ... وبالتاريخ نحضر قيمة الخصم او نسبة الخصم ونجري عليها المعادلة .

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