delphi4arab منتديات دلفي للعرب

نسخة كاملة : زيادة ضبط لاجراء مخزن في قاعدة بيانات فايربيرد
أنت حالياً تتصفح نسخة خفيفة من المنتدى . مشاهدة نسخة كاملة مع جميع الأشكال الجمالية .
السلام عليكم ورحمة الله

كنت احاول الليلة السابقة ضبط احد الاجراءات المخزنة ليكون بشكل متالي اكثر
الاجراء كان يستخدم عدد اجراءين مخزنين واردت ان يكون في اجراء واحد فقط

السطور البرمجية كما بالشكل التالي:

كود :
begin
For select
    Sum(body.qin  -  body.qout) NEW_VAR ,
    sanf.mname,
    mitems.mname,
    munit.mname,
    munit.bye_level,
    munit.cell_level
from munit
   inner join mitems on (munit.mindex = mitems.id)
   inner join body on (mitems.id = body.items_no)
   inner join sanf on (mitems.mindex = sanf.id)

where(
(munit.bye_level >= :NEW_VAR)
)


group by sanf.mname, mitems.mname, munit.mname, munit.bye_level,munit.cell_level

into :NEW_VAR, SANF_MNAME, MITEMS_MNAME,MUNIT_MNAME, BEY_LEVEL ,cell_level

DO
  suspend;
end

لاحظوا اهم سطر هو والذي يقوم بحساب مدخلات البضاعة ومبيعاتها .

كود :
Sum(body.qin  -  body.qout) NEW_VAR ,


حقيقة لم يكن هناك متغير هنا والذي هو هنا NEW_VAR وانما هنا حاولت وقلت ربما يضع الناتج في متغير ولكن لم يفعل


فالمهم بالعملية كلها هنا

كود :
where(
(munit.bye_level >= :NEW_VAR)
)


حيث نطلب ان يقوم بفلترة البيانات التي لها حد الشراء يساوي او اكبر من كمية المشتريات - المبيعات
يعني المشتريات 1500 والمبيعات 1300 وحد الشراء 500 اذا
1500-1300=300 وحد الشراء لدينا 500 اذا يتحقق الشرط هنا في Where

ايضا سيكون هذا الحل جيد للضبط لو انه عمل ولكنه لا يعمل مع فايربيرد وهو بالشكل التالي:

كود :
where(
(munit.bye_level >= Sum(body.qin  -  body.qout))
)

الاجراء كان يستخدم اجراء فرعي اخر ليجلب القيمة ويضعها هنا

وجدت البعض يستخدم في فايربيرد شئ يسمى courses حيث يقوم باجراء عمليات علي القيم ولكن النسخة التي عندي ليس فيها هذه الميزة لاضافة شئ كهذا
فقط اسأل اذا مر على احدكم حل بسيط لذلك .
احدى الطرق عدم استخدام عبارة where والقيام بالفلترة من المكون Table او Procedure وجاري البحث عن طرق اخرى
السلام عليكم
حذف عبارة where
تغيير في procedure كما يلي :

كود :
DO
BEGIN
IF (munit.bye_level >= :NEW_VAR) THEN suspend
END
بالتوفيق
السلام عليكم

أجل suspend ، حل بسيط و مثالي