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

سؤال عن ال DBGrid رعاكم الله

مغلق
بدأه Al-Jawad في 7 يونيو 2004 · 15 رد · 1,874 مشاهدة · في لغة Delphi
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

زملائي الكرام ... بعد التحية :

أردت أن أسأل فيما إذا كان لدي عنصر DBGrid يحوي حقولاً مثل :

رقم الصنف – اسم الصنف – الكمية – السعر – الإجمالي .

مربوطة جدول بيانات رئيسي ( المخزون مثلاً )..وأردت أن أحرر من هذا العنصر فاتورة يعني :

أدخل رقم الصنف وأضغط Enter فيجلب لي اسم الصنف والسعر وينقلني لخانة الكمية لأدخل العدد المطلوب ومن ثم أضغط ENTER ( أو TAB ) فيحسب لي الإجمالي في خانة الإجمالي وينقلني إلى سجل جديد..السؤال هو كيف يمكن التعامل مع عنصر الـ DBGrid بهذه الطريقة..؟..هل هناك خواص معينة لهذا العنصر إم إنه يوجد كود برمجي..؟..أرجو التكرم والرد على هذا ..

ملاحظة : هذه الطريقة المشهورة في التعامل مع الفواتير والمخزون كما نراها في معظم البرامج المحاسبية الكبيرة..

ودمتم سالمين

#2

الرجاء من المشرف حذف هذه المشاركة

تم تعديل هذه المشاركة بواسطة delphi team في 7 يونيو 2004 في 22:48

When You Started With Delphi ...You Could Not Stop!

delphiteam2.jpg

alharmoodiGropu.com

#3

أخي الكريم مرحبا بك معنا في هذا المنتدى :)

على فكرة الDBgrid هو الا وسيلة لتحكم في الجدول ....يعني انت عندما تتعامل مع الDBGrid تكون في الحقيقة تتعامل مع الجدول الذي قمت

بربطه مع الجدول(أرجو ان تكون وضحت الفكرة)

أنت لم توضح اين سوف اكتب رقم الصنف ... هل هو في مربع حوار أم ماذا؟؟؟ وهل انت تقوم بعملية إضافة أما ماذا تحرير بيانات موجودة؟؟

لقد ذكرت انك تريد تحرير فاتورة !!!

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

ثم تضغط ENTERE فيقوم بنقلك إلى السجل فتقوم بتعديل ما تريد ثم عمل حفظ لتغيرات التي أجريتها على الجدول(وليس الDBGrid)

حتى انك بأمكانك تحرير تقرير ايضا :)

و بخصوص احداث العنصر فيمكن الاطلاع عليها من خلال الHELP ولا أظن أنها صعبه كتير !!!

هذا الكود للوصول إلى الصنف

ضع هذا الكود في Edit لتسهل عملية البحث

ضع label لكي يعطيك معلومات عن عدد الاصناف من نفس الأسم في حالة الاصناف المتكررة!

begin
with form1.adoQuery1 do
  begin
    Close;
    SQL.Clear;
    SQL.Add('SELECT * FROM tblClass WHERE Class LIKE :P1');
    SQL.Add(' ORDER BY Class ');
    Prepared;
    Parameters.ParamByName('P1').Value := '%' + Edit1.Text + '%';
    Open;
    Label1.Caption := IntToStr(RecordCount);
    
  end;

ذهب إلى الجدول واختر الحدث OnScroll

ضع الكود التالي

ADOTable1.Locate('Class',TableNameFeildName.Value,[]);

الClass يدل على اسم الحقل

TableNameFeildName يدل على اسم الحقل في الجدول

يجب عليك تعريف عناصر الجدول لكي يتم تنفذ

وظيف الكود السابق تحديد الحقل المطلوب فعند وضعك لرقم الصنف مثلا سوف يتحديد الصنف ما عليك الا واغلاق الفورم البحث وسوف يبقى محددا

طبعا سوف تسهل عليك عملية البحث في حالة السجلات الكبيرة

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

أخوكم

تم تعديل هذه المشاركة بواسطة delphi team في 7 يونيو 2004 في 22:46

When You Started With Delphi ...You Could Not Stop!

delphiteam2.jpg

alharmoodiGropu.com

#4

مشكور أخي على هذا الرد السريع والقيم..مع تحياتي

#5

السلام عليكم

أخي Al-Jawad الطريقة التي تريدها لا تنفع مع DBGrid لأن ال DBGrid مرتبطة مع جدول فأي تعديل تقوم بعمله سيؤدي الى تغيير بيانات الجدول . وانصحك باستخدام ال grid وخصوصا Tmsgrid لأنها ستنفعك كثير في هذا المجال .

تم تعديل هذه المشاركة بواسطة أبو محمـد في 8 يونيو 2004 في 12:13

#6

على ما أعتقد ان الTmsgrid غير موجود في الدلفى

عليك بتنزيله!

When You Started With Delphi ...You Could Not Stop!

delphiteam2.jpg

alharmoodiGropu.com

#7

زملائي الأكارم شكراً لتفاعلكم مع الموضوع :

وأشكركم جزيل الشكر أخي أبو محمد وأخي Delphi Team على تكرمكم بالرد..

لكني لم أصل غايتي بعد وربما لأني لم أوضح فيسؤالي بشكل جيدوإليكم التفصييل الممل لما أريد :

لدي جدول مخزون فيه الحقول التالية :

رقم الصنف : string

اسم الصنف : string

الكمية الموجودة : number

سعر المبيع : وليكن number

كما إنه لدي تحرير فاتورة والفاتورة طبعاً يكون لها جدولان : رئيسي وثانوي :

الجدول الرئيسي : يحوي حقلان :

رقم الفاتورة : وهو من نوع عداد متزايد .

تاريخ الفاتورة : وهو من النوع Date ( طبعاً أنا يوجد الكثير من الحقول ولكن أريد الاختصار لأأصل لغايتي ) .

ولدي جدول ثاني ثانوي مرتبط مع الجدول الأول للفاتورة بعلاقة رأس بأطراف ويضم عدة حقول أهمها :

رقم الصنف : String

اسم الصنف : string

الكمية : Number

السعر : Number

الإجمالي : Number

الآن لدي مخزون وفيه لأقل عدد 10 شاشات بسعر كل واحدة 500 ريال مثلاً وأريد تحرير فاتورة بيع بعدد خمسة مثلاً :

فيجب علي :

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

طبعاً جدول المخزون المفتاح الأساسي فيه هو رقم الصنف..

كل هذه العمليات الطرح والزيادة والحساب أعرفها ولكن لب المشكلة يكم في :

1- ما هي الأحداث التي يجب علي استعمالها للعنصر DBGrid هنا .

2-هل هناك خواص معينة لتطويع هذا الكمبوننت لهذه الطريقة أم هناك أحداث معينة أم هناك أكواد برمجية أم ماذا..؟..

3- إذا وجدتم الوقت الكافي أخبروني كيف عندما أدخل حرفاً في رقم الصنف في الفاتورة فإنه يبحث بشكل سريع ويفتح لي قائمة يجلي لي فيها الأصناف الموجودة لدي في المخزون ليسهل علي عدم كتابة رقم الصنف كاملاً..

4- أرجو أن تكون الإجابة للأسئلة الاولى بدون تعليمات وعبارات SQL وللسؤال الرابع على ذوقكم .

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

دمتم سالمين..

#8

السلام عليكم

فاهم قصدك اخي العزيز ، الفكرة جدا جميلة وهي موجودة ببرامج محاسبة قليلة جدا مثل برنامج الأمين للمحاسبة . ولقد عملتها في برنامجي ولكن باستخدام كمبيونت TMS Grid موجود على هذا الموقع www.tmssoftware.com إذا رغتب في شرحها لك باستخدام هذا الكمبيونت فلا مانع لدي .

#10

الله يعطيك العافيةأخي أبو محمد .. وعلى قولة السوريين : الله لا يحرمني هالوش..شكرا

#11

زملائي الأكارم :

تم بعون الله التغلب على المشكلة التي طرحتها في موضوعي هذا ..وهذا كود موضوع على حدث لبـ Key Prees للـ DBGrid التي عن طريقها سأدخل بيانات الفاتنورة ويتعامل مع المخزون كإنقاص الكمية منه ... وأي استفسار أنا جاهز للرد

أشكر كل من ساهم مغعي بها السؤال ... ودمتم سالمين

procedure TForm2.DBGrid1KeyPress(Sender: TObject; var Key: Char);

Var

S:String;

A:Real;

begin

If DBGrid1.SelectedIndex=0 then

Begin

If Key=#13 Then

Begin

S:=Ft2ff3.Value;

If Form1.St1.FindKey() Then

Begin

Ft2.Edit;

Ft2ff4.Value:=Form1.St1a2.Value;

Ft2ff6.Value:=Form1.St1a4.Value;

Ft2.Post;

Form2.DBGrid1.SelectedIndex:=2;

End

Else

Begin

ShowMessage('عذرا هذا الصنف غير موجود لديك في المخزون');

Exit;

End;

End

Else

Exit;

End

Else

If DBGrid1.SelectedIndex=2 then

Begin

If Key=#13 Then

Begin

A:=Ft2ff5.Value;

Form1.St1.Edit;

Form1.St1a3.Value:=Form1.St1a3.Value-A;

Form1.St1.Post;

Ft2.Edit;

Ft2ff7.Value:=Ft2ff5.Value*Ft2ff6.Value;

Ft2.Post;

Ft2.Insert;

DBGrid1.SelectedIndex:=0;

End

Else

Exit;

End;

end;

#12

الحمدلله أخوي جواد انحت مشكلتك

وعفوا عن عدم الرد مرة أخرى بسبب الامتحانات

When You Started With Delphi ...You Could Not Stop!

delphiteam2.jpg

alharmoodiGropu.com

#13

السلام عليكم

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

لدي سؤال على لـVirtualViewTree هل تعاملت معها بالسابق ام لا

#14

سؤوالك أخي أبو محمد على طاولة النقاش....

دمتم سالمين

#15

أخي أبو محمد يوجد عنصر في صفحة Win32 اسمه Tree View وهو عنصر لعمل شجرة عناصر مرتبطة [أحداث معينة ومتفاعلة فيما بينها كتلك التي تراها غندما تفتح الريجستري في الويندوز...ما عليك سوى إضافته ومن ثم دبل كليك عليه يظهر صندوق حوار منه تستطيع إضافة عنصر جددي وإضافة عناصر فرعية كما يمكنك أن تضع صورة بجانب كل عنصر....هذا ما فهمته من سؤالك فأرجو المعذرة على التقصير...

مع تحياتي..

هذا الموضوع مغلق.

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

عدد الزوار حالياً

المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية

—الإجمالي—أعضاء مسجّلون—زوار بدون تسجيل

جارٍ التحقق من المتواجدين…