![]() |
|
كيف اقوم بتحديث مخزون - نسخة قابلة للطباعة +- delphi4arab منتديات دلفي للعرب (https://delphi4arab.net/forum) +-- قسم : منتديات دلفي للعرب التعليمية (https://delphi4arab.net/forum/forumdisplay.php?fid=3) +--- قسم : سؤال و جواب حول دلفي (https://delphi4arab.net/forum/forumdisplay.php?fid=15) +--- الموضوع : كيف اقوم بتحديث مخزون (/showthread.php?tid=12351) الصفحات:
1
2
|
كيف اقوم بتحديث مخزون - bouh25 - 21-07-2023 قمت بهذا البرنامج الصغير الذي يقوم بتحديث مخزون لقاعدة البيانات الاولى inventory_first بواسطة قاعدة البيانات الثانية inventory_second لكن عند التنفيذ يضهر لي خطأ لم اتعرف عليه _ قاعدة البيانات من نوع Firebird المثال موجود PHP كود : UPDATE inventory_first inv1RE: كيف اقوم بتحديث مخزون - Delphi4Us - 25-07-2023 خطاء جملة Update لا يوجد فيها العبارة Form وهي تستخدم مع Select فاذا اردت ان تستخدم تحديث باختيار قيم معينة استخدم كود : UPDATE SET A=:A , B=:B (SELECT FROM ....)مثلما تستخدم INSERT كود : insert into INVENTORY_FIRST (PRODUCT_ID, NOMPRODUIT, QUANTITY_IN_STOCK)
select PRODUCT_ID, NOMPRODUIT, QUANTITY_IN_STOCK
from INVENTORY_FIRST RE: كيف اقوم بتحديث مخزون - bouh25 - 31-07-2023 لم يعمل المثال RE: كيف اقوم بتحديث مخزون - larbiparadox - 31-07-2023 إذا كنت تستعمل Firebird ، إستعمل MERGE : تقوم بتحديث جدول وفق شروط معينة https://firebirdsql.org/refdocs/langrefupd21-merge.html RE: كيف اقوم بتحديث مخزون - larbiparadox - 31-07-2023 لتحديث المخزون في الجدول الأول ، سيقوم بتحديث الجدول الول بشرط الكمية تكون متاحة نكتب كود : Merge into INVENTORY_FIRST as inv1
using (
select PRODUCT_ID, sum( quantity_in_stock ) as quantity_in_stock_2
from INVENTORY_SECOND
group by PRODUCT_ID
) inv2
on inv1.PRODUCT_ID = inv2.PRODUCT_ID and inv1.quantity_in_stock >= quantity_in_stock_2
WHEN matched THEN
update set quantity_in_stock = quantity_in_stock - quantity_in_stock_2وفي حالة الكمية غير متاحة يكتب لنا الكمية غير كافية بكتابة أخرى كود : Merge into INVENTORY_FIRST as inv1
using (
select PRODUCT_ID, sum( quantity_in_stock ) as quantity_in_stock_2
from INVENTORY_SECOND
group by PRODUCT_ID
) inv2
on inv1.PRODUCT_ID = inv2.PRODUCT_ID and inv1.quantity_in_stock < quantity_in_stock_2
WHEN matched THEN
update set availability = 'الكمية غير كافية'RE: كيف اقوم بتحديث مخزون - bouh25 - 01-08-2023 المثال الاخير يظهر خطأ لم اتعرف عليه قي السطر الاخير الصورة RE: كيف اقوم بتحديث مخزون - larbiparadox - 01-08-2023 (01-08-2023, 04:23 PM)bouh25 كتب : المثال الاخير يظهر خطأ لم اتعرف عليه قي السطر الاخير في مثالك الاول : انت تظهر حقل إسمه availability في حالة عدم كفاية الكمية يكتب فيها "الكمية غير كافية" في المثال الذي أرفقته لا يوجد فيه هذا الحقل عليك بإضافته RE: كيف اقوم بتحديث مخزون - bouh25 - 02-08-2023 ما المقصود بالسطر inv1.availability = في المثال الذي ارفقته RE: كيف اقوم بتحديث مخزون - larbiparadox - 02-08-2023 (02-08-2023, 09:20 AM)bouh25 كتب : ما المقصود بالسطر هذا أنت وضعته و لست أنا ![]() حسب ما فهمت أنا من الكتابة التي وضعتها أنت : 1 ـ يوجد جدول مخزون رئيسي إسمه INVENTORY_FIRST يحتوي على الحقول التالية : PRODUCT_ID INTEGER, NOMPRODUIT VARCHAR(25), QUANTITY_IN_STOCK NUMERIC(10,2), AVAILABILITY VARCHAR(20) 2 - يوجد جدول ثانوي إسمه INVENTORY_SECOND يحتوي على الحقول التالية : PRODUCT_ID INTEGER, QUANTITY_IN_STOCK INTEGER ـ في الجدول الثاني نقوم بإخراج سلع معينة وذلك من خلال PRODUCT_ID رقم المنتج المشترك بين الجدول الأول و الثاني ، لما نقوم بإنقاص السلع الموجدة في الجدول الثاني من الجدول الاول. * ومنه في حالة عدم وجود هذه السلع في الجدول الأول يقوم بتحقق فقط بحيث يكتب الكمية غير كافية في الحقل AVAILABILITY بدون إنقاصها كود : Merge into INVENTORY_FIRST as inv1
using (
select PRODUCT_ID, sum( quantity_in_stock ) as quantity_in_stock_2
from INVENTORY_SECOND
group by PRODUCT_ID
) inv2
on inv1.PRODUCT_ID = inv2.PRODUCT_ID and inv1.quantity_in_stock < quantity_in_stock_2
WHEN matched THEN
update set availability = 'الكمية غير كافية'ـ بعد تنفيذ هذا سكريبت سيكتب في الجدول الرئيسي أمام الكمية المطلوبة "الكمية غير كافية" ـ بواسطة سكريبت أخر يمكننا التحقق من ذلك كود : SELECT inv2.PRODUCT_ID, SUM( inv2.quantity_in_stock ) as quantity_Sortie, inv1.NOMPRODUIT, inv1.QUANTITY_IN_STOCK as en_Stock, inv1.AVAILABILITY
FROM INVENTORY_SECOND inv2
INNER JOIN INVENTORY_FIRST inv1 ON inv1.product_id = inv2.product_id
GROUP BY inv2.PRODUCT_ID , inv1.NOMPRODUIT, inv1.QUANTITY_IN_STOCK, inv1.AVAILABILITYالنتيجة ![]() أما هذا السكريبت سيقوم بإنقاص الكمية إذا تحقق الشرط كود : Merge into INVENTORY_FIRST as inv1
using (
select PRODUCT_ID, sum( quantity_in_stock ) as quantity_in_stock_2
from INVENTORY_SECOND
group by PRODUCT_ID
) inv2
on inv1.PRODUCT_ID = inv2.PRODUCT_ID and inv1.quantity_in_stock >= quantity_in_stock_2
WHEN matched THEN
update set quantity_in_stock = quantity_in_stock - quantity_in_stock_2نشرح سكريبت ![]() بعد وضع سكريبت التحقق من الكمية و بعدها سكريبت التوضيح ستكون لدينا هذه الصورة عند تنفيذ السكريب إنقاص الكمية ، انظر للسطر الملون بالأصفر تتوفر فيه شرط إنقاص الكمية ، أما السطر الذي قبله لا يمكن # نشرح السطر الثاني في المربع رقم 1 هي الكمية الموجودة في الجدول الثاني INVENTORY_SECOND والتي تساوي 2 و المربع الثاني الكمية الموجودة في الجدول الرئيسي وتساوي 6 ، ومنه يمكن إنقاصها من المخزون الرئيسي # أما السطر الذي قبل الكمية التي أخرجت أكبر من المخزنة في الرئيسي. ملاحظة : عند الانتهاء من الانقاص يجب تغيير محتوى الحقل AVAILABILITY و هذا لإستعمال نتائجها مرة أخر وهذا كما يلي: كود : UPDATE INVENTORY_FIRST
SET AVAILABILITY = null
WHERE AVAILABILITY = 'الكمية غير كافية'* وفي الأخير ، هذا مافهمت ، يمكن أن أكون مخطأ RE: كيف اقوم بتحديث مخزون - bouh25 - 04-08-2023 لك جزيل الشكر اخ Delphi4Us ، larbiparadox لكن انا اريد ان يعطين تنبيه بـ 'الكمية غير كافية' لاسم المادة دون كتابتها في الحقل الحقل غير موجود ربما لم انتبه لاضافتة تدرج البارنامج - اريد ان ينفد البرنامج دفعة واحدة اي اذا كانت قائمة المشتريات كلها موجودة بالكمية الكافية - اذا وجدت مادة واحدة او اكثر غير كافية فيعطينا اسمها دون الانقاص للمواد الاخرى |