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

تخزين البيانات فالكمبوبوكس او الداتاكمبو

مغلق
بدأه POWER _GIRL في 19 مارس 2005 · 10 رد · 1,121 مشاهدة · في لغة Ms Visual Basic 6 وما قبلها من إصدارات
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

يامبرمجين الداتا بيس

ابغاكم تفهموني ايش الفرق بين استخدام

DataCombox

Combox

انا جربت اخزن فيها البيانات لكن يطلعلي اول سجل بس!؟

انتوا عندكم خبره اكيد انا اول برنامج ليا ..........برجاء ابغا اتعلم..

هذا كودي

Set rs_TST = New ADODB.Recordset 
rs_TST.CursorLocation = adUseClient
rs_TST.Open ("SELECT  Emp_No,Emp_Name  FROM Employees"), cn, adOpenKeyset, adLockOptimistic

Set DataCombo1.RowSource = rs_TST
DataCombo1.ListField = "Emp_Name"

DataCombo1.Refresh
If rs_TST.State = adStateOpen Then rs_TST.Close

Set DataCombo1.DataSource = rs_TST
DataCombo1.DataField = "Emp_Name"

ورجعت وكتبت دا بس برضوا ........

استناكم(",)

تم تعديل هذه المشاركة بواسطة POWER _GIRL في 19 مارس 2005 في 23:19

<< CLICK TO START>>

post-41869-046528000%201305052277.jpg

ليس أن تجد حلا بل أن تجد الافضل

أن تصـــنع الخـيال هذا هوا الأفضل</span>

#2

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

/index.ph...&hl=Data+Combox

:rolleyes:

/index.ph...1&st=&p=entry

تم تعديل هذه المشاركة بواسطة HnHn في 20 مارس 2005 في 11:59

سجل ايميلك هنا

googlejb5.gif ليصلك كل ما هو مفيد في عالم البرمجة
#3

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

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

يعني ايه rs او RecordSet دا الجزء الخاص بالتعامل مع السجلات بمعني اخر

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

لما اقله مثلا rs.movenext دا معناه ان انا بقول للمؤشر الي موجود علي سجلات القاعدة اتحركلي للسجل التالي وهكذا

طيب ملاحظه :-

في بداية اي برنامج المؤشر بيبقي واقف فين ؟؟ عند بداية أول سجل صح ؟ لان دا اول واحد يعني هو مش شايف الا بيانات السجل الي هو واقف عليه وانا عاوزه يملالي combo او اي اداه تانيه بتشتغل بنفس الاسلوب بالبيانات ميجبليش اول واحد الي هو واقف عليه وبس

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

الكود الي حضرتك حطتيه

Set DataCombo1.DataSource = rs_TST
DataCombo1.DataField = "Emp_Name"

أول حاجه حددنا ال DataSource بتاعه ال DataCombo1

والسطر الثاني ؟

DataCombo1.DataField = "Emp_Name"

معناه ايه الكلام دا ؟ ان انا أخبر البرنامج ان بيانات ال DataCombo1 بتساوي حقل اسم الموظف اوEmp_Name

ولما ننفذ الكود ايه الي بيحصل فعلا بيعرضلي اسم الموظف بس فيه حاجه ايه هيا ؟

انه بيعرض اول موظف وبيقف ليه لان انا لم أخبره ان يتحرك لباقي السجلات ودا نعمله ازاي بالكود

يبقي التعديل الي مفروض يتم علي الكود

بدال

DataCombo1.DataField = "Emp_Name"

نخليها

Do Until rs_TST.EOF
DataCombo1.DataField = "Emp_Name"
rs_TST.Movenext
Loop

او

Do While not rs_TST.EOF
DataCombo1.DataField = "Emp_Name"
rs_TST.Movenext
Loop

ايه الفرق بينه وبين

DataCombo1.DataField = "Emp_Name"

ان في أول خطوة أخبرته ان يكرر الأوامر التي سوف اكتبها حتي يصل الي نهايه أخر سجل

ودا السطر

Do Until rs_TST.EOF

السطر الذي يليه

DataCombo1.DataField = "Emp_Name"

طبعا ملينا هنا الDataCombo1

السطر التالي

rs_TST.Movenext

أخبرته ان ينتقل الي السجل التالي

واخيرا أمر التكراك loop لكي يعود ويكرر نفس الخطوات حتي يتحقق الشرط eof وهو الوصول الي أخر سجل

غيري الكود وان شاء الله البرنامج يشتغل

تم تعديل هذه المشاركة بواسطة abu_eldahab في 20 مارس 2005 في 13:18

#4

ولا وصله البرنامج فيها يتحمل اخي hnhn :angry:

<< CLICK TO START>>

post-41869-046528000%201305052277.jpg

ليس أن تجد حلا بل أن تجد الافضل

أن تصـــنع الخـيال هذا هوا الأفضل</span>

#5

فالبدايه اشكرك على الشرح يعجبي اسلوب المعلم

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

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

بس مافهمت ايش الرابط..لان الاغلاق تم بعد العمليه؟

Set rs_TST = New ADODB.Recordset 
rs_TST.CursorLocation = adUseClient

rs_TST.Open ("SELECT Emp_ID , Emp_Name  FROM Employees ,EmpSrv  WHERE  Emp_ID= ES_EmpID  AND  ES_Service_ID=(select  SrvD_ServiceID from ServicesDetails where SrvD_ID=" & Sev_IDX & ")"), cn, adOpenKeyset, adLockOptimistic

Set DataCombo8.RowSource = rs_TST     ' the detail table
DataCombo8.ListField = "Emp_Name"     ' the display field in detail table
DataCombo8.Text = rs_TST(1)
DataCombo8.Refresh

If rs_TST.State = adStateOpen Then rs_TST.Close
وإستبدلت هذا الكود بهذا
Set rs_TST = Nothing

تم تعديل هذه المشاركة بواسطة POWER _GIRL في 20 مارس 2005 في 15:06

<< CLICK TO START>>

post-41869-046528000%201305052277.jpg

ليس أن تجد حلا بل أن تجد الافضل

أن تصـــنع الخـيال هذا هوا الأفضل</span>

#6
Set rs_TST = New ADODB.Recordset 
rs_TST.CursorLocation = adUseClient
rs_TST.Open ("SELECT  Emp_No,Emp_Name  FROM Employees"), cn, adOpenKeyset, adLockOptimistic

Set DataCombo1.RowSource = rs_TST
DataCombo1.ListField = "Emp_Name"

DataCombo1.Refresh
If rs_TST.State = adStateOpen Then rs_TST.Close

هنا لو نلاحظ ان كود تفريغ محتويات ال recordset جه امتا ؟

بعد ما ال DataCombo1 قام بملئ أول اسم فقط ولذلك كان من الطبيعي يقف

لان من المعروف من البرنامج بيمشي سطر سطر

وهنا ملينا ال DataCombo1 وعملنا رفرش وبعد كدا قفلنا الاتصال

ولذلك كان ممكن يقف

انا مش شايف فيه داعي لغلق ال recordset

ثم انا امتا احتاج اغلق ال recordset ؟

حاجات كتير منها مثلا

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

Set rs_TST = New ADODB.Recordset

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

والمتغير الي اتحجز هنا الي هو rs_TST ايه وظيفته

لما اقله الأمر دا مثلا

rs_TST.Open ("SELECT Emp_ID , Emp_Name  FROM Employees ,EmpSrv  WHERE  Emp_ID= ES_EmpID  AND  ES_Service_ID=(select  SrvD_ServiceID from ServicesDetails where SrvD_ID=" & Sev_IDX & ")"), cn, adOpenKeyset, adLockOptimistic

معناها اذهب الي الجداول Employees و EmpSrv وحملي محتوياتهم في الذاكره لاني هتعامل معاهم

طيب امتا احتاج انفذ الأمر

If rs_TST.State = adStateOpen Then rs_TST.Close

لما اكون مبقتش محتاج اي اتصال مع الجداول دي ومفيش داعي تفضل محتوياتهم موجوده داخل المتغير rs_TST

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

ومن اجل ذلك بنحط في تعريف المتغير كلمه as new علشان ميعملش مشاكل لما احمله ببيانات من جدول أخر وينشئه من جديد

اتمني ان اكون قد وضحت كيفيه تعامل ال recordset مع الذاكره

إذن ايه الداعي اني اقفل الجدول ؟ بعد تنفيذ الأمر ؟ من وجهة نظري انه ملوش داعي ولو كلامي غلط ياريت اي من الاخوة المشرفين يوضحلنا الصح لاني مبتدئ جدا مع الفجول بيسك وقواعد البيانات مكملتش شهر :( وبحاول افيد بالمعلومات الي قدرت اعرفها

تحياتي

#7

ماشاء الله يعني انت مبتدئ! أجل انا ايش سالب مبتدئ!

ولا نوع من التواضع :rolleyes:

انا تعمدت اني اتأخر فالرد لأن كلامك كان لازم يتقرا بتركيز ..

1: انا معاك بالنسبه لأنوا يقفل بعد اول سجل لكن.. ايش الي خلاه يخزن كل البيانات فالكائن (list) بدون مانستخدم دوران و move.next ! لو كنت كاتبتها كنت بررت سبب توقف التخزين بجمله اغلاق السجل.. كأن الكود كان بيتكرر .. وإلا كيف خزن كل السجلات فالليست وبدون الجمله! ..وكان ما خزن سجل واحد بقفل rs .. هذا يفسر انا الكود بيعمل دوران او تكرار لكن عمل الكود غير الواضح ليا مقارنه بالمكتوب!؟

Set rs_TST = New ADODB.Recordset 
rs_TST.CursorLocation = adUseClient
rs_TST.Open ("SELECT  Emp_No,Emp_Name  FROM Employees"), cn, adOpenKeyset, adLockOptimistic

Set DataCombo1.RowSource = rs_TST
DataCombo1.ListField = "Emp_Name"

DataCombo1.Refresh
If rs_TST.State = adStateOpen Then rs_TST.Close

اما بالنسبه لغلقه فانا عندي 18 جدول وانا كنت بستعمل متغير السجلات عشان البيانات فالكائنات (كمبو بوكس -والليست..)

لكن انا استغربت من كلامك

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

ومن اجل ذلك بنحط في تعريف المتغير كلمه as new علشان ميعملش مشاكل لما احمله ببيانات من جدول أخر وينشئه من جديد

ان كل القاعده نستعمل معاها متغير سجلات واحد!!!!!؟؟؟ انا مستخدمه اكتر من 8 ياترى غلط بالنسبه ل18 جدول ..

--------------------------- تحياتي وتقولي مبتدئ!

تم تعديل هذه المشاركة بواسطة POWER _GIRL في 21 مارس 2005 في 16:51

<< CLICK TO START>>

post-41869-046528000%201305052277.jpg

ليس أن تجد حلا بل أن تجد الافضل

أن تصـــنع الخـيال هذا هوا الأفضل</span>

#8

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

بخصوص

انا معاك بالنسبه لأنوا يقفل بعد اول سجل لكن.. ايش الي خلاه يخزن كل البيانات فالكائن (list) بدون مانستخدم دوران و move.next ! لو كنت كاتبتها كنت بررت سبب توقف التخزين بجمله اغلاق السجل.. كأن الكود كان بيتكرر .. وإلا كيف خزن كل السجلات فالليست وبدون الجمله! ..وكان ما خزن سجل واحد بقفل rs .. هذا يفسر انا الكود بيعمل دوران او تكرار لكن عمل الكود غير الواضح ليا مقارنه بالمكتوب!؟

انا لم أستخدم الكائن list علي ما اتذكر ملئت البيانات بآداة ال combo لانني قلت لحضرتك مبتدئ جدا حتي لا أجد الوقت كي أطبق ما تعلمت بس ان شاء الله كمان فتره بسيطه اكون خلصت مكتبه ال ado وال adox

وهنا ليا ملاحظه :-

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

ضع الزر الفلاني وضع تحت منه هذا الكود

وضع هذا الكود في بدايه التحميل

وانسخ هذا الكود في هذا المكان وانتهي !!! ونترك القارئ يقوم بفهم الكود حسب ما يريد وربما يفهمه بصوره خطأ !!

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

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

نرجع لكلام حضرتك

حضرتك بتقولي انه قام بملئ ال list بالبيانات مع انه لم يتم اضافه كود الدوران او الغلق مع انني اتذكر ان سؤال حضرتك قبل كدا انه كان بيملئ أول اسم فقط ؟

ربما من خصائص ال list انه يأتي بكل بيانات الحقل الذي يتم تحديده

بمعني لو عندنا dbgrid او datagrid وعاوزين نعرض مثلا حقل اسم الموظف بيكون الأمر مثلا

select name from emp

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

أو ممكن يكون هناك احتمال آخر وهو تكرار الحدث وللأسف هضطر أستطرد قليلا عن الموضوع حتي أوضح شيئ

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

1- properity او خاصية

2- event او حدث

3-method أي طريقة او كيفيه استجابته ولا ادري ان كانت الترجمه صح ولا لا

ولنفرض لدينا شخص معين وعاوزين نطبق الشيئ دا

ال properity بتاعه الانسان ايه ؟ الطول الوزن اللون لو الشعر الخ ....

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

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

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

نرجع لسؤال حضرتك

ممكن من الاسباب انه قام بالملئ بدون عمليه التكرار ودا قلت لسبب من وجهه نظري وتحمل الخطا وتحتمل الصواب

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

أما بخصوص

اما بالنسبه لغلقه فانا عندي 18 جدول وانا كنت بستعمل متغير السجلات عشان البيانات فالكائنات (كمبو بوكس -والليست..)

لكن انا استغربت من كلامك

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

ومن اجل ذلك بنحط في تعريف المتغير كلمه as new علشان ميعملش مشاكل لما احمله ببيانات من جدول أخر وينشئه من جديد

ان كل القاعده نستعمل معاها متغير سجلات واحد!!!!!؟؟؟ انا مستخدمه اكتر من 8 ياترى غلط بالنسبه ل18 جدول

متي احتاج الإعلان عن أكثر من متغير لل recordset ؟؟

1- عندما اتعامل مع اكثر من جدول في نفس ال form

2- عندما اريد تحميل بيانات جداول مختلفه في الذاكرة فلازم ليا مخزن او ( متغير ) أخر غير الي انا بعرفه زي rs_TST الي حضرتك قمتي بتعريفه

سؤال آخر

لو انا عندي اكثر من جدول هل من الممكن ان اتعامل معهم بمتغير واحد فقط ؟؟

نعم بس بشرط

انه يكون ال form الواحد بيتعامل مع جدول واحد وform آخر يتعامل مع جدول آخر فهنا مش هحتاج اعمل اكثر من متغير

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

ودا طبعا بيتم عن طريق الأمر

If rs_TST.State = adStateOpen Then rs_TST.Close

واقوم بفتح الجدول الآخر بواسطه الأمر rs_TST.open

سؤال اخر :- هل هناك مشكله اني اعلن عن اكثر من متغير واجعل كل متغير مختص بالتعامل مع جدول مختلف ؟

الاجابة :- المبرمج المحترف هو الذي يقوم بعمل برنامجه بأفضل شكل وأحسن آداء

لانه من المعروف انه عندما اعلن عن متغير يقوم الوندوز بحجز مكان في الذاكره له لكي يتم تحميله بالقيم وهكذا !!

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

اذن سؤال حضرتك

ان كل القاعده نستعمل معاها متغير سجلات واحد!!!!!؟؟؟

ممكن جدا والسبب أنا قلته في بداية المشاركة

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

وانا يمكن طريقه الكود الي حضرته بتكتبيه مش عجباني لانها تؤدي الي تكرار كتابة الكود في أكتر من مكان داخل ال form او البرنامج ولكن لو نظمنا الكود داخل البرنامج هيسهل علينا حاجات كتير وان شاء الله هضع لحضرتك في هذا الموضوع الطريقه التي وجدتها سهله وسلسلة وقويه في التعامل مع مكتبه ال ado

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

وأي سؤال اتفضلي اسئلي وربنا يسر والأخوة الأفاضل هنا يساعدوا

تحياتي

تم تعديل هذه المشاركة بواسطة abu_eldahab في 22 مارس 2005 في 01:37

#9

:blink: OH

بدايه بس فالحقيقه دي النهايه عشان انا كتبت الي تحت اول بعدين كتبت بدايه الرد لأني مني عارفه ايش اقول اقول اني قريت ردك اكتر من عشرين مره ولا اقول ان كلامك فمكانوا بصراحه كلامك وشرحك وفهمك للكود ومعنى الكود يدل على حبك للبرمجه واندماجك الله معاك :lol: بس مو انت بس الي تحب البرمجه في ناس هنا كمان والجميل فهذا المنتدى انك تجد هؤلا الاشخاص هنا ok B) بالنسبه لي ?

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

وانا اعتقد ان تعليلك صحيح بإن ديناميكيه التعبئه لها هي نفس ديناميكيه DATAGRID لان الحدث ليس في موضع تكرار

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

الافضل تعريف متغير عام يخزن قيمه سجل حساب المستخدم؟ ام كتابه كود4 اسطر ف4 فورمات عشان يديني السجل؟ كيف نعرف حجم الاداه المستخدمه كأده DTPicker هل حجمها اكبر ام تكتب كود 5اسطر على Textbox+MonthView يعني حجم الاداه ومتى تحتاج لدي الاداه؟ وايضا هل انك تدرج فورمات لعملك ولا تقلل الفورمات وتعمل show and hide للأدوات الي عليه او انك تستخدم نفس الادوات وتغير فالكود ويزيد الكود يعني حجم البرنامج على الذاكره وحجم النافذه المفتوحه؟

وايضا لإجراء عمليات فالخلف هل وضع كائنات على الفورم مخفيه ام استخدام متغيرات ?

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

اما بالنسبه لكودي ليش موعاجبك! :angry: طيب وريني كودك كيف عشان أغير رأي فكودي :rolleyes:

----------------------------------------------------------- thanks man

PG_LIS.rar

<< CLICK TO START>>

post-41869-046528000%201305052277.jpg

ليس أن تجد حلا بل أن تجد الافضل

أن تصـــنع الخـيال هذا هوا الأفضل</span>

#10

حاضر ان شاء الله أول ما ظروفي تسمح هرد علي حضرتك

تحياتي

#11

أنا فنتظارك وإن شاء الله المانع خير

بالتوفيق

تم تعديل هذه المشاركة بواسطة POWER _GIRL في 24 مارس 2005 في 02:48

<< CLICK TO START>>

post-41869-046528000%201305052277.jpg

ليس أن تجد حلا بل أن تجد الافضل

أن تصـــنع الخـيال هذا هوا الأفضل</span>

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

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

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

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

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

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