الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

ظهور رسالة اثناء تنفيذ البرنامج

بدأه medreg في 12 أكتوبر 2008 · 14 رد · 2,165 مشاهدة · في لغة Delphi
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

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

عندما اضغط على زر لتنفيذ عملية حسابية تظهر هذه الرسالة ويتوقف عن إتمام عملية الحساب

insufficient memory for this operation

table: G:\compta\bilan.db

علما بأنني استعمل dataModule1و dataModule2و dataModule3و DataModule4

وكل واحدة من الأربعة تحتوي على 19 قاعدة بيانات أي مجموع قواعد البيانات التي يحتوي عليها برنامجي هي 76 قاعدة بيانات و23 فورم

هذه الرسالة تظهر لي في الفورم 23 التي تحتوي على جدول حوصلة كل الحقول الموجودة في كل الجداول والمسمى Table_Recap

عند الضغط يبدأ في العمل إلى أن يصل إلى قاعدة من البيانات ويتوقف عليها بهذه الرسالة التي سبق وان اشرت لها في اعلى الموضوع

الكود المكتوب تحت الحدث الخاص بزر تنفيذ عملية الحساب هو كالآتي :

table_recap.edit;
table_recapMT_BPD.value:=dataModule2.table_bpdMT_A1.value 
+ dataModule2.table_bpsMT_A1.value+dataModule2.table_bpnMT_A1.Value;
إلى آخر جدول ثم أضع في الآخر
Table_Recap.post;

حاولت غلق كل الجداول ذاي كل فورم وضعت فيها مثل هذا الكود

لكل جدول في DataModule وضعت في الحدث

procedure TDataModule1.Table_artAfterDelete(DataSet: TDataSet);
begin
DbiSaveChanges(Table_art.handle);
end;

procedure TDataModule1.Table_artAfterEdit(DataSet: TDataSet);
begin
DbiSaveChanges(Table_art.handle);
end;

procedure TDataModule1.Table_artAfterPost(DataSet: TDataSet);
begin
DbiSaveChanges(Table_art.handle);
end;

procedure TDataModule1.Table_artAfterClose(DataSet: TDataSet);
begin
DbiSaveChanges(Table_art.handle);
end;

procedure TDataModule1.Table_artBeforeClose(DataSet: TDataSet);
begin
DbiSaveChanges(Table_art.handle);
end;

procedure TDataModule1.Table_artBeforePost(DataSet: TDataSet);
begin
DbiSaveChanges(Table_art.handle);
end;

في الحدث OnShow

procedure TForm1.FormShow(Sender: TObject);
begin
with dataModule1 do begin
table_art.Open;
end;
with dataModule2 do begin
table_bpd.open;
end;
with dataModule3 do begin
table_bpr.Open;
end;
with dataModule4 do begin
table_cal.Open;
end;

ثم في الحدث OnClose

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
with dataModule1 do begin
table_art.Close;
end;
with dataModule2 do begin
table_bpd.Close;
end;
with dataModule3 do begin
table_bpr.Close;
end;
with dataModule4 do begin
table_cal.Close;
end;

أرجو إن كان هنا حل لهذه المشكلة افيدونا به وجزاكم الله عنا كل خير

#2

طريقة استخدامك للForm والجداول + طريقة الحساب تستهلك كثيرا من الذاكرة

عليك باعادة هيكلة برنامجك

لاتفتح اي جدول الا عند الحاجة اليه

الForm التي لاتحتاجها لاتنشاها الا عند الحاجة اليها وعند الانتهاء حررها

ايضا حاول اعادة التفكير في طريقة الحساب وجد طريقة اخرى اقل استهلاك للذاكرة

يمكن ان تبداء بأخر نقطة

وبالتوفيق

d4baa0.gif
#3
B.M.AbdelAziZ كتب:
طريقة استخدامك للForm والجداول + طريقة الحساب تستهلك كثيرا من الذاكرة

عليك باعادة هيكلة برنامجك

لاتفتح اي جدول الا عند الحاجة اليه

الForm التي لاتحتاجها لاتنشاها الا عند الحاجة اليها وعند الانتهاء حررها

ايضا حاول اعادة التفكير في طريقة الحساب وجد طريقة اخرى اقل استهلاك للذاكرة

يمكن ان تبداء بأخر نقطة

وبالتوفيق

مشكور يا سيدي على النصائح ونظرًا لعدم وجود خبرة كافية لدي في البرمجة والذي كان الفضل لله على تمكني من ما وصلت اليه من معرفة على البرمجة وبفضل مجهوداتكم بردودكم ونصائحكم وكل عضو في المنتديات العربية وخاصة منتدى فنان سات ومنتدى الفريق العربي للبرمجة ومنتدانا الغالي منتدى الدلفي للعرب والذي لا نعرف الى حد الآن ما سبب إغلاقه هل هو إغلاق ابدي أم إغلاق مؤقت استطعت ان اصل إلى هذه المعلومات والممثلة في هذا الجزء من مشروع يتعلق بموازنة حسابية والتي سبق لي وان اشرت لكم بأنها تتكون من 36 قاعدة بيانات ها أنا أرفع جزء منه حتى تطلعوا عليه وتشيروا لي أين يكمن الخطأ الذي يسبب مثل هذه التحذيرا بالخطأ كما اطلب منكم تصحيحه والسلام عليكم ورحمة الله تعالى وبركاته

Ballance.rar

#4
اقتباس
ومنتدانا الغالي منتدى الدلفي للعرب والذي لا نعرف الى حد الآن ما سبب إغلاقه هل هو إغلاق ابدي أم إغلاق مؤقت

سبق وان قلت ان منتدى دلفي للعرب متوقف بسبب مشكل تقني وعندما يحل سيعود ان شاء الله

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

d4baa0.gif
#5

بقي حوالي ساعة على صلاة الجمعة

القيت نظر سريعة على المرفق هناك الكثير من الاشياء "العوجة" لكن اخبرني ما المشكل بالظبط ؟

مشكلة في الحساب ام اماذا بالتحديد ؟

d4baa0.gif
#6
B.M.AbdelAziZ كتب:

بقي حوالي ساعة على صلاة الجمعة

القيت نظر سريعة على المرفق هناك الكثير من الاشياء "العوجة" لكن اخبرني ما المشكل بالظبط ؟

مشكلة في الحساب ام اماذا بالتحديد ؟

مشكور يا صديقي فعلاً لقد حان موعد صلاة الجمعة

وقبل أن اغادر البيت متجهًا نحو المسجد

كل ما اريد منك هو مشكلة رسالة الخطأ التي أوضحتها لكم سابقا

وارفقت هذا المثال حتى تطلعوا عليه

وتصحيح كل الأشياء المعوجة به

وجزاكم الله عنا كل خير

وتقبل الله صلاتكم وزادكم أجرًا

#7

رسالة الخطا "insufficient memory for this operation" لم تظهر معي بعد تجربة المرفق

كما قلت لك سابقا طريقة برمجتك عامة غير صحيحة

مثلا انت استخدمت اكثر من جدول لحفظ معلومات من المفروض ان تكون بجدول واحد

مثلا كل من الجداول: REC900MT_BP / REC901MT_BP / REC902MT_BP تكون جدول واحد

بالنسبة للواجه فانت استعملت عدد كبير جدا من DBEdit ورتبتها كانها جدول Grid وكان عليك استخدام مكون واحد فقط مثل DBGrid او StringGrid

اجريت تعديل طفيف على المرفق لا علاقة له بما قلت فوق

Ballance.rar

d4baa0.gif
#8
B.M.AbdelAziZ كتب:

رسالة الخطا "insufficient memory for this operation" لم تظهر معي بعد تجربة المرفق

كما قلت لك سابقا طريقة برمجتك عامة غير صحيحة

مثلا انت استخدمت اكثر من جدول لحفظ معلومات من المفروض ان تكون بجدول واحد

مثلا كل من الجداول: REC900MT_BP / REC901MT_BP / REC902MT_BP تكون جدول واحد

بالنسبة للواجه فانت استعملت عدد كبير جدا من DBEdit ورتبتها كانها جدول Grid وكان عليك استخدام مكون واحد فقط مثل DBGrid او StringGrid

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

حتى تدرك يا سيدي الفاضل سبب كثرة الجداول والعدد الضخم لDBEdit حسب خبرتي البسيطة والتي لا أعتبرها خبرة على الإطلاق أمامكم وهذا ليس بمجاملة بل الحقيقة وإن كان هناك طريقة لإستعمال DBGrid بدلاً من كثرة DBEdit على أن تتم طلاعة النتائج حسب ما هو موضح في طباعة القسم 901 لأن هذه الورقة هي عبارة عن نموذج مطبعي مطبوع بناء على تعليمة قانونية لا يجوز التغيير فيه ولهذا السبب اضطريت لوضع جدول لكل قسم

لقد أضفت للمرفق الذي ورد منك بعد ان عدلت عليه ورق طباعة للقسم 901

أرجو الإطلاع على المرفق وحاول طباعة الفسم 901 لترى إن كان بإمكانك مد يد المساعدة في وضع DBGrid بدلاً من DBEdit وارفق لي مثال على ذلك

وجزاكم الله عنا كل خير

Ballance.rar

#9

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

أقترح عليك حل لتعم الفائدة الجميع

ان اردت البدء من الصفر قم بفتح موضوع جديد (مشروع محاسبة مؤسسة)

ولك مني ان اساعدك الى ان تنتهي منه (مع ملاحظة حاليا يمكنني دخول المنتدى فقط الخميس/الجمعة)

وربما يساعدك باقي الشباب ايضا

والسلام عليكم

(فكر في الامر جيدا ثم Make your choice)

d4baa0.gif
#10

medreg

ماذا قررت ؟ ام نسيت الأمر!

d4baa0.gif
#11
B.M.AbdelAziZ كتب:

medreg

ماذا قررت ؟ ام نسيت الأمر!

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

لا يا صديقي لم أنسى

لكن كل ما في الأمر وهو أنني غيرت الطريقة فقط

وبدلاً من كثرة الحقول في قواعد البيانات إكتفيت بوضع DBGrid لكل قاعدة بيانات وكل قاعدة من هذه القواعد تحتوي على 12 حقل فقط

أما بالنسبة للنتيجة المطلوبة وهو انني أكثرت من مكون QRLabel في QuickRep و وضع متغيرات في الإجراء BeforPrint لكل Bandetail بدلاً من استعمال الحقول واليك هذا المثال

procedure TForm5.DetailBand1BeforePrint(Sender: TQRCustomBand;
  var PrintBand: Boolean);
var s1:string;
	r1:string;
 t1:real;
begin
s1:='';
r1:='';
t1:=0;
with DM_1 Do begin
  T_900.First;
  while not T_900.Eof do
  begin
  T_900.Edit;
  if (T_900CD_AR.Value='600')and(T_900Art.Value='1') then  s1:=T_900CD_AR.Value;
  if (T_900CD_AR.Value='600')and(T_900Art.Value='1') then  r1:=T_900LB_AR.Value;

if (T_900.FieldByName('Art').asstring='1')  then  t1:=t1+T_900.FieldByName('MT_AR').AsFloat;
  T_900.Next;
  end;
end;
	MTP1.Caption:=formatfloat('### ### ##0.00',t1);	if t1<=0.00 then MTP1.Caption:='';
Cde1.Caption:=s1;
LB1.Caption:=r1;
end;

وهكذا إستعمل هذ الكود لكل المتغيرات

ارجو أن أكون هذه المرة قد وفقت

تم تعديل هذه المشاركة بواسطة medreg في 21 نوفمبر 2008 في 12:14

#12

جيد هذا كفيل بتخفيف الامر قليلا

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

والسلام عليكم

d4baa0.gif
#13
B.M.AbdelAziZ كتب:

جيد هذا كفيل بتخفيف الامر قليلا

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

والسلام عليكم

سأجرب حظي وأنا سعيد برأيك هذا وسأظل متابعًا لنصائحكم

وإذا افترضنا ظهور مشكل إستهلاك الذاكرة ما هو الحل لهذه المشكلة

ومشكو وتقبل الله منا ومنكم صلاة الجمعة وباقي الصلوات بمزيد من الأجرة والمغفرة

#14

بســم الله الـرحمــن الرحيــم

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

ما معنى هذه الرسالة وما سبب ظهورها وما الحل

مرة تظهر هكذا

Circular datalinks are not allowed

مرة تظهر هكذا

Table1: Circular datalinks are not allowed

#15

الخطأ يظهر عندما تحاول ربط جدولين Master/Detail بطريقة خاطئة

d4baa0.gif

مواضيع مشابهة