ما عمل دالة Filter ؟
ارجو الإجابة بالتفصيل .
ولمن يعرف هل هناك دالة تشابهها في الأكسس ؟
وللجميع التحية
ما عمل دالة Filter ؟
ارجو الإجابة بالتفصيل .
ولمن يعرف هل هناك دالة تشابهها في الأكسس ؟
وللجميع التحية
من عيوني الثنتين
انتظر الجواب قريبا ان شاء اللــــــــــــــــــــــه
.
.
.
.
.
.
اخوك (((((( الدولار ))))))
[shdw]بسم اللـــــــــــ الرحمن الرحيم ـــــــــــــه[/shdw]
[gl]الخاصية Filter[/gl]
تعيد أو تضبط القيمة التي تحدد السجلات الموجودة في الغرض Recordset فتح تسلسليا (خاصة بمجال العمل Microsoft Jet فقط ).
التطبيق على الأغراض :
Dynaset-Type Recordset , Recordset , Snapshot-Type Recordset , Forward-Only-Type Recordset
الوضعيات والقيم العائدة :
ان الوضع أو القيم العائدة هي معطيات نوع String والتي تحتوي على العبارة WHERE من عبارة SQL بدون الكلمة المحجوزة WHERE .
ملاحظــــــــــــات :
استخدم الخاصية Filter لتبيق المرشح على الغرض Recorset من النوع Dynaset أو النوع Snapshot أو Forward-Only-Type Recordset .
تستطيع استخدام الخاصية Filter لتقييد السجلات العائدة من غرض موجود عند فتح غرض Recordset جديد معتمدا على غرض Recordset موجود . في كثير من الحالات , إن اسرع طريقة لفتح غرض Recordset جديد هي بإستخدام عبارة SQL محتوية على الجملة WHERE .
استخدم صيغة التاريخ الأمريكي وهي (شهر - يوم - سنة) عندما تحتوي الحقول المرشحة على التواريخ , وذلك حتى لو تكن مستخدما النسخة الأمريكية من محرك قاعدة معطيات Microsoft Jet (وذلك في الحالة التي يجب فيها أن تجمع أي تواريخ مع سلاسل متسلسلة (متصلة مع بعضها البعض ) , مثلا : (strMonth & "-" & strDay & "-" & strYear ) وإلا , فقد لا ترشح المعطيات كما تتوقع .
إذا ضبطت الخاصية الى سلسلة متواصلة مع قيمة غير صحيحة , وباراميترات النظام تحدد رمز عشري غير أمريكي مثلا كفاصة (مثلا: strFilter = "PRICE > " & LngPrice, & LngPrice = 125.50) سيحدث خطاء ما عندما تحاول فتح Recordset التالي , وهذا يحدث لأنه خلال هذا التسلسل سيحول الرقم الي سلسة بإستخدام الرمز العشري الافتراضي للنظام , لكن Microsoft Jet SQL تقبل فقط الرموز العشرية الأمريكية .
مثال :-
يستخدم هذا المثال الخاصية Filter لإنشاء Recordset موجود معتمدا على شرط (حالة) محدد (محددة) . إن التابع FilterField مطلوب لهذا الاجراء حتى ينفذ
Sub FilterX()
Dim dbsNorthwind As Database
Dim rstOrders As Recordset
Dim intOrders As Integer
Dim strCountry As String
Dim rstOrdersCountry As Recordset
Dim rstMessage As String
Set dbsNorthwind = OpenDatabase("Northwind.mdb")
Set rstOrders = dbsNorthwind.OpenRecordset("Orders", _
dbsOpenSnapshot)
' Populate the Recordset
rstOrders.MoveLast
intOrders = rstOrders.RecodrCount
' Get user input
strCountry = Trim(InputBox( _
"Enter a country to filter on:"))
If strCountry <> "" Then
'Open a filtered Recordset object.
Set rstOrdersCountry = _
FilterField(rstOrders, "ShipCountry", srtCountry)
With rstOrdersCountry
' Check RecordCount before populating Recordser;
' otherwise, error may result.
If RecordCount <> 0 Then .MoveLast
' Print number of records for the original
' Recordset object and the filtered Recordset
' object.
strMessage = "Orders in original Recordset: " & _
vbCr & intOrders & vbCr & _
"Orders in filtered Recordset (Country = '" & _
strCountry & "'):" & vbCr & .Recordset
MsgBox strMessage
.Close
End With
End If
rstOrders.Close
dbsNorthwind.Close
End Sub
Function FilterField(rstTemp As Recordset, _
strField As String, strFilter As String) As Recordset
' Set a filter on the specified Recordset object and then
' Open a new Recordset object .
rstTemp.Filter = strField & " = '" & strFilter & "'"
Set FilterField = srtField.OpenRecordset
End Function
تنويه : إذا رغبت في مشاهدة تأثيرات الترشيح rstRecordset يجب أن تضبط الخاصية Filter , وعندئذ افتح غرض Recordset ثانية معتمدا على rstOrders .
تنويه : عندما تعرف المعطيات الي تريد أن تختارها فإنها عادة تكون أكثر كفاءة لإنشاء Recordset بعبارة SQL , يبين هذا المثال كيف تستطيع أن تنشئ Recordset واحد وتحصل على سجلات من بلد مستقل
Sub FilterX2()
Dim dbsNorthwind As Database
Dim rstOrders As Recordset
Set dbsNorthwind = OpenDatabase("Northwind.mdb")
' Open a Recordset object that selects recordset form a
' table based on the shipping country .
Set rstOrders = _
dbsNorthwind.OpenRecordset("SELECT * " & _
"FROM Orders WHERE ShipCountry = 'KSA'", _
dbOpenSnapshot)
rstOrders.Close
dbsNorthwind.Close
End Sub:o :o :o
واخيرا ارجوا من اللــــــــــه ان اكون قد وفقت بإجابة على سؤالك اخي الكريم ابو حمود
هذا كل مالدي حاليا
ارجوا المعذرة ان بدر مني اي تقصير
تقبلوا تحياتي
اخوكم ------------> (((((( الدولار ))))))
الأخ الكريم الدولار
شرح وافي كافي بارك الله فيك وزادك علماً ووفقك لكل خير ولكنه ليس ما اطلب .
الدالة التي أسأل عنها تجدها في الكود التالي وعملها تجزئة العبارة الى كلمات متتالية :
Public Function NeatSplit(ByVal Expression As String, _ Optional ByVal Delimiter As String = " ", _ Optional ByVal Limit As Long = -1, _ Optional Compare As VbCompareMethod = vbBinaryCompare) _ As Variant Dim varItems As Variant, i As Long varItems = Split(Expression, Delimiter, Limit, Compare) For i = LBound(varItems) To UBound(varItems) If Len(varItems(i)) = 0 Then varItems(i) = Delimiter Next i NeatSplit = Filter(varItems, Delimiter, False) End Function
مرر لهذه الدالة أي عبارة تحوي عدة كلمات كالتالي :
Dim x As Variant
x = NeatSplit("شكراً لك أخي الدولار")
For i = LBound(x) To UBound(x)
MsgBox x(i)
Next i
المشكلة في السطر :
NeatSplit = Filter(varItems, Delimiter, False)
حيث لم أعرف المقابل له في الأكسس وفي VB يشتغل بدون أية مشاكل .
لذلك طلبت من يوضح عملها لي .
واكرر شكري على هذا الشرح الذي أجزم أنه سيستفاد منه .
ولك تحياتي
العفوا اخي الكريم ابو حمود ما سوينا غير الواجب
اما بالنسبة للكود السابقة فانا كما قمت سابقا بإعلامك بأنني مبتدء جدا جدا جدا بالاكسيس ومعلوماتي به طفيفة جدااااااااااااااااا
فلذلك انا ااسف لعدم مقدرتي للاجابة على سؤالك
اكرر اسفي
تحياتي ------------> (((((( الدولار ))))))
السلام عليكم
الوظيفة Filter كما ترى هي في نفس الوقت:
عنصر للكائن Recordset الذي ينتمي للمكتبة ADODB
و عنصر في الوحدة النمطية Strings للمكتبة VBA الموجودة في فجوال بيسك وأكسس
كما أن هناك وظيفة Filter في المكتبة ACCESS تطبق على النموذج والتقرير لتصفية السجلات وهذه الوظيفة في الأكسس تتعارض مع وظيفة المكتبة VBA (ولهذا فإن الوظيفة تعمل في الفيجوال بيسك حيث لا يحتوي المكتبة ACCESS في مراجعه فيقوم بتنفيذها فورا من المكتبة VBA )
أما بالنسبة للأكسس فهو يعتقد أنك تريد وظيفة المكتبة أكسس والتي تختلف في الشكل والعمل فيحدث الخطأ ولحل هذا الخطأ قم بالإشارة إلى مسار الوظيفة كاملا
فبمثالك بدل السطر الذي ذكرته إلى
NeatSplit = VBA.Strings.Filter(varItems, Delimiter, False)
وهذه الطريقة تنفع في حل كثير من التعارضات التي قد تحصل بين عناصر الكائنات
وتحياتي لك (f) (f)
ارغب في مثال لكيفية استخدام الداله Filter مع Date ، حاولت ان انفذ هذا الكود ولم استطع
DEMail.rsCOMrm.Filter = "regmassge.dateofsinding = strMonth &' - '& strDay & ' - ' & strYear"
:( :( :( :( :( :( :(
الأخ عامر جوز
وعليكم السلام ورحمة الله
حرم الله وجهك عن النار .
لقد تعبت في حل هذه المشكلة ولم استطع .
وقد افدتني هنا فائدتين لكيفية استخدام الدوال عند التعارض والثانية حل المشكلة زادك الله علماً .
ولكن لي رغبة أن تشرح عملها إن تيسر لك ذلك .
وفقك الله كل خير ويسر لك أمرك .
ولك تحياتي
الأخ عامر جوز
آمل الاطلاع على هذا الموضوع والمشاركة إذا كان لديكم حل للمشكلة .
http://www.arabteam2000.com/vb/showthread....p?threadid=7075
ولك تحياتي
ولو أخوي ابو حمود إنت مفضّل علينا وعالمنتدى ومشاركاتي بسيطة وقليلة
الله يحفظك ويخليك ويسلمك
بالنسبة لسؤالك أن اشرح عملها فلم تحدد أي واحدة من الثلاثة تريد وظيفة النصوص أم الأخريتين..:confused:
مع أنني لم أستخدم إلا وظيفة مجموعة السجلات Recordset التي شرحها الأخ الدولار مشكور وأعتقد أن وظيفة المكتبة Access مشابهة لها
قصدت دالة Filter في هذا السطر :
NeatSplit = VBA.Strings.Filter(varItems, Delimiter, False)
ولك تحياتي
تكرم أخوي
[gl]الدالة Filter:[/gl]
تقوم هذه الدالة بالبحث في مصفوفة نصية ذات بعد واحد عن نص معين وتعيد مصفوفة أخرى تحتوي فقط العناصر التي تتضمن (أو لا تتضمن!) النص الذي نبحث عنه. بعبارة أخرى تصفية المصفوفة حسب شرط نحدده..
صيغة الدالة كالتالي
arr() = Filter(Source(), Search, [Include], [CompareMethod])
إذا كانت قيمة الوسيطة Include هي TRUE (وهي الافتراضية) فإن المصفوفة الناتجة تحوي جميع عناصر المصفوفة الأصلية التي تتضمن نص البحث /Search/، وإذا كانت FALSE فإن المصفوفة الناتجة تحوي العناصر التي لا تتضمن نص البحث (كما في مثالك).
أما الوسيطة CompareMethod فتحدد فيما إذا كان البحث حساس لحالة الأحرف vbBinaryCompare أو لا vbTextCompare
مثال:
Dim s(2) As String
s(0) = "First": s(1) = "Second": s(2) = "Third"
Dim res() As String
res = Filter(s, "i", True, vbTextCompare)
' Print the result array ("First" and "Third").
For i = 0 To UBound(res): Print res( i ): Nextأرجو أن أكون قد وضحت
مع تحياتي (f) (f)
الأخ عامر
مشكور وزادك الله علما علىهذه المعلومات الجديدة .
ولك تحياتي
هذا الموضوع مغلق.