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

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

بدأه سلامه بيومى في 24 سبتمبر 2009 · 5 رد · 1,233 مشاهدة · في لغة Delphi
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

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

والجدول هو جدول دليل الحسابات

وشكرا

#2

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

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

على أية حال، ضع هذا الكود في إجراء الزر:

  1.  
  2. procedure TForm1.BitBtn1Click(Sender: TObject);
  3. var
  4. N, NParent: TTreeNode;
  5. I, NLevel: integer;
  6. StrList: TStringList;
  7. begin
  8. try
  9. StrList := TStringList.Create;
  10. for I := 0 to 9 do // يمكنك هنا زيادة أو إنقاص المستويات حسب ما لديك في الجدول
  11. StrList.Add(IntToStr(I));
  12.  
  13. N:= TV1.Items.AddChild(nil, 'دليل الحساب');
  14. StrList.Objects[0] := N;
  15.  
  16. ADOTable1.Connection := ADOConnection1;
  17.  
  18. ADOTable1.Active := true ;
  19. ADOTable1.First;
  20. While not ADOTable1.Eof do begin
  21. NLevel := ADOTable1.FieldByName('AccLevel').AsInteger;
  22. NParent := TTreeNode(StrList.Objects[NLevel - 1]);
  23. N:= TV1.Items.AddChild(NParent, ADOTable1.FieldByName('AccName').AsString);
  24. StrList.Objects[NLevel] := N;
  25. ADOTable1.Next;
  26. end;
  27. Tv1.FullExpand;
  28. Tv1.Items[0].Selected := True;
  29. except
  30. on E: Exception do ShowMessage('حدث خطأ:' + #13#10 + E.Message);
  31. end;
  32. end;
  33.  

الكود السابق يستطيع التعامل مع 9 مستويات، لكن يمكنك زيادة (أو إنقاص) ذلك بتغيير الرقم 9 (في جملة for الأولى) حسب ما لديك من مستويات في الحقل AccLevel في الجدول.

ملاحظة: الكود طبعاً يعتمد على ترتيب السجلات لديك في الجدول.

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

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

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

#3

الشكر الجزيل الى الاخ الفاضل / ناجى najy

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

هذا فعلا هو المطلوب

واشكرك عى مجهوادتك

وانا اريد منك هذه الطلبات وارجو ان يتسع صدرك لى

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

الطلب الثانى

عندى جريد من نوع stringgrid

واريد عند كتابه السعر فى عمود السعر يقوم بضرب السعر فى الكميه ويضعها فى عمود اجمالى

ثم يجمع عمود اجمالى فى تكست الاجمالى

وهذه صوره الجدول

واكون شاكر الافضال

ونعلش انا اثقل عليك

post-137854-1254517671_thumb.jpg

#4

اخى العزيز الفاضل / الاستاذ ناجى najy

هذا هو البرنامج الذى اقوم بتصميمه

هو فعلا برنامج يستحق المجهود والتعب عليه

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

البرنامج المرفق

مطلوب

كيفيه الضغط على اى حساب فى الشجره يضع بياناته فى التكستات الموجوده بالفورم

2 - عند فتح البرنامج من فورم الباسوورد والضغط على مفتاح موافق يغلق فورم الباسوورد ويفتح فورم مين

3 - فى فورم الفاتور مطلوب فى حاله كتابه السعر او الكميه يقوم بضرب الكميه فى السعر ويضع الناتج فى اجمالى الصنف

وفى نفس الوقت يقوم بجمع عمود اجمالى الصنف ويضع الناتج فى تكست الاجمالى

وشكرا لك ولمساعدتك لجميع اعضاء المنتدى

_____.rar

#5

بالنسبة للسؤال الأول

هذا ما قلته لك المرة السابقة بأن على الشجرة أن يجب أن تتصرف كأي عنصر قواعد بيانات لذلك يجب أن تنشأ مكون وتستق من DataLink أو DataLinkField وهذا رائي ولكن بالنسبة لماطلبته الخل

procedure TForm1.TreeView1Click(Sender: TObject);
begin
  if TreeView1.Items.Count=0 then Exit;
  AdoTable1.Locate.Locate('AccName', TreeView1.Selected.Text , [loCaseInsensitive]);
end;

بالنسبة للسؤال الثاني

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

يجب أن تعرف وظيفة جديد هو Excute في فورم الباسورد

procedure TPasswordForm.LogInButtonClick(Sender: TObject);
begin
  if passwordEdit.Text = 'delphi' then // مثلا هنا كلمة السر هي delphi
	ModalResult := mrOK
  else
	ModalResult := mrAbort;
end;

class function TPasswordForm.Execute: boolean;
begin
  with TLoginForm.Create(nil) do
  try
	Result := ShowModal = mrOk;
  finally
	Free;
  end;
end;

الأن لإظهر فورم الباسورد قبل النافذة الرئيسية من القائمة الرئيسية للدلفي إختر Project من ثم View Source ثم قم بالتعديل التالي لإظهار فورم الباسورد أولا

begin
  if TLoginForm.Execute then
  begin
	Application.Initialize;
	Application.CreateForm(TMainForm, MainForm);
	Application.Run;
  end
  else
  begin
	Application.MessageBox('You are not authorized to use the application. The password is "delphi".', 'Password Protected Delphi application');
  end;
end.

بالنسبة للسؤال الثالث

للوصول إلى خلايا الجريد يجب تحديد رقم العمود ورقم الصف وللحصول على رقم العمود ورقم الصف يجب تعريف متغيران عامان

var
  Form1: TForm1;
  Col, Row: Integer;

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

procedure TForm1.StringGrid1SelectCell(Sender: TObject; ACol,
  ARow: Integer; var CanSelect: Boolean);
begin
  Row:= ARow;
  Col:= Acol;
end;

الأن للقيام بعملية الجمع مثل برنامج بازار مثلا للتنقل بين خلايا الجريد بالزر إنتر يجب أن نستبدله بالزر تاب وهناك يجب أن نختبر الزر من خلال رقمه

وبعد ذلك نقوم بجمع القيم

procedure TForm1.StringGrid1KeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
begin
 if Key = 13 then
 begin
  if col= 3 then
   begin
	StringGrid1.Cells[Col, Row]:= IntToStr(StrToInt(StringGrid1.Cells[Col-1, Row])+
														StrToInt(StringGrid1.Cells[Col-2, Row]));
   end;
  Key:= 9;
  end;
end;

أتمنى التوفيق

#6

اخى الفاضل السيد / حسين

اشكرك على اهتمامك بمتابعه موضوعاتى

ولكن اعزرنى لانى كما سبق وقلت بانى مبتدئ فى الدلفى وانى كنت اعمل بالفيجول بيسك 6

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

انا سوف اقوم تجربه ماقله فى ردك واخبرك بما حدث

وعلى العموم البرنامج موجود فى دردى على الاخ ناجى ياريت تنزله وتعدل عليه طلباتى اذا امكن

وشكرا لك وللجميع

سلامه بيومى

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