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

هل يوجد حل لتحديث Adotable1 او Adoquery1 بعد التعديل عليه بدون Close; او Open;

بدأه shalwan في 17 يوليو 2009 · 13 رد · 1,779 مشاهدة · في لغة Delphi
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

اخواني نرغب المشاركه بشكل دائم مشاركتي هو استفسار لعلها تعم الفائدة بوجود الحل من احد الأعضاء او من لديه من الضيوف حل

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

اي ان المعلومات المحدثه او الملغيه من الملف او المضافة اليه اريد ان تظهر في الديبي قرد المربوطه بالمف مباشرة

شكرا لكم

نسأل الله الجنه لنا ولوالدينا ولمن لهم حق علينا

#2

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

اعمل proceduer كالتالي واستدعية بعد كل عملية اضافة أو تعديل أو حذف

procedure con;
begin
	form1. adoquery1.SQL.Clear;
form1.adoquery1.SQL.add('select*from table_1');
form1.adoquery1.Open;
form1.datasource1.DataSet:=form1.adoquery1;

end;

procedure TForm1.Button1Click(Sender: TObject);
begin
with ADOQuery1 do
	begin

	 Close;
	 SQL.Clear;

	 SQL.Add('INSERT INTO Table_1');
	 SQL.Add('( id,Name,not_)');
	 SQL.Add(' Values');
	 SQL.Add('(:P1,:P2,:P3)');
	 Prepared;
	 Parameters.ParamByName('P1').Value := Edit1.Text;
	 Parameters.ParamByName('P2').Value := Edit2.Text;
	 Parameters.ParamByName('P3').Value := Edit3.Text;

	 ExecSQL;

	   fedit;
		 con;

   end;
end;
#3

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

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

انا وانت نستحث من يعرف شيء عن هذا الموضوع او هناك طرق اخرى قد يعرف عنها احد الزملاء وتعم الفائده

ولذا ارجوا منكم الإستمرار بهذا الموضوع حتى نصل الى نقطة لا إجابه ثم يقفل

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

من كافة منسوبي المنتدى الشكر الجزيل

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

تم تعديل هذه المشاركة بواسطة shalwan في 18 يوليو 2009 في 12:45

نسأل الله الجنه لنا ولوالدينا ولمن لهم حق علينا

#4

ما أعرفه أن أي تعديل يتم على الـ adotable يظهر مباشرة عندما نستخدم الـ dbgrid لعرض محتوى الجدول ..!

بكل الأحول جرب

adotable1.Refresh;

I'm Away For Sometimes

I'll Finish My Works

Come Back Soon

More Study > More Search > More Try > More Learning > Great Success

#5

أخي روبير أعتقد لاأنا ولاأنت فهمنا السؤال بالشكل الصحيح

#6

حسب ما فهمت ان الأخ يريد بعد أجراء اي تعديل على الجدول ظهور النتيجة مباشرة في الـ dbgrid

هل أصبت أم أخطأت ؟؟ :happy:

I'm Away For Sometimes

I'll Finish My Works

Come Back Soon

More Study > More Search > More Try > More Learning > Great Success

#7

هذا مافهمته أنا ايضا . وتوقعت انه يتعامل مع query وليس مع ado table . فعند التعامل مع Ado query لاتظهر البيانات مباشرة ولا حتى بالتحديث . فتوقعت ان المشكلة هنا ولكن الاخ يتكلم عن فتح ملف واغلاق ملف .

#8

السلام عليكم...

إذا كان التعديل يتم مباشرة على ADOTable أو ADOQuery المرتبطة به الـ DBGrid (باستعمال Append مثلاً أو Edit أو Delete) فأعتقد - كما قال rober - أن التعديلات تظهر مباشرة في الـ DBGrid.

و لكن إذا تم التعديل بطريقة أخرى (استعمال ADOCommand مثلاً) فإن الـ ADOTable أو ADOQuery لن يعلم بوقوع التعديل، و لابد من تنفيذ عملية التحديث: Refresh أو Requery أو (Close ثم Open).

هناك بعض الـ DataSets لا تستطيع تنفيذ الـ Refresh في كافة الأحوال (TQuery مثلاً). أما الـ Requery فهي مشابهة لعمل Close ثم Open (مع الفرق أن استعمال Close ثم Open يسمح لك بإجراء تعديلات على خصائص الـ DataSet و هي مغلقة).

*** إذا كان عدد السجلات و حجم البيانات كبيراً فأنصحك بعدم استعمال الـ Tables (سواء TTable أو TADOTable). فعند عرض البيانات استعمل الـ Queries لجلب الحقول و السجلات التي تحتاجها فقط. أما عند تحرير البيانات (إضافة / تعديل / حذف) فاستعمل الـ Commands و لا داعي لفتح جدول بأكمله من أجل أن تضيف إليه بضع سجلات أو لتعديل أحد السجلات.

نرجو الاستفادة و السلام.

وَ قُلِ اعْمَلُوا فَسَيَرَى اللهُ عَمَلَكُمْ وَ رَسُولُهُ وَ الْمُؤْمِنُونَ

صدق الله العظيم

#9

مشكور استاذنا ناجي

#10

اخواني روبر وطلال وناجي

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

اوضح السؤال لمن لم يتضح لديه

1) ملف sql server بيانات

2)adoquery1 مرتبط بمخزون احد الفروع

3)عدد المشغلين لهذا الفرع اكثر من 1

4)تم بيع 10 قطع من صنف واحد والمخزون 15 قطعه من البائع رقم 1

5)المتبقي 5 قطع لا يمكن ان تتضح الا بقفل الملف وفتحه ولو لم يقفل ويفتح لا يمكن ان يظهر المتبقي للمشغل رقم 2 وايضا اي مشغل آخر

6)احد مشغلي الإداره اضاف مخزون أو صنف جديد للفرع لا تظهر الا بنفس الطريقه

{الملف الوجهه واحد والمرتبطين به (adotable1-adoquery1-adoquery2) اختار منه ما يخص الفرع 1 بواسطه

query1 واربطه بديبيقرد و query2 انفذ عليه اوامر الحذف والإضافه والتعديل الا ان المعلومات في query1

كماهي لم تتغير في الديبي قرد ولو اقفلته ثم فتحته ظهر كل ماهو جديد بالملف }

ارجوا ان يكون واضح تحياتي والسلام عليكم

تم تعديل هذه المشاركة بواسطة shalwan في 18 يوليو 2009 في 19:54

نسأل الله الجنه لنا ولوالدينا ولمن لهم حق علينا

#11

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

#12
alswah كتب:

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

شكرا للجميع والأجابه كانت وافيه

نسأل الله الجنه لنا ولوالدينا ولمن لهم حق علينا

#13

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

ولكن لكي تتفادة كل هذه المشاكل قم بإنشاء كويري أخرة على نفس الجدول الذي تعمل عليه وقم بإختبار عدد السجلات فيها وفي كل مة تكون عدد السجلات في الكويرة الأخرى مغايرة لعدد السجلات في الكويري التي تعمل عليها أجعل برنامجك يقوم بالتحديث بعد أنتها المستخدم من العمل أو بعد إنتها البرنامج من حجز الكويري لديك ...

وبهذا تكون قد حصلت على مرادك دون التسبب في ضهور أخطاء قد تحتاج إلى الكثير من الوقت في معالجتها..

أرجو أن أكون قد أوضحت الفكرة العامة

من جد وجد ومن زرع حصد

#14
Salah El Deen كتب:

أخي السائل

وبهذا تكون قد حصلت على مرادك دون التسبب في ضهور أخطاء قد تحتاج إلى الكثير من الوقت في معالجتها..

أرجو أن أكون قد أوضحت الفكرة العامة

شكرا للجميع واشير بأن الحل يكمن بعد اجراء النعديل او الأضافه او المسح مبارشرة كما قلت اخي salah

ولكن معلومة الأخ ناجي اسهل واسرع هي adoquery1.requery للملف وسيظهر ما تم اجراؤه على adotable1

وهي اخف من close open ولكنها تؤدي عملها

لذا اود التنويه ولكم الشكر

تم تعديل هذه المشاركة بواسطة shalwan في 17 سبتمبر 2010 في 21:23

نسأل الله الجنه لنا ولوالدينا ولمن لهم حق علينا

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