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

نسخة كاملة : تحديث جدول بنتيجة استعلام
أنت حالياً تتصفح نسخة خفيفة من المنتدى . مشاهدة نسخة كاملة مع جميع الأشكال الجمالية .
الصفحات : 1 2
السلام عليكم ورحمة الله تعالى وبركاته
لقد قمت بمحاولة تحديث جدول من قاعدة بيانات وذلك بمحاولة تحديثه بنيجة استعلام AbsQuery 
هذا الاخير يحتوي على عدة سجلات تقريبا 5 سجلات 
واضطررت لاستخدام طريقة اخرى وقد نجحت 
 
PHP كود :
ABSQuery3.First;
 
 absVente.First;
 
 while not ABSQuery3.Eof do
 
 begin
   absVente
.edit;
 
  absVente.FieldByName('commission').Value := ABSQuery3.FieldByName('tarif_commission').Value * ABSQuery3.FieldByName('quantite').Value;
 
  absVente.post;
 
  ABSQuery3.Next;
 
  absVente.Next;
 
 end; 
اما الطريقة الاولى التي استعملتها ولم تنجح حيث ان هذه الطريقة تحدث الجدول ولكن السجل الاول فقط وليس جميع السجلات

PHP كود :
ABSQuery2.Close;
 
 ABSQuery2.SQL.Clear;
 
 ABSQuery2.SQL.Add('update vente set vente.commission = :commission where vente.numero = numero');
 
 ABSQuery2.ParamByName('commission').Value := ABSQuery3.FieldByName('tarif_commission').Value * ABSQuery3.FieldByName('quantite').Value;
 
 ABSQuery2.ParamByName('numero').Value := ABSQuery3.FieldByName('numero').value;
 
 ABSQuery2.ExecSQL;


الصور في المرفقات  

هل من طريقة لتحدث الجدول باستعمال الطريقة الاولى
السلام عليكم لكي يقرأ Query البرامترات يجب ان تضيف نقطتين :
PHP كود :
 ABSQuery2.SQL.Add('update vente set vente.commission = :commission where vente.numero =:numero'); 
بدل
PHP كود :
ABSQuery2.SQL.Add('update vente set vente.commission = :commission where vente.numero = numero'); 
(12-02-2018, 06:11 PM)S.FATEH كتب : [ -> ]السلام عليكم لكي يقرأ Query البرامترات يجب ان تضيف نقطتين :
PHP كود :
 ABSQuery2.SQL.Add('update vente set vente.commission = :commission where vente.numero =:numero'); 
بدل
PHP كود :
ABSQuery2.SQL.Add('update vente set vente.commission = :commission where vente.numero = numero'); 

بارك الله فيك اخي

لقد جربتها فوجدت انها تقوم بتعبئة سجل واحد فقط والسجلات الاخرى تبقى فارغة 

الصورة  في المرفقات
طباع لانك حددت له سجل معين
إقتباس :
كود :
where vente.numero =:numero
قم بحذف هذا السطر لتحديث كل البيانات وليس سجل معين
(16-02-2018, 10:14 PM)Delphi4Us كتب : [ -> ]طباع لانك حددت له سجل معين
إقتباس :
كود :
where vente.numero =:numero
قم بحذف هذا السطر لتحديث كل البيانات وليس سجل معين

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

وفي هذه الحالة سيقوم باعطاء نفس النتيجة الخاصة بسجل معين لكل السجلات
وهذا ما لا اريده ان يحصل
السلام عليكم وضح العملية التي تود القيام بها
(17-02-2018, 01:23 PM)S.FATEH كتب : [ -> ]السلام عليكم وضح العملية التي تود القيام بها

وعليكم السلام ورحمة الله وبركاته

ارسلت استعلاما الى قاعدة البيانات ABSOLUTE DATABASE  وحصلت على جواب هذا الاستعلام في مكون ABSQUERY
والذي يحتوي الان عن جدول فيه عدة سجلات وعدة حقول من بينها حقل مهم والذي احتاجه وهو حقل العمولات 

[صورة: dLen0n]

واريد ان اقوم الان بتحديث الحقل الخاص بالعمولات في  جدول ABSTABLE داخل قاعدة البيانات وذلك باستعمال حقل عمولات ABSQUERY
يعني انني اريد نقل العمولات التي قمت بحسابها باستعمال ABSQUERY وادراج هذه القيم في جدول ABSTABLE ولكن بشرط ان يقوم 
باعطاء العمولة لكل بائع 

[صورة: kb41t7]

والحل الوحيد الذي وجدته هو هذا الكود 

PHP كود :
ABSQuery3.First;
 
 while not ABSQuery3.Eof do
 
 begin
   absVente
.Locate('numero',ABSQuery3.FieldByName('numero').Value,[]);
 
  absVente.edit;
 
  absVente.FieldByName('commission').value := ABSQuery3.FieldByName('tarif_commission').Value * ABSQuery3.FieldByName('quantite').Value;
 
  absVente.post;
 
  ABSQuery3.Next; 


وانا الان ابحث عن طريقة اسهل باستعمال SQL يعني QUERY 
وقد سبق لي ان جربت ولكن لم يعمل الاستعلام الذي استعملته 
فكل ما يفعله وهو نقل قيمة واحدة فقط 

[صورة: n4Dx0n]

PHP كود :
ABSQuery2.SQL.Add('update vente set vente.commission = :commission where vente.numero =:numero'); 
عليك كتابة الامر كله في ال Sql لا حاجة لل Parameter

PHP كود :
Update vente,affectation
Set vente
.commission = (affectation.tarif_commission * vente.quantite)
Where ?? 



في مكان ?? اكتب ما كتبت بعد where التي في الـABSQuery3

ذكرت جدول affectation بعد update لان هناك استخدام للعمود tarif_commission

في انتظار الرد..

عفوًا هكذا
PHP كود :
ABSQuery2.Close;
 
 ABSQuery2.SQL.Clear;
 
 ABSQuery2.SQL.Add('Update vente,affectation');
 
 ABSQuery2.SQL.Add('Set vente.commission = (affectation.tarif_commission * vente.quantite)');
 
 ABSQuery2.SQL.Add('Where ??'); 
 
 ABSQuery2.ExecSQL; 
(20-02-2018, 03:53 PM)Ben.Ja كتب : [ -> ]
عليك كتابة الامر كله في ال Sql لا حاجة لل Parameter

PHP كود :
Update vente,affectation
Set vente
.commission = (affectation.tarif_commission * vente.quantite)
Where ?? 



في مكان ?? اكتب ما كتبت بعد where التي في الـABSQuery3

ذكرت جدول affectation بعد update لان هناك استخدام للعمود tarif_commission

في انتظار الرد..

عفوًا هكذا
PHP كود :
ABSQuery2.Close;
 
 ABSQuery2.SQL.Clear;
 
 ABSQuery2.SQL.Add('Update vente,affectation');
 
 ABSQuery2.SQL.Add('Set vente.commission = (affectation.tarif_commission * vente.quantite)');
 
 ABSQuery2.SQL.Add('Where ??'); 
 
 ABSQuery2.ExecSQL; 

      اسف على التاخير في الرد


    هذا الكود لن يعمل يا اخي لانه لا بد من اخد الباراميتر من Query
    الكيري يحتوي على نتائج البحث التي قام بها وهذه النتائج هي التي اريد اعطائها لجدول المبيعات وبالضبط لحقل العمولات

   الكيري قام بمقارنة بين جدولين   جدول المبيعات وجدول القواعد (affectation) 
  وبعد المقارنة قام باستخلاص النتائج والتي اريد اعادة دمجها في جدول المبيعات
اظن ان الاستعلام الثاني الذي تريد منه ان يأخذ النتائج من الاول ووضعها في جدول المبيعات لا فائدة منه, يمكنك اختصار الكل في استعلام واحد
هل جربت الكود؟ لان لدي نفس الجداول واشتغل معي الاستعلام
الصفحات : 1 2