سؤال

أولا ، لا أستطيع تحمل كريستال! حسنًا ، هذا خارج صدري ...

الآن ، لدينا عجوز VB6 التطبيق الذي نحتفظ به لعميل ، والذي يستخدم مكتبة الأتمتة الكريستالية لتغيير صيغ تحديد السجلات برمجيًا في مجموعة من تقارير كريستال 8.5 تقارير.

هناك تقريرين متطابقين تقريبا. اضطررت إلى تغييرها مؤخرًا لإضافة حقل آخر من جدول آخر. عندما أضفت الجدول إلى التقارير ، أثناء إضافته في المصمم البصري ، لم يضيفه في جملة من عبارة SQL. لذلك ، قمت بتحرير عبارة SQL يدويًا لإضافة الانضمام الإضافي. KO ، يعمل بشكل رائع. إذا قمت بتشغيل التقارير في وضع Crystal Preview ، فإنها تعمل تمامًا كما هو متوقع.

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

يقوم الرمز بتعيين صيغ التحديد باستخدام الوظيفة PESetSelectionFormula. لقد تحقق من أن السلسلة التي يتم تمريرها إلى الوظيفة لأن صيغة التحديد الجديدة صحيحة من خلال فحص خطوة للمتغيرات. الدعوة إلى PESetSelectionFormula يبدو أنه يعمل بشكل جيد ، ويعيد قيمة 1 ، والتي تقترب من العثور على أي مكان تشير إلى النجاح. (التقرير الآخر ، الذي يعمل بشكل جيد من الكود يعود أيضًا 1.)

ومع ذلك ، فإن التقرير فشل مع خطأ: Error Code: 534 - Error detected by database DLL. الكود ، لأغراض تصحيح الأخطاء يتفريغ سلسلة SQL التي يتم استخدامها حاليًا من قبل التقرير. SQL يخرج من التقرير هو:

SELECT ... FROM ... 
WHERE

ORDER BY ...

كما ترون ، فإن البند حيث يكون الفقرة فارغة ، وهو ما أتخيله هو السبب في أن قاعدة البيانات DLL تتصاعد في هذا البيان. لا أفهم لماذا لا تقوم مكتبة الأتمتة بتعيين الفقرة على الرغم من أن الدعوة إلى PESetSelectionFormula يتم تمرير سلسلة صالحة ويعود النجاح. اعتقدت أنه ربما كان ذلك لأنني قمت بتحرير SQL يدويًا في التقرير لإضافة الجدول الذي لم يكن يضيفه ، لكنني فعلت نفس الشيء في التقرير الآخر تقريبًا ، وأنه يعمل بشكل جيد.

أي شخص لديه أي أفكار لماذا PESetSelectionFormula قد الإبلاغ عن النجاح ولكن لا تفعل أي شيء في الواقع؟

ملاحظة لقد حاولت بالفعل القيام قاعدة البيانات> التحقق من قاعدة البيانات من القوائم ، وقال أن التقرير كان محدثًا ولم يساعد على الإطلاق.

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

المحلول 3

حسنًا ، هذا أمر نموذجي لسبب احتقار تقارير كريستال.

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

أنا حقًا لا أحب البرامج التي تتوقف تلقائيًا وتبدأ العمل مثل هذا. شكرا على الأفكار.

نصائح أخرى

لم أستخدمها أبدًا pesetselectionformula, ، لكنني واجهت مشاكل في استيراد البيانات المقبولة خلاف ذلك:

  1. هل يستخدم استعلام SQL النهائي أي وظائف غير شائعة ، أي NZ ()؟ لا يتعرف Crystal دائمًا على وظائف VB ، IMHO.

  2. هل لديك أي قيم خالية في بياناتك المستوردة التي تخلق تعارضات؟

  3. بعد جمع بياناتك ، هل يمكنك وضعها في جدول مؤقت وإخبار Crystal لالتقاط البيانات من جدول Temp هذا؟ إذا كانت لديك مشاكل مع #1 أو #2 ، فقد يكون هذا حلًا جيدًا.

في بعض الإصدارات من CR ، يلحق pesetselectionformula القيمة الجديدة إلى صيغة اختيار السجلات الحالية ، في الإصدارات الأخرى ، pesetselectionformula يستبدل صيغة اختيار السجل الحالية مع القيمة الجديدة.

لا أتذكر متى حدث هذا المفتاح ، ولكن يجب أن يكون من السهل عليك تحديد السلوك الذي يحدث.

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