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

مشكلة فى ال ctreeviewcontrol و ترتيب ال nodes

مغلق
بدأه helmy_foad في 21 يونيو 2007 · 21 رد · 2,520 مشاهدة · في قواعد بيانات Microsoft Access
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

لدى برنامج أجنبى أقوم بتعديلة ليتناسب مع إحتياجاتى

واجهتنى مشكلتين بالبرنامج

المشكلة الاولى فى ال treeviewcontrol

حيث أننى أريد أن يكون المستوى الثانى فى الفروع هو السلسلة SeriesName و ليس عنوان الكتاب title

و إذا لم تكن هناك سلسلة خاصة بالمؤلف يكون المستوى الثانى هو ال title طبعاً

بمعنى

إذا فرضنا ان مؤلف كالدكتور نبيل فاروق مثلاً ينتج 3 سلاسل ( رجل المستحيل ، ملف المستقبل ، كوكتيل 2000 )

كل منها تحتوى على عدد من الروايات قد تصل إلى 150 رواية

و نجيب محفوظ لا ينتج سلاسل فالكتب الخاصة بة تكون منفصلة ( اللص و الكلاب - رادوبيس - زقاق المدق ...........)

اريد ان يكون ترتيب الشجرة

د / نبيل فاروق

-------------- رجل المستحيل

--------------------------- 1 - العدد الاول

--------------------------- 2 - العدد الثانى

--------------------------- و هكذا

------------- ملف المستقبل

--------------------------- 1 - أشعة الموت

--------------------------- 2 - العدد الثانى

--------------------------- و هكذا

نجيب محفوظ

------------- اللص و الكلاب

------------- رادوبيس

------------- زقاق المدق

و المشكلة هنا فى هذا الكود :

Function tvwBooks_Fill()

‘========================================================
‘Modified from a procedure generated by the Treeview Control Wizard
‘
‘PURPOSE: Fill the ActiveX Treeview Control ‘tvwBooks’
‘ACCEPTS: Nothing
‘RETURNS: Nothing
‘CALLED FROM: Form Load event
‘========================================================

On Error GoTo ErrorHandler

   Dim strMessage As String
   Dim dbs As DAO.Database
   Dim rst As DAO.Recordset
   Dim intVBMsg As Integer

   Dim strQuery1 As String
   Dim strQuery2 As String
   Dim nod As Object
   Dim strNode1Text As String
   Dim strNode2Text As String
   Dim strVisibleText1 As String
   Dim strVisibleText2 As String

   Set dbs = CurrentDb()
   strQuery1 = "qryEBookAuthors"
   strQuery2 = "qryEBooksByAuthor"

   With Me![tvwBooks]
	  ‘Fill Level 1
	  Set rst = dbs.OpenRecordset(strQuery1, dbOpenForwardOnly)

	  ‘Add a node object for each record in the "qryEBookAuthors" table/query.
	  ‘For parent nodes, the Key property is based on the the level of the tree
	  ‘in which the node exists and the Link Master field(s) you selected when
	  ‘linking levels in the wizard. For child nodes, the Relative property
	  ‘is based on the level of the tree in which the Parent node exists and
	  ‘the Link Child field(s) you selected when linking levels in the wizard.

	  Do Until rst.EOF
		 Debug.Print "Adding Level 1 item: " & rst![AuthorID]
		 strNode1Text = StrConv("Level1 - " & rst![AuthorID], 
			vbLowerCase)
		 Debug.Print "Node 1 text: " & strNode1Text
		 strVisibleText1 = rst![LastNameFirst]
		 Debug.Print "Level 1 visible text: " & strVisibleText1
		 Set nod = .Nodes.Add(Key:=strNode1Text, 
			Text:=strVisibleText1)
		 nod.Expanded = True
		 rst.MoveNext
	  Loop
	  rst.Close

	  ‘Fill Level 2
	  Set rst = dbs.OpenRecordset(strQuery2, dbOpenForwardOnly)

	  ‘Add a node object for each record in the "qryEBooksByAuthor"
	  ‘table/query. For parent nodes, the Key property is based on the
	  ‘level of the tree in which the node exists and the Link Master
	  ‘field(s) you selected when linking levels in the wizard. For child
	  ‘nodes, the Relative property is based on the level of the tree in
	  ‘which the Parent node exists and the Link Child field(s) you selected
	  ‘when linking levels in the wizard.

	  Do Until rst.EOF
		 Debug.Print "Adding Level 2 item: " & rst![Title]
		 strNode1Text = StrConv("Level1 - " & rst![AuthorID], vbLowerCase)
		 Debug.Print "Node 1 text: "; strNode1Text
		 strNode2Text = StrConv("Level2 - " & rst![AuthorID] & " - " 
			& rst![Title], vbLowerCase)
		 Debug.Print "Node 2 text: " & strNode2Text

		 strVisibleText2 = rst![Title] & rst![BeenRead]
		 Debug.Print "Visible text: " & strVisibleText2
		 .Nodes.Add relative:=strNode1Text, 
			relationship:=tvwChild, 
			Key:=strNode2Text, 
			Text:=strVisibleText2
		 rst.MoveNext
	  Loop
	  rst.Close

   End With
   dbs.Close

ErrorHandlerExit:
   Exit Function

ErrorHandler:
   Select Case Err.Number
	  Case 35601
		 ‘Element not found
		 strMessage = "Possible Causes: You selected a table/query" 
			& " for a child level which does not correspond to a value" 
			& " from its parent level."
		 intVBMsg = MsgBox(Error$ & strMessage, vbOKOnly + 
			vbExclamation, "Run-time Error: " & Err.Number)
	  Case 35602
		 ‘Key is not unique in collection
		 strMessage = "Possible Causes: You selected a non-unique" 
			& " field to link levels."
		 intVBMsg = MsgBox(Error$ & strMessage, vbOKOnly + 
			vbExclamation, "Run-time Error: " & Err.Number)
	  Case Else
		 intVBMsg = MsgBox(Error$ & "@@", vbOKOnly + 
			vbExclamation, "Run-time Error: " & Err.Number)
   End Select
   Resume ErrorHandlerExit

End Function

و أثناء بحثى عن حل لهذة المشكلة ، علمت انة كان فى الaccess 97 معالج wizard يقوم بتحرير ال treeview

و إختفى هذا المعالج مع إصدار 2000 و لم يعد مرة ثانية .

لذا فإن البعض يقومون بتصميم الشجرة على access97 ثم يقومون بنسخ الكود ، و لصقة فى الأكسيس xp أو 2003

طبعاً الحصول على نسخة من ال access 97 الان أصبح صعباً

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

و الطلب الثانى بعد أذنكم

هو انة يوجد textbox أسمة file اريد لة زر إستعراض بحيث اربط الtextbox بال path الخاص بملف هذا الكتاب الإكترونى على جهازى

ثم بالضغط على التكست بوكس نفسة ينفتح ملف الكتاب باى صيغة سواء كانت pdf او chm او word

مثل مثال الاستاذ عمار زيد .

ارجو من الجميع الإهتمام بمساعدتى لان البرنامج بالفعل جميل جداً ( على الاقل بالنسبة لى كمبتدئ )

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

Original_EBook_Companion.rar

تم تعديل هذه المشاركة بواسطة helmy_foad في 22 يونيو 2007 في 00:51

#2

و أثناء بحثى وجدت معالج لل tree control على إمتداد mde و لا يعمل إلا على الأكسيس 97

فى المرفقات

و هذة الصفحة من ميكروسوفت تتحدث عن الأمر

و رغم أننى أجيد الإنجليزية ، إلا أننى لم أفهم شيئاً

http://support.microsoft.com/kb/209891

______tree_control_________97.rar

تم تعديل هذه المشاركة بواسطة helmy_foad في 22 يونيو 2007 في 15:34

#3

و وجدت الان مثالين عن هذا الموضوع ، مع شرح فى ملف وورد

لكن مشكلتى اننى لا أفهم فى ال vba لذلك لم أستطيع الإستفادة منهما

أرجو المساعدة يا إخوانى ، فأنا لى الأن 3 أيام أبحث و أحاول و لم أصل لشئ

accarch53.zip

accarch103.zip

#4

يا أبا فؤاد

لقد قمت بعمل مثال مستعجل على الطاير

جربه فقد يفيدك أطلع على الجدول وعلى الكود

TreeView.rar

#5

أولاً : أشكرك أستاذنا مصلح على الإهتمام و الرد

و نعم هذا هو شكل الشجرة المطلوب بهذة المستويات .. و لكن ....

الأرقام الموضوعة بجانب أسماء الكتب ما فائدتها ؟

و كذلك فى الجدول ، هل سيكون مطلوباً منى كلما وضعت كتاباً أن أضع لة رقم ال level و ال parent

هذا صعب جداً و غير مريح

و أيضاً يجب أنة عند الضغط على أسم الكتاب أن تفتح جميع بيانات الكتاب

و هل لاحظت الرموز x و ÷ بجانب الكتب ، هذا يوضح هل تمت قراءة الكتب أم لا ، أم أنها يتم قراءتها حالياً

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

و يتم تعريف المستوى الأول بأنة أسم المؤلف

و الثانى بأنة السلاسل ( إن وجدت )

و الثالث أسم الكتاب

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

أنا حاولت بتغيير node2 من title إلى seriesname

و لم تفلح معى

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

#6

للرفع

#7

أخي الغالي

أنا لم أقل لك أن هذا حل سؤالك ولكنني أعطيتك الطريقة والفكرة بقي عليك أن تغير حسب رغبتك أنت

#8

انا فهمتك يا أستاذ مصلح منذ البداية

لكن ...

انت قمت بتغيير كل نظام قاعدة البيانات الأصلية و ستحتاج إلى تعديل فى الجداول أيضاً ، كما أننى كما قلت ، لا أعرف فى ال vba

لذلك ساكون فى ورطة كبيرة إذا حاولت ان أقوم بتعديل الأكواد بنفسى

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

و هذا صعب على اى مستخدم عادى

#9
اقتباس
انت قمت بتغيير كل نظام قاعدة البيانات الأصلية

هذا غير صحيح

أنا لم أحمل القاعدة أصلاً حتى أقوم بالتغيير عليها

تدري ماذا فعلت

من شرحك أخذت المعلومات التالية

اقتباس
د / نبيل فاروق

-------------- رجل المستحيل

--------------------------- 1 - العدد الاول

--------------------------- 2 - العدد الثانى

--------------------------- و هكذا

------------- ملف المستقبل

--------------------------- 1 - أشعة الموت

--------------------------- 2 - العدد الثانى

--------------------------- و هكذا

نجيب محفوظ

------------- اللص و الكلاب

------------- رادوبيس

------------- زقاق المدق

ثمل عملت مثال عليها فقط

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

و هذا صعب على اى مستخدم عادى

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

عموماً هذه كانت فكرتي وستأتيك الأفكار ممن أعرف مني في هذا المجال.

تمنياتي لك بالتوفيق

تم تعديل هذه المشاركة بواسطة مصلح الحريصي في 23 يونيو 2007 في 18:22

#10

أشكرك يا أستاذى مصلح على المساعدة و على مجهودك معى

و يكفينى أنك الوحيد الذى حاول معى حتى الان

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

و لك جزيل الشكر و فائق الإحترام

#11

لقد أنزلت المثال الأجنبي ولكني لم أطلع عليه بعد

قمت بالتعديل على المثال الذي أنزله أخي مصلح أصلحنا الله وإياه

اختفت الأرقام

تم الإستغناء عن حقل المستوى

فهل هناك ملاحظات أخرى لهذا المثال ؟

TreeView2.rar

#12

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

بارك الله فيكم اخواني

لي ملاحظة :- حتى الان لم يتم مناقشة موضوع الشجرة بطريقة الشرح والتفصيل ولذلك وحتى الان نجد من الاعضاء الكرام - وانا منهم - يجدون صعوبة كبيرة في تطويع هذا الموضوع لصالحهم

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

#13
Accessna كتب:
لقد أنزلت المثال الأجنبي ولكني لم أطلع عليه بعد

قمت بالتعديل على المثال الذي أنزله أخي مصلح أصلحنا الله وإياه

اختفت الأرقام

تم الإستغناء عن حقل المستوى

فهل هناك ملاحظات أخرى لهذا المثال ؟

بارك الله فيك أستاذنا Accessna و اشكرك على الإهتمام و الرد

تمام هذا هو شكل الشجرة المطلوب

لكن لا زال الموضوع ليس كما هو مطلوب ....لماذا ؟

لأن فى المثال الأصلى لا توجد اى أرقام لتحديد أية مستويات

فهو يسلك طريقاً سهلاً على المستخدم عن طريق الكود ، لذلك فالمستخدم لا يدخل سوى بيانات الكتاب فقط

و يحدد أسم الكاتب

فيكون أسم الكاتب هو الحقل فى المستوى 1 تلقائياً

لكن فى المثال الذى قمت انت بإرفاقة ، يجب ان أحدد أنا المستوى

و إذا قلت لة عنوان الكتاب فإنة يعرف أن هذا سيكون فى المستوى الثانى

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

و إدخال البيانات من الممكن ان يتم من خلال هذا النموذج او من خلال نموذج اخر مشابة لة لكن بدون الشجرة و هو النموذج المسمى fpriEBookNotes

و هناك إختيار لتوضيح هل هذا الكتاب جزء من سلسلة ام لا ؟

و قد اغفل صاحب البرنامج -

--------------------------------------------

صاحبتة بالأصح فهى سيدة و تدعى helen eddema

suy_hfeddema_sm.jpg

و هى مؤلفة كتاب Expert One-on-One Microsoft Access Application Development

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

--------------------------------------------

- أغفلت حقل السلاسل series name و لم تضعة فى الشجرة

و بذلك فإن الوضع الحالى يضع جميع الكتب المدخلة تحت أسم الكاتب مع إغفال السلاسل

كما اننى إقترحت أيضاً أن يكون البرامج بة الخاصية التى قام بوضعها الأستاذ عمار زيد ، و هى إمكانية وضع ال path الخاص بالكتاب فى جدول الكتب

بحيث عند الضغط على زر أو على التكست بوكس نفسة الذى بة ال path يمكن فتح الكتاب مهما كانت صيغتة

و شكرا على الرد و الإهتمام

تم تعديل هذه المشاركة بواسطة helmy_foad في 24 يونيو 2007 في 16:50

#14

لقد عملت تعديل ولكن على المثال الذي أرفقه أخي مصلح

والتعديل فقط لعرض الشجرة كخطوة أولى فإذا ما نجحت انتقلنا للخطوة الأخرى

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

تم التعديل في كود تحميل البيانات في للأداة قليلا

Original_EBook_Companion2.rar

#15

و الله أنك رائع يا أستاذنا accessna

كدة الشجرة تمام مرتبة بالترتيب المطلوب

الباقى الان هو ربط أسم الكتاب بالنموذج الخاص بة كما فى النموذج الاصلى frmTreeViewEBookNotes

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

و أنا معك متابعاً و تلميذا

تم تعديل هذه المشاركة بواسطة helmy_foad في 24 يونيو 2007 في 23:46

#16

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

بارك الله فيك اخي accessna

الرجاء تلبية طلبي

"لي ملاحظة :- حتى الان لم يتم مناقشة موضوع الشجرة بطريقة الشرح والتفصيل ولذلك وحتى الان نجد من الاعضاء الكرام - وانا منهم - يجدون صعوبة كبيرة في تطويع هذا الموضوع لصالحهم

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

#17

الخطوة الثانية انتهت

بانتظار ملاحظاتكم

أنا عملت على خلاف ملف الكتب حيث المفتاح هو إسم الكتاب

ولكن حسب طلبك فاحتمال تكرار إسم السلسلة للمؤلف وارد وكذلك إسم الكتاب احتمال تكراره وارد

لذا أنصح بتبديل المفتاح ليحتوي على الكاتب ، السلسلة والكتاب

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

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

Original_EBook_Companion3.rar

#18

الله يعطيك العافية يا أستاذنا accessna

هذا هو المطلوب بالظبط

بقى شئ واحد بسيط ليكتمل العمل و يكون برنامج مفيد للجميع

و هو تطبيق برنامج الأستاذ عمار زيد على هذا البرنامج

و هو عبارة عن إمكانية وضع مسار ملف الكتاب الإلكترونى فى التكست بوكس المسمى file عن طريق زر browse

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

PURCHASE_Demo.zip

#19

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

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

#20

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

بارك الله فيك اخي الكريم وحفظك

خدمة اخيرة هل يمكن تدلنا على ما ذكرت

"ولكن بحسب علمي لو بحثت عن شروح هنا أو في المنتديات العربية الأخرى فسوف تحصل عليها إن شاء الله "

#21
Accessna كتب:
أعتذر أخي عن التكملة وخصوصا أن مثال الأخ عمار دسم جدا ويحتاج إلى جهد لاستيعابه

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

اشكرك يا أستاذنا accessna

و بالفعل قمت بمراسلة أستاذنا عمار زيد ammar zaid و قام مشكوراً بتعديل الملف

و إليكم الأن التعديل الأخير فى المرفقات

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

Original_EBook_Companion3.rar

#22

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

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

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