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

فائدة حول فتح قاعدة البيانات

مغلق
بدأه طارق موسى في 16 أغسطس 2001 · 18 رد · 8,152 مشاهدة · في قسم الدروس والمواضيع الهامة
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

فائدة

فتح قاعدة البيانات

المستوى متوسط

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

مثل الاكسيس،

هناك طريقتين او نظامين تقوم الفيجول بيسك بتعامل بهما مع قواعد البيانات وانا في هذا الدرس ساستخدم نظام DAo والذي

موجود ومتوفر من ايام الفيجول بيسك 3 و حتى 6

خطوات فتح قاعدة البيانات

تضمين مكاتب قواعد البيانات ويكون بختيار مراجع من قائمة مشروع بشريط القوائم

[note]

project --> references --> Microsoft DAo 3.51 object libary

[/note]

تعريف متغير لكي يشير الى قاعدة البيانات ويكون من نوع قاعدة بيانات

[note]

Dim DB As Database

[/note]

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

ولكي يكون المتغيرعام فايفضل تعريفه في الموديل Module ويكون بهذه الطريقة

[note]

Public Db as database

Or

Global db as database

[/note]

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

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

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

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

فمثلا لو لكان التعامل في جميع إجزاء المشروع مع هذا الملف فيفضل فتحه في بداية تحميل المشروع

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

مساحات من الذاكرة

والمهم طريقة الفتح

ابسط طريقة هي

[note]

set Db = opendatabase("c:Shop.mdb")

[/note]

حيث shop.mdb هو ملف قاعدة البيانات وهو موضوع في المحث c:

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

Public Function PathDataBase() As String
     PathDataBase = App.Path & IIf(Left(App.Path, 1) = "", "shop.Mdb", "shop.mdb")
End Function

ونكتب الكود التالي للفتح

set db= opendatabase(PathDataBase )

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

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

فرضا انه موضوع على الملف كلمة سر ( مرور ) PassWord

فتكون طريقة الفتح كالتالي

    Set Db= OpenDatabase(PATHDATABASE, False, False, ";PWD=YourPassWord")
بحيث تضع بدل YourPassWord كلمة السر الخاصة بك

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

  Set Db= OpenDatabase(PATHDATABASE, False, True, ";PWD=YourPassWord")

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

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

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

On Error goto ErrHandel
   Set Db= OpenDatabase(PATHDATABASE, False, False, ";PWD=YourPassWord")
exit sub
ErrHandel:
msgbox  Err.Description,vbokonly, "Error Was Found"

وبذلك تفاذيا الوقع في الاخطاء وان وقعت فإن اللبرنامج لن يقف عن التشغيل او ينهار

وارجو من الله تعالى اني قد افدت الجميع

----------

طبعا يمكنم الاستفسار

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

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

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

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

#2

شكرا للأخ طارق على توضيحة وأضيف أن الطريقة السابقة تستخدم لفتح قاعدة بيانات اكسس 97 ولفتح قاعدة بيانات اكسس 2000

فاختر

project --> references --> Microsoft DAO 3.6 Object Libary

بدلا من Microsoft DAO 3.51 object libary

#3

أخواني الأعزاء سؤال يهم المبتدئين أمثالي وهو :

هل أستطيع أن أعمل قاعدة بيانات بسيطة تضم مثلاً ( الاسم والرقم وكم عمود ) من دون أن ألجاء إلى برنامج غير الفيجول بيسك ؟

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

السلام عليكم

#4

عزيزي السلام عليكم

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

ولو لم تكن تعرف كيف يمكن انشاء الجداول باستعمال اكسيس اخبرني وساشرح ذلك من بكل تاكيد.

ولك تحياتي

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

#5

أخي العزيز طارق موسى

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

السلام عليكم

#6

شكراً لك يا أخ طارق على هذا الشرح الواضح وجزاك الله خير .

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

#7

الأخ Vb6 يمكنك حذف أي ملف من خلال الأمر Kill ، ولكن تذكر أن تغلق قاعدة البيانات ومجموعة السجلات إن كنت قد فتحتها من خلال الكود. مثال:

Rs1.close

set Rs1=nothing

Db1.close

#8

شكراً لك يا أخ محمد

ولدي سؤال أخر وأسف على كثرت أسئلتي

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

#9

الأخ VB6

تسعدنا خدمتك

ولم أفهم ما تريد بالتحديد

لكن يبدو لي أنك اتصلت بقاعدة البيانات عن طريق أداة

الوصول إلى البيانات DataControl.

وقمت بتحديد خاصية DatabaseName وخاصية DatabaseName

عن طريق صندوق الخصائص properties.

هنا لا يمكنك إغلاق القاعدة إلا بعد إغلاق النموذج الذي

يحويها أو إغلاق البرنامج كما ذكرت.

وهذا في الأمور العادية.

لكن جرب هذه الطريقة:

وهي الاتصال وقطع الاتصال من خلال الكود

حدد خاصيتي DatabaseName و RecordSource

من خلال الكود مع التأكد أنهما خاليتان في

صندوق الخصائص:

ضع في حدث تحميل النموذج Form_Load :

"Me.data1.DatabaseName ="C:Db1.mdb

"Me.data1.RecordSource="Table

ثم حدد خاصية DataField لأدوات التحكم

كل أداة بما يقابلها في جدول "Table"

ومن الضروري أن تكون حددت خاصية RecordSource

للحقول بـ:"data1" في الخصائص (يدويا).

بعد ذلك نشط الاتصال

Me.Data1.Refresh

ولقطع الاتصال عن القاعدة(وهذا ما يهمك) استخدم:

Me.Data1.Database.Close

وضعه في حدث إلغاء تحميل النموذج Form_Unload

أو في المكان الذي ترغب.

ستجد أن القاعدة المفتوحة قد أغلقت.

ولإعادة الاتصال أعد المثال

وآسف على تأخر الرد

#10

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

#11

ساكمل الموضوع الأن بعد غياب دام اسبوع تقريبا عنه

فتح الجداول في قاعدة البيانات

بعد ما تعلمنا واتقنا فتح قاعدة البيانات علينا فتح الجدول المكونه لهذه القاعدة .

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

والتي هي شائعة الاستعمال واسهل الطرق تقريبا

1. علينا ان نعرف متغير من نوع Recordset لكي يشير إلى الجدول ويتم الوصول والتعامل مع الجداول عن طريقه

وطريقة تعريف هذا المتغير هي

[note]

Dim MyRec AS Recordset

[/note]

وبالنسبة لطريقة فتح الجدول فهي كالتالي

[note]

set MyRec=MyDb. openRecordset("mytabel")

[/note]

حيث MyDb هو المتغير الذي يشير الي قاعدة البيانات

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

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

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

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

[note]

اولا الإضافة

[/note]

myrec.addnew
myrec.Fields("Field1]=text1.text
myrec.Fields("field2")=text2.text
Myrec.update

حيث field1 & field2 هما اسماء الحقول التي نود وضع البيانات بها

و text1 & text2 هما البيانات التي نود وضعها بقاعدة البيانات

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

والأمر Update هو الامر الذي يعلم قاعدة البيانات اعتمد حالة التخزين وانتها عملية الإضافة

وطبعا بهذه الطريقة يمكننا إضافة اي متغير او قيمة ليس من اداة Text box فقط وانما من اي اداة من ادوات الفيجول بيسك الأخرى

[note]

ثانيا التعديل

[/note]

بالنسبة للتعديل يشبه إلى حد كبير الإضافة مع اختلاف بسيط في صيغة الأمر.

myrec.edit
myrec.Fields("Field1]=text1.text
myrec.Fields("field2")=text2.text
Myrec.update

حيث الامر edit هو الذي يعلم نظام ادجارة قاعدة البيانات بان العملية هي عملية تعديل .

[note]

ثالثا العرض

[/note]

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

text1.text=myrec.fields("field1")
text2.text=myrec.fields("field2")

هذا اغلب الشياء التي تخص العرض تقريبا

[note]

رابعا الحذف

[/note]

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

Myrec.delete

[note]

خامسا التنقل بين السجلات

[/note]

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

الانتقال الى السجل الاول

الانتقال الى السجل السابق

الانتقال الى السجل الأخير

الاتقال الى السجل التالي

للانتقال الي السجل الأول نكتب الأمر التالي
     myrec.MoveFirst

للانتقال للسجل السابق نكتب السطرين التاليين
حيث السطر التاني لتفادي الوقع في خطأ 
ويحدث هذا الخطا عندما نكون في السجل الاول ونطل من البرنامج ان يتنتقل ب
mrec.bof 
ونجري عليها الشرط كما هو موضح في السطر التاني
     myrec.MovePrevious
     If myrec.BOF Then myrec.MoveFirst

للانتقال الي السجل التالي وله نفس شروط السجل السابق ولكن تختلف طريقة التحرك فقط
Myrec,Eof 
هي الامر الذي يحدد انه الموشر عند أخر سجل
     myrec.MoveNext
             If myrec.EOF Then myrec.MoveLast

للانتقال الي السجل الأخير
     myrec.MoveLast

هذا ما لدي حاليا وساكمل الباقي في وقت لحق

ارجو من لديه معرفة باي معلومة اوضافة ان لا يبخل علينا بها

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

لكم تحياتي

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

#12

بس عندي أخطاء هل ممكن تحلها لي

وهي:

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

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

هل أسئلتي واضحه

#13

عزيزى الاستاذ طارق موسى

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

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

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

SEEK

MY SQL SELECT * FROM

DATA1.RECORDSET.FIND FIRST

DATA1.RECORDSET.FIND LAST

وغيرها. لكنى لا أعرف الطريقة السليمة لاستخدامها

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

Set d = DBEngine.Workspaces(0).OpenDatabase(App.Path & "db1.mdb")

Set dat = OpenDatabase(App.Path & "adil99.mdb")

. Adodc1.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0

Adodc1.ConnectionString = "Provider=MSDASQL.1;

وغيرها

لقد صممت برنامج صغير باستخدام msflex وربطته بقاعدة البيانات عن طريق dao وعمل معى البرنامج بصورة ممتازة الا اننى فشلت فى تشغيل ازرار الاضافة والحذف والتعديل للسجلات الموجودة بقاعدة البيانات .

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

كيف اقوم بحذف سجل محدد وليس من بداية السجلات ؟

Private Sub Command3_Click()

flex1.Clear

flex1.Col = 0

SQL = "select * from zero where name like '" & Text1.Text & "*'"

t1.MoveLast: t1.MoveFirst

If t1.NoMatch Then

Else

t1.Delete

flex1.RemoveItem (flex1.Row)

End If

Call showdata

End Sub

عزيزى طارق اعتقد ان معظم هذه الاستفسارات يجهلها الكثيرون من المبتدئين امثالى وانا على ثقة بانك ستقوم بتوضيحها لنا باسلوبك الجميل فى الشرح . وخاصة الاوامر التى تكتب فى حالة البحث عن السجلات والاوامر التى تكتب فى الفورم لود مع توضيح الفرق بين اوامر ADO و DAO لقاعدة البيانات اكسس .

اسف جدا لكثرة الاسئلة . اسأل الله لك المغفرة وجزاك الله خيرا .

من يفعل الخير لا يعدم جوازيه **** لا يذهب العرف بين الله والناس

#14

جزاك الله ياأخ طارق وجمبع المشاركين خير الجزاء ، وأسأله جل جلاله أن يوفقك في الدنيا والآخرة

#15

ولا يهمك حاج احمد

انتظرني بس يومين ان شاء الله تلقى ما يرضيك

لك تحياتي

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

#16

انا فى الانتظار استاذى طارق

واعتقد ان الكثيرين مثلى فى شوق لمثل هذه الدروس

وفقك الله

#17

B)

:)

:s

الاخ العزيز

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

اشكرك على هذا الدرس الرائع

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

مع انه في نفس المجلد

في البداية عرفت في كل الرفيمات التالي:

في general

Dim sc As Database

Dim g As Recordset

ثم في

Private Sub Form_Load()

Set sc = DBEngine.OpenDatabase(App.Path & "sc.mdb")

Set g = sc.OpenRecordset("general", scopentable

ولكن كان هناك خطاء

ارجوالمساعدة

:( :(

#18
,Aug 16 2001, 08:54 PM كتب:
أخواني الأعزاء سؤال يهم المبتدئين أمثالي وهو :

هل أستطيع أن أعمل قاعدة بيانات بسيطة تضم مثلاً ( الاسم والرقم وكم عمود ) من دون أن ألجاء إلى برنامج غير الفيجول بيسك ؟

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

السلام عليكم

السلام عليكم اخى اعتقد انك يجب ان تتعلم كيفية التعامل مع قواعد البينات مثلaccessorsql or oracle حتى تستطيع عمل جدول متصل بقاعدة البيانات

#19
اقتباس
عزيزي السلام عليكم

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

ولو لم تكن تعرف كيف يمكن انشاء الجداول باستعمال اكسيس اخبرني وساشرح ذلك من بكل تاكيد.

ولك تحياتي

أخي العزيز

اعتقد ان الحاجة لانشاء قاعدة بيانات عن طريق الفيجوال باعتقادي لسببين ( وأرجو تصحيح كلامي )

السبب الاول : (الامان) حيث أن القاعدة المنشأة عن طريق الفيجول لايمكن فتحها مباشرة الا بعد التحويل.

السبب الثاني : (حجم القاعدة) فعلى حد علمي فأن قاعدة البيانات المنشأة عن طريق الفيجول سعتها الكلية اكبر من 2 جيجابايت.

فهل هذين السببين صح ام خطأ .

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

مع الشكر الجزيل لكل من يساهم في نشر العلم عبر المنتدى ,,,

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

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