delphi4arab منتديات دلفي للعرب
الاضافة او التحديث داخل جدول عن طريق sql - نسخة قابلة للطباعة

+- delphi4arab منتديات دلفي للعرب (https://delphi4arab.net/forum)
+-- قسم : منتديات دلفي للعرب التعليمية (https://delphi4arab.net/forum/forumdisplay.php?fid=3)
+--- قسم : سؤال و جواب حول دلفي (https://delphi4arab.net/forum/forumdisplay.php?fid=15)
+--- الموضوع : الاضافة او التحديث داخل جدول عن طريق sql (/showthread.php?tid=10743)



الاضافة او التحديث داخل جدول عن طريق sql - dahmane26 - 06-04-2020

السلام عليكم اتمنى لكم السلامة في زمن الكورونا و ارجو من الله ان يرفع عنا البلاء
لدي برنامج به عدة جداول بقاعدة الفايربيرد
وعندما اريد ادخال معطيات من الجدول 1 الى الجدول 2 و لهم نفس اسماء الحقول بخاصية التحديث ان وجد التاريخ في الجدول الثاني او ادخال البيانات في الجدول الثاني عند عدم وجود التاريخ المراد ادخاله
وقمت بمحاولة لكن الاجراء يقوم بادخال بيانات جديدة على الرغم من وجود التاريخ اي يقوم بعملية التكرار اجو منكم تصحيح الخلل و الاجراء هو كما يلي 

PHP كود :
var
o,n:integer;
begin
dm
.QuMois.Close;
dm.QuMois.SQL.Clear;
dm.QuMois.SQL.Add('select * from FMOIS ');
dm.QuMois.SQL.Add('where DATE_JOURNNEE=:D1');
dm.QuMois.paramByName('D1').AsDate := StrToDate(MaskEdit5.text);
dm.QuMois.Open;
n:=dm.QuMois.RecordCount;
edit4.Text:=inttostr(dm.QuMois.RecordCount);
if 
n=0 then
begin
//////////////////////INSERT/////////////
dm.QuMois.Close;
dm.QuMois.SQL.Clear;
dm.QuMois.SQL.Add('INSERT INTO FMOIS (EDITE,DATE_JOURNNEE,APPLICATION, MONTANT_BANCAIRE, MONTANT_CCP,MONTANT_NUMERAIRE,TOTAL)');
dm.QuMois.SQL.Add('select EDITE,:datejoure, sum(APPLICATION)as APPLICATION , sum(MONTANT_BANCAIRE)as MONTANT_BANCAIRE , sum(MONTANT_CCP)as MONTANT_CCP , sum(MONTANT_NUMERAIRE)as MONTANT_NUMERAIRE,sum(APPLICATION+MONTANT_BANCAIRE+MONTANT_CCP+MONTANT_NUMERAIRE)as TOTAL');
dm.QuMois.SQL.Add('from TJOUR where   DATE_JOURNNEE>=:D1 AND DATE_JOURNNEE<=:D2 ');
dm.QuMois.paramByName('D1').AsDate := StrToDate(form6.MaskEdit4.text);
dm.QuMois.paramByName('D2').AsDate := StrToDate(form6.MaskEdit5.text);
dm.QuMois.paramByName('datejoure').AsDate := StrToDate(form6.MaskEdit5.text);
dm.QuMois.SQL.Add('Group By EDITE,DATE_JOURNNEE');
dm.QuMois.ExecSQL;
dm.QuMois.Open;
showmessage('RecordCount ajout');
dm.FMOIS.Refresh;
edit6.Text:=inttostr(dm.FMOIS.RecordCount);
end;
//////////////update///////////////
o:=dm.QuMois.RecordCount;
edit5.Text:=inttostr(dm.QuMois.RecordCount);
if 
o>=1 then
begin
  dm
.QuMois.Close;
  dm.QuMois.SQL.Clear;
  dm.QuMois.SQL.Add('UPDATE FMOIS SET (EDITE,APPLICATION, MONTANT_BANCAIRE, MONTANT_CCP,MONTANT_NUMERAIRE,TOTAL)');
  dm.QuMois.SQL.Add('select EDITE, sum(APPLICATION)as APPLICATION , sum(MONTANT_BANCAIRE)as MONTANT_BANCAIRE , sum(MONTANT_CCP)as MONTANT_CCP , sum(MONTANT_NUMERAIRE)as MONTANT_NUMERAIRE,sum(APPLICATION+MONTANT_BANCAIRE+MONTANT_CCP+MONTANT_NUMERAIRE)as TOTAL');
  dm.QuMois.SQL.Add('from TJOUR where   DATE_JOURNNEE>=:D1 AND DATE_JOURNNEE<=:D2');
  dm.QuMois.paramByName('D1').AsDate := StrToDate(form6.MaskEdit4.text);
  dm.QuMois.paramByName('D2').AsDate := StrToDate(form6.MaskEdit5.text);
  dm.QuMois.SQL.Add('Group By EDITE');
  showmessage('RecordCount update');
  dm.FMOIS.Refresh;
  edit6.Text:=inttostr(dm.FMOIS.RecordCount);
end;
end; 



RE: الاضافة او التحديث داخل جدول عن طريق sql - larbiparadox - 06-04-2020

وعليك السلام

جرب هذا

تحتاج إلى الشرط

كود :
dm.QuMois.SQL.Add('WHERE DATE_JOURNNEE = :datejoure ');

أضفه بعد dm.QuMois.SQL.Add('Group By EDITE') الخاصة بـ UPDATE


RE: الاضافة او التحديث داخل جدول عن طريق sql - dahmane26 - 06-04-2020

(06-04-2020, 06:41 PM)larbiparadox كتب : وعليك السلام

جرب هذا

تحتاج إلى الشرط

كود :
dm.QuMois.SQL.Add('WHERE DATE_JOURNNEE = :datejoure ');

أضفه بعد dm.QuMois.SQL.Add('Group By EDITE') الخاصة بـ UPDATE
  

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


RE: الاضافة او التحديث داخل جدول عن طريق sql - larbiparadox - 06-04-2020

ارفق مثال اذا امكن ، حتى اتمكن من تصحيحه


RE: الاضافة او التحديث داخل جدول عن طريق sql - sofiane201 - 07-04-2020

(06-04-2020, 06:41 PM)larbiparadox كتب : وعليك السلام

جرب هذا

تحتاج إلى الشرط

كود :
dm.QuMois.SQL.Add('WHERE DATE_JOURNNEE = :datejoure ');

أضفه بعد dm.QuMois.SQL.Add('Group By EDITE') الخاصة بـ UPDATE

الأمر Where لا يمكن أن يأتي بعد group by, بعد group by دائما تأتي having إذا أردت استخدام الشروط.


RE: الاضافة او التحديث داخل جدول عن طريق sql - larbiparadox - 07-04-2020

(07-04-2020, 12:28 AM)sofiane201 كتب :
(06-04-2020, 06:41 PM)larbiparadox كتب : وعليك السلام

جرب هذا

تحتاج إلى الشرط

كود :
dm.QuMois.SQL.Add('WHERE DATE_JOURNNEE = :datejoure ');

أضفه بعد dm.QuMois.SQL.Add('Group By EDITE') الخاصة بـ UPDATE

الأمر Where لا يمكن أن يأتي بعد group by, بعد group by دائما تأتي having إذا أردت استخدام الشروط.

* إذا تفحصت الكتابة جيدا تجد أن group by تابعة select   و  الامر Where  خاص بـUPDATE



RE: الاضافة او التحديث داخل جدول عن طريق sql - sofiane201 - 07-04-2020

نعم, لم أنتبه لذلك, ليست لدي خبرة في فايربيرد لكن لا أظن أن الصيغة صحيحة.

أي الصيغة 
PHP كود :
UPDATE table2
  SET 
(c1,c2,c3,c4)
  SELECT c1,c2,c3,c4
  FROM table1
  where 
[condition]
  GROUP BY c1
  WHERE
.. 

يمكنك رؤية التوثيق الخاص ب update من هنا


RE: الاضافة او التحديث داخل جدول عن طريق sql - dahmane26 - 09-04-2020

لقد اعدت كتابة الاجراء بهذا الشكل ونجح الامر

PHP كود :
begin
dm
.FMOIS.Close;
dm.FMOIS.Open;
dm.QuMois.Close;
dm.QuMois.SQL.Clear;
dm.QuMois.SQL.Add('select * from FMOIS ');
dm.QuMois.SQL.Add('where DATE_JOURNNEE=:D1');
dm.QuMois.paramByName('D1').AsDate := StrToDate(MaskEdit5.text);
dm.QuMois.Open;
edit4.Text:=inttostr(dm.QuMois.RecordCount);
if 
dm.QuMois.RecordCount = 0 then
begin
//////////////////////INSERT/////////////
dm.QuMois.Close;
dm.QuMois.SQL.Clear;
dm.QuMois.SQL.Add('INSERT INTO FMOIS (EDITE,DATE_JOURNNEE,APPLICATION, MONTANT_BANCAIRE, MONTANT_CCP,MONTANT_NUMERAIRE,TOTAL,');
dm.QuMois.SQL.Add('QUITTANCE_DU,QUITTANCE_AU,NER_DU,NER_AU,SERIE_DU,SERIE_AU)');////////
dm.QuMois.SQL.Add('select EDITE,:datejoure, sum(APPLICATION)as APPLICATION , sum(MONTANT_BANCAIRE)as MONTANT_BANCAIRE , sum(MONTANT_CCP)as MONTANT_CCP , sum(MONTANT_NUMERAIRE)as MONTANT_NUMERAIRE,sum(APPLICATION+MONTANT_BANCAIRE+MONTANT_CCP+MONTANT_NUMERAIRE)as TOTAL');
dm.QuMois.SQL.Add(',sum(QUITTANCE_DU)as QUITTANCE_DU ,sum(QUITTANCE_AU)as QUITTANCE_AU ,sum(NER_DU)as NER_DU ,sum(NER_AU)as NER_AU ,sum(SERIE_DU)as SERIE_DU ,sum(SERIE_AU)as SERIE_AU');////////////
dm.QuMois.SQL.Add('from TJOUR where   DATE_JOURNNEE>=:D1 AND DATE_JOURNNEE<=:D2 ');
dm.QuMois.paramByName('D1').AsDate := StrToDate(form6.MaskEdit4.text);
dm.QuMois.paramByName('D2').AsDate := StrToDate(form6.MaskEdit5.text);
dm.QuMois.paramByName('datejoure').AsDate := StrToDate(form6.MaskEdit5.text);
dm.QuMois.SQL.Add('Group By EDITE');
dm.QuMois.ExecSQL;
//dm.QuMois.Open;
showmessage('RecordCount ajout '+'#'+'Fin du processus');
dm.FMOIS.Close;
dm.FMOIS.Open;
edit6.Text:=inttostr(dm.FMOIS.RecordCount);
end;
///////////////////
//////////////update///////////////
edit5.Text:=inttostr(dm.QuMois.RecordCount);
if 
dm.QuMois.RecordCount > 0 then
begin
/////////////////delet/////////
dm.QuMois.Close;
dm.QuMois.SQL.Clear;
dm.QuMois.SQL.Add('DELETE FROM FMOIS WHERE DATE_JOURNNEE=:D2');
dm.QuMois.paramByName('D2').AsDate := StrToDate(MaskEdit5.text);
dm.QuMois.ExecSQL;
//dm.QuMois.Open;
////////////////////////
//////////////////////INSERT/////////////
dm.QuMois.Close;
dm.QuMois.SQL.Clear;
dm.QuMois.SQL.Add('INSERT INTO FMOIS (EDITE,DATE_JOURNNEE,APPLICATION, MONTANT_BANCAIRE, MONTANT_CCP,MONTANT_NUMERAIRE,TOTAL)');
dm.QuMois.SQL.Add('select EDITE,:datejoure, sum(APPLICATION)as APPLICATION , sum(MONTANT_BANCAIRE)as MONTANT_BANCAIRE , sum(MONTANT_CCP)as MONTANT_CCP , sum(MONTANT_NUMERAIRE)as MONTANT_NUMERAIRE,sum(APPLICATION+MONTANT_BANCAIRE+MONTANT_CCP+MONTANT_NUMERAIRE)as TOTAL');
dm.QuMois.SQL.Add('from TJOUR where   DATE_JOURNNEE>=:D1 AND DATE_JOURNNEE<=:D2 ');
dm.QuMois.paramByName('D1').AsDate := StrToDate(form6.MaskEdit4.text);
dm.QuMois.paramByName('D2').AsDate := StrToDate(form6.MaskEdit5.text);
dm.QuMois.paramByName('datejoure').AsDate := StrToDate(form6.MaskEdit5.text);
dm.QuMois.SQL.Add('Group By EDITE');
dm.QuMois.ExecSQL;
//dm.QuMois.Open;
showmessage('RecordCount update');
dm.FMOIS.Close;
dm.FMOIS.Open;
edit6.Text:=inttostr(dm.FMOIS.RecordCount);
end;
end;
procedure TForm6.Button17Click(Sender: TObject);
begin
dm
.QuMois.Close;
dm.QuMois.SQL.Clear;
dm.QuMois.SQL.Add('DELETE FROM FMOIS WHERE DATE_JOURNNEE=:D2');
dm.QuMois.paramByName('D2').AsDate := StrToDate(dbedit24.text);
dm.QuMois.ExecSQL;
dm.FMOIS.Close;
dm.FMOIS.Open;
end;