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

نسخة كاملة : الاضافة او التحديث داخل جدول عن طريق sql
أنت حالياً تتصفح نسخة خفيفة من المنتدى . مشاهدة نسخة كاملة مع جميع الأشكال الجمالية .
السلام عليكم اتمنى لكم السلامة في زمن الكورونا و ارجو من الله ان يرفع عنا البلاء
لدي برنامج به عدة جداول بقاعدة الفايربيرد
وعندما اريد ادخال معطيات من الجدول 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; 
وعليك السلام

جرب هذا

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

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

أضفه بعد dm.QuMois.SQL.Add('Group By EDITE') الخاصة بـ UPDATE
(06-04-2020, 06:41 PM)larbiparadox كتب : [ -> ]وعليك السلام

جرب هذا

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

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

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

المشكل انه عند التحدث يزيد سجلات اخرى كانه في حالة الاضافة وليس التحديث
ارفق مثال اذا امكن ، حتى اتمكن من تصحيحه
(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 إذا أردت استخدام الشروط.
(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
نعم, لم أنتبه لذلك, ليست لدي خبرة في فايربيرد لكن لا أظن أن الصيغة صحيحة.

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

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

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;