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

موضوع مهم بشأن التقارير وجمل الإستعلام لبرنامج على شبكة

بدأه moutazyahia في 11 مايو 2013 · 10 رد · 1,238 مشاهدة · في قسم التقارير
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

هذا الموضوع من الأهمية بمكان

 

بعد قيام أي مبرمج منا بعمل برنامج ولا سيما إذا كان على شبكة ويعمل عليه موظفون كثر نقوم بعمل التقارير اللازمة لهذا البرنامج.

 

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

 

المشكلة تكمن هاهنا :

 

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

 

فبالطبع فإن النتيجة المنطقية التي سيراها الجميع هو أخر إستعلام تم وبهذا تخرج نتائج خاطئة للجميع فلو أن الموظف الأول استدعى التقرير

الثاني من حيث الترتيب استدعاه بشروط أخرى

والثالث استدعاه بشروط مختلفة عن الأول والثاني

فإن النتيجة التي ستظهر للجميع هي النتيجة للموظف الثالث

 

وهذا مكمن المشاكل كما ترون.

 

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

 

أتمنى أن أجد جوابا لديكم وأجد اهتماما فالأمر مهم جداً وزكاة العلم تعليمه

وتقبلوا أطيب تمنياتي.

#2

اتمنى أي لمحة اي فكرة ترشدني فقط لما أريد أرجو التجاوب مع الموضوع فهو حقا موضوع مهم أنا بانتظار أي فكرة لكم خالص تحياتي

#3

السلام عليكم ...

في سيكوال سيرفر يمكن وضع قفل على الجدول أو قفل بشكل عام .. لمنع التنفيذ المتوازي ...

alter proc Test AS
BEGIN
BEGIN TRAN
DECLARE @result int
print 'begin'
EXEC @result = sp_getapplock @Resource = 'Form1',  @LockMode = 'Exclusive'

WHILE(1 = 1)
BEGIN
print 'fff'
END
--do whatever you want here. no concurrent execution

EXEC @result = sp_releaseapplock @Resource = 'Form1'
COMMIT TRAN
print 'end'
END
1

لا إله إلا الله ... محمد رسول الله

لو كانت مشاركتي مفيدة و تريد تشجيعي على المزيد من العطاء , فضلا قم بتقييم المشاركة

المعرًف القديم : houssam11350_11350

من مواضيعي : ArabGenCode : مولد كود و إجراءات مخزنة و واجهات لجداول سيكوال سيرفر

#4

جزاك الله خيرا على المشاركة والتفاعل

 

واسأل الله أن يجزيك خير الجزاء

 

عزيزي الفكرة باختصار كيف أقوم بتصميم تقارير تعتمد على إستعلام داخل سيكوال وليس مجرد جملة سليكت

 

حيث لدي عدد 50 مستخدم سيقوم كل منهم بطلب نفس التقرير بذات الوقت وكل بشروط مختلفة فالفكرة التي أعتمد عليها كالتالي

hot.Execute "DROP VIEW cut"
hot.Execute "CREATE VIEW cut AS SELECT sector as [الفرع], TypeApp AS [نوع الشكوى], AppType AS [نوع الاتصال], COUNT(TypeApp) AS العدد,Applications.cases AS الحالة,kind From  dbo.Applications INNER JOIN dbo.FOLLOW ON dbo.Applications.IdApp = dbo.FOLLOW.IDAPP WHERE  (Dater BETWEEN '" & DTPicker1.Value & "' AND '" & DTPicker2.Value & "')  AND (Timer BETWEEN CONVERT(DATETIME, ' 1899-12-30 " & Combo1.Text & "', 102) AND CONVERT(DATETIME, '1899-12-30 " & Combo2.Text & "', 102)) and (foldate BETWEEN '" & DTPicker3.Value & "' AND '" & DTPicker4.Value & "')  AND (foltime BETWEEN CONVERT(DATETIME, ' 1899-12-30 " & Combo24.Text & "', 102) AND CONVERT(DATETIME, '1899-12-30 " & Combo25.Text & "', 102)) and (" & Text1.Text & ") GROUP BY sector, AppType, Applications.cases , TypeApp,kind "

وبالتالي فإن البرنامج تلقائي يقوم بحذف الإستعلام القديم ووضع إستعلام جديد طبقا للشروط الجديدة المرسلة

وبهذا فإن ال 50 مستخدم لن يظهر امامهم إلا نتيجة واحدة وهي النتيجة التي أرسلت من أخر مستخدم وهذا خطأ

فهل من فكرة أو طريقة تساعدني على جعل ال 50 مستخدم يستعلمون ويرسلون ما يشائون دون تعارض وتظهر التقارير طبقا للنتيجة الصحيحة

جزاكم الله خيرا

تم تعديل هذه المشاركة بواسطة moutazyahia في 13 مايو 2013 في 13:25

#5

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

ممكن تضع لما كود إظهار التقرير ..

لا إله إلا الله ... محمد رسول الله

لو كانت مشاركتي مفيدة و تريد تشجيعي على المزيد من العطاء , فضلا قم بتقييم المشاركة

المعرًف القديم : houssam11350_11350

من مواضيعي : ArabGenCode : مولد كود و إجراءات مخزنة و واجهات لجداول سيكوال سيرفر

#6

أخي لو ممكن توضح حتى أفهم

 

انا أجعل مصدر التقرير بالفعل إستعلام ولكنه ليس إستعلام ثابت بمعايير ثابتة

 

لأن ممكن كل واحد يطلب نفس هذا الإستعلام ولكن بشروط مختلفة

 

قد يطلبه أحمد بتاريخ 1/5/2013 حتى 7/5/2013

وقد يطلبه محمد بتاريخ 8/5/2013 حتى 13/5/2013

 

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

 

كما ذكرت لحضرتك بالكود السابق

 

ولست متمسكا بهذه الطريقة ولكن لو هناك حل أخر ؟

تم تعديل هذه المشاركة بواسطة moutazyahia في 13 مايو 2013 في 13:50

#7

في الكود السابق , انت تقوم بإنشاء view  ثم تجعل مصدر التقرير هو ذلك الــ view  ..

لماذا لا تجعل مصدر التقرير هو عبارة sql  مباشرة (SELECT FROM) .. ألا يمكن ذلك .؟؟

لا إله إلا الله ... محمد رسول الله

لو كانت مشاركتي مفيدة و تريد تشجيعي على المزيد من العطاء , فضلا قم بتقييم المشاركة

المعرًف القديم : houssam11350_11350

من مواضيعي : ArabGenCode : مولد كود و إجراءات مخزنة و واجهات لجداول سيكوال سيرفر

#8

هل من مثال أجعل فيه جملة السليكت مصدر للتقرير وكيف أقوم بتعريف التقرير بهذه الجملة

 

وأسف لو أثقلت عليك بكثرة الأسئلة

#9

وسؤال أخير كيف ارسل مجموعة الشروط لجملة الإستعلام

#10

السلام عليكم ...

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

لا إله إلا الله ... محمد رسول الله

لو كانت مشاركتي مفيدة و تريد تشجيعي على المزيد من العطاء , فضلا قم بتقييم المشاركة

المعرًف القديم : houssam11350_11350

من مواضيعي : ArabGenCode : مولد كود و إجراءات مخزنة و واجهات لجداول سيكوال سيرفر

#11

جزاك الله خيرا أخي وبارك الله فيك علما أنني لم أتوصل لحل حتى الأن ولكن بارك الله فيك ومشكور جدا على المساعدة

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

عدد الزوار حالياً

المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية

—الإجمالي—أعضاء مسجّلون—زوار بدون تسجيل

جارٍ التحقق من المتواجدين…