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

أنشأ مشروعك بالفيجوال بيسك 6 من الألف إلى الياء

رائج
بدأه nasser50001 في 8 يناير 2005 · 215 رد · 133,629 مشاهدة · في قسم قواعد البيانات
مشاركة: واتساب X فيسبوك تيليجرام
#76

اهلا بك اخت دينا

لق

عدلت البرنامج بعد حذف ربط مربعات النصوص

جربي الحل وإن كان هناك سؤال فأنا حاضر

test.rar

تم تعديل هذه المشاركة بواسطة nasser50001 في 14 فبراير 2005 في 09:47

#77

اليوم بإذن الله ساضع الجزء الثاني من sql انتظرونا

واعذرونا على التأخير

تم تعديل هذه المشاركة بواسطة nasser50001 في 19 فبراير 2005 في 10:54

#78

الحلقة العاشرة

الجزء الثاني من استخدام جمل SQL مع الفيجوال بيسك

استخدام جملة العرض Select

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

الأولى : حيث يتم تعريف متغير نصي ثم نضع فيه جملة Select ثم نقوم بعد ذلك بفتح الجملة كالتالي :

Dim sql As String
sql = "Select …….."
If rs.State = adStateOpen Then rs.Close
rs.Open sql, db, adOpenDynamic, adLockOptimistic

ثم بعد ذلك يتم استخدام المتغير Rs الذي يحمل ناتج تنفيذ جملة SQL في أي مكان تريده

الثانية : حيث يتم استخدام الجملة مباشرة عند فتح الجدول كالتالي

rs1.Open "select …. " , db, adOpenDynamic, adLockOptimistic

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

1_19220051328480.3144495.jpg

الشكل العام لجملة Select

SELECT col1, col2, col3,……
From tab1,tab2,… 
WHERE conditions 
[GROUP BY... ] [HAVING... ] [ORDER BY... ]

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

1 – select وهي جملة العرض لمجموعة من العمدة من جدول أو أكثر تحت شرط أو مجموعة من الشروط

2 – col1,col2,col3 هي أسماء الحقول المراد استخراجها

3 – From وهي جملة تحديد الجداول

4 – tab1,tab2 هي أسماء الجداول التي يتم عرض الحقول منها

5 – where جملة تجهيز الشرط

6 – Conditions الشروط المطلوب تنفيذها على الحقول

7 – Group by هي جملة التجميع

8 – having هي جملة تقليص التجميع المستخدم بجملة Group By

9 – Order By هي جملة الترتيب حسب حقل أو مجموعة من الحقول

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

1 – استعادة أعمدة محددة من الجدول

وهي أبسط عبارات جملة Select والتي تكتب كالتالي

Select  Fields From Tables

حيث Fieldsتمثل الحقول المراد إظهارها Tables تمثل الجداول التي تحوي هذه الحقول

مثال تطبيقي 1

لعرض مجموعة حقول محددة من جدول

اضغط على الزر SQL1 مرتين ثم اكتب الكود التالي

Dim sql As String
sql = "Select St_no,st_name,Address From St_inf"
If rs1.State = adStateOpen Then rs1.Close
rs1.Open sql, db, adOpenDynamic, adLockOptimistic
Set DataGrid1.DataSource = rs1

2 – لعرض جميع الحقول من جدول محدد

حيث يتم كتابة الكود التالي :

Select  * from  table

حيث تعبر * عن جميع الحقول بالجدول

مثال تطبيقي 2

لعرض مجموعة حقول محددة من جدول

اضغط على الزر SQL2 مرتين ثم اكتب الكود التالي

Dim sql As String
sql = "Select  *  From St_inf "
If rs1.State = adStateOpen Then rs1.Close
rs1.Open sql, db, adOpenDynamic, adLockOptimistic
Set DataGrid1.DataSource = rs1

3 – لعرض حقول من جداول مختلفة

نكتب الجملة التالية

Select  tab1.col1,tab2.col2……
From tab1,tab2,…..

مثال تطبيقي 3

لعرض مجموعة حقول محددة من جدول

اضغط على الزر SQL3 مرتين ثم اكتب الكود التالي :

Dim sql As String
sql = "Select st_inf.st_no,st_inf.st_name,st_inf.address,st_level.level,st_level.class From St_inf,st_level "
If rs1.State = adStateOpen Then rs1.Close
rs1.Open sql, db, adOpenDynamic, adLockOptimistic
Set DataGrid1.DataSource = rs1

وهنا إذا لم تضع شرطا معينا فسييتم تكرار السجلات بمعنى أن كل سجل من الجدول الأول سيظهر له كل سجلات الجدول الثاني ولذلك إذا أردت عرض عدد معين من السجلات يمكنك استخدام الجملة التالية

4 – عرض عدد محدد من السجلات باستخدام جملة Top n

حيث تمثل n عدد السجلات المراد عرضها والجملة تكتب كالتالي :

Select  Top n tab1.col1,tab2.col2……
From tab1,tab2,…..

حيث يتم عرض العدد المحدد من السجلات

مثال تطبيقي 4

لعرض مجموعة حقول محددة من جدول

اضغط على الزر SQL4 مرتين ثم اكتب الكود التالي :

Dim sql As String
sql = "Select top 17 st_inf.st_no,st_inf.st_name,st_inf.address,st_level.level,st_level.class From St_inf,st_level "
If rs1.State = adStateOpen Then rs1.Close
rs1.Open sql, db, adOpenDynamic, adLockOptimistic
Set DataGrid1.DataSource = rs1

- وهنا يمكنك استخدام جملة All بدلا من Top n لعرض جميع السجلات مرة ثانية استبدل فقط كلمة Top n بكلمة all سيتم عرض جميع السجلات

- كذلك يمكنك استخدام كلمة DISTINCT لمنع ظهور تكرار السجلات مثل الجملة التالية :

SELECT DISTINCT LastName FROM Employees;

لمنع تكرار الأسماء المتشابهة في الأسم الأخير

- ولمنع التكرار من خلال عدة جداول مرتبطة معا يمكنك استخدام البارامتر DISTINCTROW مثل عند عرض العملاء وطلبياتهم يمكن أن يكون للعميل أكثر من طلبيه وأنت تريد عرض طلبيه واحدة لكل عميل فنستخدم المثال التالي

SELECT DISTINCTROW CompanyName FROM Customers INNER JOIN Orders ON Customers.CustomerID = Orders.CustomerID ORDER BY CompanyName;

- كذلك يمكنك تغيير اسماء الحقول المعروضة باستخدام جملة AS حيث يتم كتابة الجملة كالتالي :

Select col1 as new1,col2 as new2 
From tab

مثال تطبيقي 5

لعرض حقول محددة وتغيير هذه الحقول بأسماء جديدة

اضغط على الزر SQL5 مرتين ثم اكتب الكود التالي :

 Dim sql As String
sql = "Select st_no as [رقم الطالب],st_name as [اسم الطالب],address as [العنوان]  From St_inf "
If rs1.State = adStateOpen Then rs1.Close
rs1.Open sql, db, adOpenDynamic, adLockOptimistic
Set DataGrid1.DataSource = rs1

استخدام جملة Where

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

أولا : شروط المقارنة وتشمل العلامات المعروفة في المقارنة مثل

= أو > أو < أو => أو =< أو <> ( لا يساوي ) حيث يتم كتابة الجملة كالتالي :

Select * from tab1
Where col { } value

حيث يتم وضع معامل المقارنة مكان القوسين { } ويكون Value هي قيمة المقارنة التي ممكن أن تكون رقم أو قيمة مدخلة من مربع نص أو قيمة مدخلة من أي أداة أخري

مثال تطبيقي 6

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

اضغط على الزر SQL6 مرتين ثم اكتب الكود التالي :

Dim sql As String
sql = "Select *  From St_inf where st_no > 6"
If rs1.State = adStateOpen Then rs1.Close
rs1.Open sql, db, adOpenDynamic, adLockOptimistic
Set DataGrid1.DataSource = rs1

صور أخري يمكنك تجريبها

Select * from st_inf where st_no <=6

لعرض مجموعة سجلات بحيث رقم الطالب أقل من أو يساوي 6

Select * from st_inf where b_date >#1/6/2004#

لعرض مجموعة سجلات بحيث تاريخ الميلاد أكبر من أو يساوي 1/6/2004

ثانيا : استخدام المعاملات المنطقية وهي ثلاث

- And وهي تستخدم لربط شرطين بحيث يكون الناتج صحيح إذا تحقق الشرطين معا

- Or وهي اربط شرطين بحيث يكون ناتج صحيح إذا تحقق أحد الشرطين

- Not وهو شرط لنفي الجملة عكس النتائج وتستخدم مع جمل أخرى كما سيرد لاحقا

وتكتب الجملة كالتالي :

Select * from tab
Where col >= n1 [and /or ] col <n2
مثال تطبيقي 7

لعرض جميع حقول الجدول بحيث أن رقم الطالب أكبر من 6 مثلا واقل من 15

اضغط على الزر SQL7 مرتين ثم اكتب الكود التالي :

Dim sql As String
sql = "Select *  From St_inf where st_no > 6 and st_no <15"
If rs1.State = adStateOpen Then rs1.Close
rs1.Open sql, db, adOpenDynamic, adLockOptimistic
Set DataGrid1.DataSource = rs1

ثالثا : استخدام الجملة Between …. And أو not between …and

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

Select * from tab 
Where col Between n1 and n2

مثال تطبيقي 8

لعرض جميع حقول الجدول بحيث أن رقم الطالب محصور بين 6 و 15 مع الأخذ في الاعتبار أن الرقمين 6 و 15 قيمة البداية والنهاية ستظهر في العرض

اضغط على الزر SQL8 مرتين ثم اكتب الكود التالي :

Dim sql As String
sql = "Select *  From St_inf where st_no between 6 and 15"
If rs1.State = adStateOpen Then rs1.Close
rs1.Open sql, db, adOpenDynamic, adLockOptimistic
Set DataGrid1.DataSource = rs1

رابعا : استخدام العامل ضمن IN

حيث تستخدم لعرض القيم الموجودة داخل قوس وتكتب كالتالي :

Select * from tab
Where col in ( n1,n2,n3,….)

مثال تطبيقي 9

لعرض جميع حقول الجدول بحيث أن رقم الطالب له القيم داخل القوس

اضغط على الزر SQL9 مرتين ثم اكتب الكود التالي :

Dim sql As String
sql = "Select *  From St_inf where st_no In(4,6,8,10,12,14)"
If rs1.State = adStateOpen Then rs1.Close
rs1.Open sql, db, adOpenDynamic, adLockOptimistic
Set DataGrid1.DataSource = rs1

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

هانت يا شباب أوشكنا على النهاية إن شاء الله ونتم الموضوع بإذن الله تعالى

مرفق مثال لما شرحناه

sql statments.rar

#79

بارك الله فيك على هذا المجهود

أريد منك المساعدة في عمل موسوعة بالفجوال بيسك إن امكن ارجو الرد على الايميل

ahmedhgu@yahoo.com

ولك جزيل الشكر

#80

ماشاء الله عليك اخي ناصر مبدع !!!

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

تحياتي

#81

السلام عليكم اخي ناصر

ايه اخبارك ان شاء الله ب خيير ربنا يوفقك دروسك راااااااااااائعة (h)

ربنا يوفقك مع تمنياتي بالتوفيق والنجاح :rolleyes:

مع السلامة

التوقيع: عاشقة الاختراع

#82

يعطيك ألف عافية

#83

أخي AhmedHGU

جزاك الله خيرا ويمكنك ارسال التفاصيل على الإيميل

أخي فنكشن

مشكووووور وجزاك الله خيرا

أختي five star

شكرا جزيلا ....... وبالتوفيق في الدراسة :)

أخي labeeb_z

مشكوووووور ومرحبا بك دائما

#84

:blink: إبداع فالشرح

جبار.................

<< CLICK TO START>>

post-41869-046528000%201305052277.jpg

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

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

#85

السلام عليكم

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

#86

مجهود ضخم وشرح اكثر من رائع ..

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

تسلم على هذا الشرح الرائع والمجهود الضخم وجزااك الله خير وجعله الله في ميزان حسناتك ...

ومنتظرين البقية ...

اني ابتليت باربع ما سـلطوا ***** الا لشدة شقوتي و عنائي

ابليس والدنيا ونفسي والهوى **** كيف السبيل وكلهم اعدائي

شكوت الى وكيع سوء حفظي ***** فارشدني الى ترك المعاصي

و اخـبرنـي بـان الـعلم نـور ****** و نور الله لا يهدى لعاصي

#87

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

لكم تحياتي

اخوكم ناصر

#88

الحلقة الحادية عشر

الجزء الثالث من استخدام جمل Sql مع الفيجوال بيسك

خامسا : استخدام العامل Like

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

الشكل العام للجملة يكتب كالتالي :

Select * from tab
Where col  like  string

حيث تمثل string قيمة النص الذي نريد عرضه وهو كالتالي :

أولا : إذا كنت تستخدم قاعدة البيانات أكسس فيكون النص كالتالي :

1_2422005624290.3645441.JPG

ثانيا : إذا كنت تستخدم قاعدة البيانات Sql server فيكون النص كالتالي :

2_2422005627420.396969.JPG

وهنا ملاحظة ان الرموز مع الكائن ado هي المستخدمة مع sql server حتى ولو كنت تستخدم access

مثال تطبيقي 10

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

اضغط على الزر SQL10 مرتين ثم اكتب الكود التالي :

Dim sql As String
sql = "Select *  From St_inf where st_name like *m*"
If rs1.State = adStateOpen Then rs1.Close
rs1.Open sql, db, adOpenDynamic, adLockOptimistic
Set DataGrid1.DataSource = rs1

مثال آخر تطبيقي 11

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

اضغط على مربع النص الذي فوق list box مرتين ثم اختار الحث Change لمربع النص ثم اكتب الكود التالي :

Dim sql
sql = "select * from st_inf where st_name like '%" + txt6.Text + "%'"
If rs1.State = adStateOpen Then rs1.Close
rs1.Open sql, db, adOpenDynamic, adLockOptimistic
Set dblist1.RowSource = rs1
dblist1.ListField = "st_name"
dblist1.Refresh

سادسا : جملة الترتيب Order By

حيث تستخدم لترتيب البيانات المعروضة حسب حقل أو أكثر :

الشكل العام للجملة يكتب كالتالي :

Select * from tab
Where condition
Order by col1,col2,…[Asc,Desc]

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

مثال تطبيقي 12

لعرض جميع الأسماء مرتبة ترتيبا تصاعديا حسب اسم الطالب

اضغط على الزر Sql11 مرتين ثم اكتب الكود التالي :

Dim sql
sql = "select * from st_inf where st_no>6 order by st_name"
If rs1.State = adStateOpen Then rs1.Close
rs1.Open sql, db, adOpenDynamic, adLockOptimistic
Set DataGrid1.DataSource = rs1

الحقول المحسوبة داخل جملة Select

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

الدوال التي يمكن استخدامها في جملة select هي :

1 – دالة المجموع Sum()

حيث يمكنك استخدامها لإيجاد مجموع القيم الموجودة في حقل معين

مثال تطبيقي 13

مثلا لحساب مجموع القيم الموجودة في الحقل st_no وهو الحقل الرقمي الموجود بالجدول

اضغط على الزر Sql12 مرتين ثم اكتب الكود التالي :

Dim sql
sql = "select sum(st_no) from st_inf "
If rs1.State = adStateOpen Then rs1.Close
rs1.Open sql, db, adOpenDynamic, adLockOptimistic
text1.text = rs1.Fields(0)

2 – دالة أكبر قيمة Max()

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

مثال تطبيقي 14

مثلا لحساب أكبر القيم الموجودة في الحقل st_no وهو الحقل الرقمي الموجود بالجدول

اضغط على الزر Sql13 مرتين ثم اكتب الكود التالي :

Dim sql
sql = "select max(st_no) from st_inf "
If rs1.State = adStateOpen Then rs1.Close
rs1.Open sql, db, adOpenDynamic, adLockOptimistic
text1.text = rs1.Fields(0)

3 – دالة أقل قيمة Min()

حيث يمكنك استخدامها لإيجاد اقل القيم الموجودة في حقل معين

مثال تطبيقي 14

مثلا لحساب اقل القيم الموجودة في الحقل st_no وهو الحقل الرقمي الموجود بالجدول

اضغط على الزر Sql14 مرتين ثم اكتب الكود التالي :

Dim sql
sql = "select min(st_no) from st_inf "
If rs1.State = adStateOpen Then rs1.Close
rs1.Open sql, db, adOpenDynamic, adLockOptimistic
text1.text = rs1.Fields(0)

4 - دالة المتوسط Avg()

حيث يمكنك استخدامها لإيجاد متوسط القيم الموجودة في حقل معين

مثال تطبيقي 15

مثلا لحساب مجموع القيم الموجودة في الحقل st_no وهو الحقل الرقمي الموجود بالجدول

اضغط على الزر Sql15 مرتين ثم اكتب الكود التالي :

Dim sql
sql = "select avg(st_no) from st_inf "
If rs1.State = adStateOpen Then rs1.Close
rs1.Open sql, db, adOpenDynamic, adLockOptimistic
text1.text = rs1.Fields(0)

5 – دالة عدد السجلات Count()

حيث يمكنك استخدامها لإيجاد عدد السجلات الموجودة في حقل معين حيث يتم تجاهل القيم الخالية إلا إذا استخدمت علامة *

مثال تطبيقي 16

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

اضغط على الزر Sql16 مرتين ثم اكتب الكود التالي :

Dim sql
sql = "select count(st_no) from st_inf "
If rs1.State = adStateOpen Then rs1.Close
rs1.Open sql, db, adOpenDynamic, adLockOptimistic
text1.text = rs1.Fields(0)

6 – يمكنك إجراء عملية حسابية على حقل معين

مثل ضرب الحقل رقم الطالب في 10

مثال تطبيقي 17

مثلا لضرب الحقل st_no في العدد 10

اضغط على الزر Sql17 مرتين ثم اكتب الكود التالي :

Dim sql
sql = "select st_no,st_no*10 as account from st_inf "
If rs1.State = adStateOpen Then rs1.Close
rs1.Open sql, db, adOpenDynamic, adLockOptimistic
set datagrid1.datasource = rs1

نكمل إن شاء الحلقة القادمة

الحلقة الحادية عشر.rar

تم تعديل هذه المشاركة بواسطة nasser50001 في 24 فبراير 2005 في 17:41

#89

روووووعة اخي nasser50001 .. بارك الله لك و جزاك خير الجزاء فهو القادر على يوفيك حقك ،، لكم اتمنى ان اصل الى نصف هذا الجهد ،، ما شاء الله ،، :)

بنت اليمن ،،

لا اله الا الله .. محمد رسول الله

(* ربِ اجعلني مقيم الصلاة و من ذريتي ، ربنا و تقبل دعـاء *)

يا حيّ يا قيـوم ... برحمتك استغيث ... اصلح لي شأني كله و لا تكلني الى نفسي طرفة عين

#90

الله يكرمك أختي بنت اليمن ....... على هذا الكلام الجميل

وهي شهادة نعتز بها كثيرا

اما انك لم تبلغي نصف هذا .... فاعتقد انه تواضع منك فالواقع والمشاركات والنشاط يؤكد غير ذلك :)

#91

معلش لم يبقي الكثير

الجزء الأخير من SQL Statments

وآخر درس Data report

إن شاء الله في الغد ننهي هذه السلسلة بإذن الله

انتظروووناااااا

أخوكم ناصر

#92

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

جزاك الله عني وعنا وعن كل مستفد أخي فى الله nasser :rolleyes:

جزاك الله بكل حرف كتبته حسنة والحسنة بعشر أمثالها آمين :rolleyes:

فعلا من قلبي :rolleyes:

ولكني آسفا تأخرت فى دخولى المنتدى فأنا من فترة كبيرة جدًا لم أدخل المنتدى :rolleyes:

فأعتذر إليك لأن الشكر والإمتنان جاء متأخرًا :rolleyes:

وأخيرًا :o

زادك الله من علمه ;)

والسلام (h)

(h)

#93

السلام وعليكم انا عندي سؤال حبيت أوجهه لك ال TREE VIEW أستخدمها متى فقط لما يكون عندي جدوال ابناء واباء ام لها ستخدامات أخرى مع جزيل شكري وبارك الله فيك

#94

الحلقة الثانية عشر

الجزء الرابع من استخدام جمل Sql مع الفيجوال بيسك

جملة التجميع Group By

تستخدم لتجميع النتائج الى مجموعات حسب حقل من الحقول حيث يمكنك مثلا ايجاد المجموعات الفرعية لعدة اقسام باستخدام جملة Group By

الصورة العامة للجملة تكتب كالتالي :

Select * from tab
Where condition
Group By col
Order by col1,col2,…[Asc,Desc]

مثال تطبيقي 18

مثلا إذا كان عندنا رواتب الموظفين للشركة والتي بها مجموعة أقسام ونريد ايجاد مجموع الرواتب لكل قسم من الأقسام افترض عندنا ثلاث أقسام قسم الحسابات Account – قسم التدريب Training وقسم المبيعات Sales

اضغط على الزر SQL18 مرتين ثم اكتب الجملة التالية

Dim sql
sql = "select dep,sum(salary) as the_sum,avg(salary) as the_averag,count(salary) as the_aacount from emp group by dep "
If rs1.State = adStateOpen Then rs1.Close
rs1.Open sql, db, adOpenDynamic, adLockOptimistic
Set DataGrid1.DataSource = rs1

جملة تقليص التجميع Having

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

الصورة العامة للجملة تكتب كالتالي :

Select * from tab
Where condition
Group By col
Having col
Order by col1,col2,…[Asc,Desc]

نعطي مثال تطبيقي سريع

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

مثال تطبيقي 19

اضغط على الزر SQL19 مرتين ثم اكتب الجملة التالية

Dim sql
sql = "select dep,sum(salary) as the_sum,avg(salary) as 
the_averag,count(salary) as the_aacount from emp group by dep having sum(salary)>12000 and avg(salary)>3000 "
If rs1.State = adStateOpen Then rs1.Close
rs1.Open sql, db, adOpenDynamic, adLockOptimistic
Set DataGrid1.DataSource = rs1

ربط الجداول

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

جمل الوصل

1 – الوصل باستخدام جملة Where

2 – الوصل باستخدام جملة Join

أولا : الوصل باستخدام جملة Where

حيث تكتب جملة الربط كالتالي

Select tab1.col1, tab2.col2
From tab1,tab2
Where tab1.col = tab2.col

ونعطي مثلا عمليا حيث نعتبر الجدولين st_info والجدول st_level

الجدول الأول به الحقول st_no,st_name,address,phone,b_date,

والجدول الثاني به الحقول التالية st_no,level,class مثلا

مثال تطبيقي 20

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

اضغط على الزر SQL20 واكتب الكود التالي

Dim sql
sql = "select st_inf.st_no,st_level.level,st_level.class from st_inf,st_level
 where st_inf.st_no = st_level.st_no and st_inf.st_no>8 "
If rs1.State = adStateOpen Then rs1.Close
rs1.Open sql, db, adOpenDynamic, adLockOptimistic
Set DataGrid1.DataSource = rs1

ثانيا : الوصل باستخدام الجملة Join

وهي تأتي على عدة أشكال

الشكل الأول : جملة Inner join

وهي الوضع الافتراضي إن لم تحدد نوع الصلة وتسمى صلة داخلية حيث تعيد جميع السجلات المتطابقة من الجدولين وتهمل السجلات الغير متطابقة

وهي تكتب كالتالي :

Select tab1.col1, tab2.col2
From tab1 Inner join tab2 on tab1.col = tab2.col
Where condition
Order by col,…
Group by col ,….

مثال تطبيقي 21

اضغط على الزر SQL21 مرتين فمثلا إذا أردنا مثلا عرض رقم الطالب والمستوى والفصل من الجدولين بحيث أن رقم الطالب متساوي

Dim sql
sql = "select st_inf.st_no,st_level.level,st_level.class from st_inf inner
 join st_level on st_inf.st_no = st_level.st_no"
If rs1.State = adStateOpen Then rs1.Close
rs1.Open sql, db, adOpenDynamic, adLockOptimistic
Set DataGrid1.DataSource = rs1

الشكل الثاني : جملة left join

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

وهي تكتب كالتالي :

Select tab1.col1, tab2.col2
From tab1 Left join tab2 on tab1.col = tab2.col
Where condition
Order by col,…
Group by col ,….

مثال تطبيقي 22

اضغط على الزر SQL22 مرتين فمثلا إذا أردنا مثلا عرض رقم الطالب والمستوى والفصل من الجدولين بحيث أن رقم الطالب متساوي بحيث يعرض كل سجلات الثاني والمتساوي من الأول

Dim sql
sql = "select st_inf.st_no,st_level.level,st_level.class from st_inf Left 
join st_level on st_inf.st_no = st_level.st_no where st_inf.st_no>10"
If rs1.State = adStateOpen Then rs1.Close
rs1.Open sql, db, adOpenDynamic, adLockOptimistic
Set DataGrid1.DataSource = rs1

الشكل الثالث : جملة right join

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

وهي تكتب كالتالي :

Select tab1.col1, tab2.col2
From tab1 Right join tab2 on tab1.col = tab2.col
Where condition
Order by col,…
Group by col ,….

مثال تطبيقي 23

اضغط على الزر SQL23 مرتين فمثلا إذا أردنا مثلا عرض رقم الطالب والمستوى والفصل من الجدولين بحيث أن رقم الطالب متساوي بحيث يعرض كل سجلات الأول مع المتساوي فقط من الثاني

Dim sql
sql = "select st_inf.st_no,st_level.level,st_level.class from st_inf Right 
join st_level on st_inf.st_no = st_level.st_no where st_inf.st_no>10"
If rs1.State = adStateOpen Then rs1.Close
rs1.Open sql, db, adOpenDynamic, adLockOptimistic
Set DataGrid1.DataSource = rs1

الشكل الرابع : جملة Full join

تسمى صلة كاملة حيث تعيد جميع السجلات من الجدولين

وهي تكتب كالتالي :

Select tab1.col1, tab2.col2
From tab1 full join tab2 on tab1.col = tab2.col
Where condition
Order by col,…
Group by col ,….

مثال تطبيقي 24

اضغط على الزر SQL24 مرتين فمثلا إذا أردنا مثلا عرض رقم الطالب والمستوى والفصل من الجدولين بحيث أن رقم الطالب متساوي

Dim sql
sql = "select st_inf.st_no,st_level.level,st_level.class from st_inf full 
join st_level on st_inf.st_no = st_level.st_no where st_inf.st_no>10"
If rs1.State = adStateOpen Then rs1.Close
rs1.Open sql, db, adOpenDynamic, adLockOptimistic
Set DataGrid1.DataSource = rs1

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

والى لقاء مع الجزء الأخير من هذه السلسلة وهو Data report

#95

الحلقة الثالثة عشر والأخيرة

كيفية استخدام DATA REPORT مع الفيجوال بيسك 6.00

خطوات التعامل مع التقارير Data Report

الخطوة الأولى : تصميم النموذج ووضع زر طباعة على النموذج مثل التصميم المرفق بالصورة التالية

1_532005053330.1397516.JPG

2 – نبدأ بتصميم التقرير بحيث نختار قائمة project ثم add data report من القائمة المنسدلة كما هو واضح بالصورة

2_532005055252.224368E-02.JPG

3 – يظهر التقرير كما ترى بالصورة التالية

3_532005057180.2856104.JPG

أدوات تصميم التقرير

4_53200510530.3469355.JPG

بعض الخصائص الهامة لتصميم التقرير

5_53200516130.4327661.JPG

الخطوة الثانية : وضع الحقول والعناوين والصور على التقرير

6_532005111240.2282831.JPG

حيث يتم كتابة اسم الحقل في خاصية Data Filed لمربعات النصوص المعبرة عن الحقول

كتابة التعليمات لإظهار البيانات المطلوبة :

طباعة كل البيانات في الجدول

إذا أردنا طباعة كل العملاء في جدول العملاء عميل محدد يتم الضغط على اسم العميل ( حسب تصميمك لشاشة العملاء ) ثم نضغط زر طباعة ويكون الكود كالتالي

If rsrep.State = adStateOpen Then rsrep.Close
rsrep.Open "emp", db, adOpenDynamic, adLockOptimistic
Set repemp.DataSource = rsrep
  repemp.Sections("section2").Controls("lb1").Caption = Format(Date, "yyyy/mm/dd")
  repemp.Show
dlist

طباعة سجلات محددة

إذا أردنا طباعة عميل محدد يتم الضغط على اسم العميل ( حسب تصميمك لشاشة العملاء ) ثم نضغط زر طباعة ويكون الكود كالتالي

Dim sql As String
sql = "select * from emp where emp_no = " & Val(Text1.Text)
If rsrep.State = adStateOpen Then rsrep.Close
rsrep.Open sql, db, adOpenDynamic, adLockOptimistic
Set repemp.DataSource = rsrep
  repemp.Sections("section2").Controls("lb1").Caption = Format(Date, "yyyy/mm/dd")
  repemp.Show
dlist

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

______.rar

#96

جزيت خيرا اخي العزيز :rolleyes:

ولكن هل تنوي طرح مجموعة اخرى من الدروس لاحقا ؟؟؟ اتمنى لو تكون هناك دروس في TreeView و ListView وربطهما مع قواعد البيانات ... B)

لك تحياتي

#97

الاخ ناصر

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

و فى انتظار المزيد من هذه الدروس الجميلة

تحياتى

ان اجــمل الزهـــــــــــر مانـــــبت بحــــــــدائق الاحـــــــــــــــزان

Eng. Mohammed Salah

#98

أخي فنكشن

جزاك الله خيرا وإن شاء الله نعد للدرس الذي تطلبة في اقرب وقت إن شاء الله

أخي MSrahieb_100

الله يكرمك على ذوقك وجزاك الله خيرا

#99

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

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

لي سؤال واحد ؟؟

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

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

ومنتظرين المزيد من الدروس وكرمك ..

اني ابتليت باربع ما سـلطوا ***** الا لشدة شقوتي و عنائي

ابليس والدنيا ونفسي والهوى **** كيف السبيل وكلهم اعدائي

شكوت الى وكيع سوء حفظي ***** فارشدني الى ترك المعاصي

و اخـبرنـي بـان الـعلم نـور ****** و نور الله لا يهدى لعاصي

#100

أخي هوب

جزاك الله خيرا علي كلماتك الرقيقة

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

يمكن المشكلة عند أن التقرير في وضع استعادة اختار من خصائص التقرير خاصية windows state واجعلها max وإن شاء الله يظهر الشريط

لك تحياتي

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

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

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

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

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