سؤال

أحاول تصفية بعض السجلات من المعرفة. قمت بتعيين الخاصية المرشح إلى True وعندما قمت بتعيين المرشح إلى الحقل = "القيمة"، كل شيء يعمل بشكل جيد. أود بناء هذا المرشح ديناميكيا عن طريق إلحاق

<space>AND field='value'

إلى قيمة حقيقية دائما، وفكرت 1 = 1 من شأنها أن تفعل الخدعة. لذلك سيكون لدي 1 = 1 كمرشح افتراضي ثم إلحاق فقط AND field='value' لذلك حسب الضرورة.

هذا، ومع ذلك، لا يعمل. قراءة رسالة الخطأ:

الحجج هي من النوع الخطأ، خارج نطاق مقبول، أو تتعارض مع بعضها البعض.

هل يمكن لأي شخص أن يقول لي ما الذي يمكنني استخدامه كتعبير حقيقي متعدد الاستخدامات لهذا المرشح؟

هل كانت مفيدة؟

المحلول

أفترض أنه يذهب دون أن يقول، لكنه يعتمد على موفر OLE DB سواء كان هذا يعمل أم لا. عندما تقوم بتعيين عامل تصفية في مجموعة سجل موجودة، فإنه ينتهي من خلال واجهة OLE DB مختلفة (IViewFilter إذا كنت أتذكر بشكل صحيح). لذلك حتى إذا كان المرشح يعمل في جملة حيث في عبارة SQL، فهذا لا يعني بالضرورة أنه سيعمل كمرشح. يتنتهي المرشح الذي قمت بتعيينه بالتحليل بعيدا في قطع المكونات ثم تم تمريرها إلى واجهة OLE DB. قد يكون تنفيذ مقدم الخدمة لا يتوقع مرشح النموذج "ثابت = ثابت". كحل مؤقت، قد تحاول إعداد كل شيء في جملة WHERE من عبارة SQL.

نصائح أخرى

يجب عليك تعيين الخاصية "تصفية" إلى False إذا لم تكن تصفية شيء ما، فقم بتعيينها صحيحا وحالتك عندما تريد تصفية النتائج.

وأود أن بناء خاصية SQL الصحيحة الصحيحة على الرغم من أنك تعرف دائما ما يتم إرساله بالضبط إلى قاعدة البيانات (وأنت متأكد من أن تلك السجلات التي تريدها فقط يتم استلامها بواسطة برنامجك).

1 = 1 خدعة تعمل بشكل جيد في جملة الاستعلام، ولكن ليس في الخاصية المرشح. إذا كنت ترغب في تعطيل المرشح، فقم بتعيين تصفيتها إلى False وسيتم إرجاع جميع السجلات.

المشكلة مع التصفية هي أنه تم القيام به جانب العميل. إذا كنت تستخدم مشغل قاعدة بيانات مثل SQL Server ويتوقع أن يكون لديك مجموعة كبيرة من السجلات للتصفية، ثم تخدم أفضل من خلال تغيير استعلام SQL الذي سيسمح لخادم قاعدة البيانات بإرجاع السجلات المطلوبة فقط. فقط تذكر أن تغلق المعرفة الخاصة بك أولا، قم بتغيير SQL ثم إعادة فتح.

هناك خدعة أستخدمها لتجنب إعادة مجموعة بيانات كاملة (المستخدمة في مجموعات البيانات الكبيرة) هي النظر في عدد أقصى من السجلات التي أرغب في عرضها، ثم استخدم بناء جملة SQL الأعلى لإرجاع أكثر من عدد السجلات التي أردت عرضها "N '... إذا وصلت إلى هذا الرقم، فأخطر المستخدم بأن هناك أكثر من سجلات N-1 التي تم إرجاعها وضبط معايير البحث / المرشح.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top