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

درس/ربط الفيجوال بالاوراكل ب OO40

مغلق
بدأه محمد ابراهيم في 10 نوفمبر 2003 · 10 رد · 5,542 مشاهدة · في قواعد بيانات Oracle
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

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

نستخدم الاداة OO40 لربط الاوراكل وتوجد هذه الاداة ضمن مجلدات الاوراكل

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

بعد الانتهاء من هذا الكتاب يكون باستطاعتك

انشاء تطبيقات وواجهات لقواعد البيانات

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

1- orasession :

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

2- oradatabase :

يمثل اتصالا بقاعدة بيانات اوراكل وهو يقدم وسائل لتنفيذ عبارات sql

3- orasqlstmt :

وهو يستخدم لتنفيذ عبارات DDL مثل CREATE TABLE

4-oradynaset :

يمثل النتائج المعادة من عبارة sql وهو مؤشر في جانب العميل يمكن معالجته والتعامل معه

ويتم انشائه باستخدام العبارة createdynaset للشء oradatabase

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

5- oraparameters :

يمثل متغير ربط في عبارة sql وهو يقدم وسائل لإنشاء ومعالجة قيم المعاملات

(يستخدم لتمرير متغيرات الاجراءات والدوال وعبارات sql )

6- oraobject :

يمثل نسخة من اشياء اوراكل المخزنه على شكل جدول

7- oraparametersarray

مثل الشيء oraparameters لكن يكون مصفوفة من المعاملات والمتغيرات

<span style='font-size:14pt;line-height:100%'>بدء العمل مع الاداة وطريقة الاتصال</span>

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

اولا:

نضيف قبل كل شي الاداة من قائمة project ثم reference ثم ابحث عن oracle objects for OLE 3.0 type library

ثم نقوم بتعريف ثلاث متغيرات :

الاول متغير من نوع oraseesion وهو لتكوين سيرفر مع القاعدة وفتح القاعدة.

الثاني متغير من نوع oradatabase وهو للاتصال مع قاعدة البيانات.

الثالث متغير من نوع oradynasetلتخزين السجلات المستتنتجة.

ويمن التعريف كمايلي:

Dim ses As orasession
Dim database As oradatabase
Dim dyn As OraDynaset

ثانيا/

نكون inprocserver والاتتصال بقاعدة البيانات وهذه ثابته دائم لاتتغيرفي أي عملية اتصال لابد من وجودهما

Set ses = CreateObject("oracleinprocserver.xorasession")

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

Set database = ses.OpenDatabase("ddd"," scott/tiger",0&)

حيث:

Ses : هذا متغير orasession الذي تم فتحه سابقا.

OpenDatabase : وسيلة لفتح قاعدة البيانات.

ddd : هذا اسم قاعدة البيانات لديك وهو الاسم الذي اعطيته لقاعدة البيانات اثناء تنزيل الاوراكل.

" scott/tiger" : هذا اسم الحساب وكلمة المرور وهو افتراضي في اي قاعدة بيانات يوجد بها هذا المستخدم وكلمة مرورة .او يكون لك اسم مستخدم خاص بك وكلمة مرور له.

0& تمثل حالة القاعدة الابتدائية.

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

ثالثا/

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

mysql="select * from emp"

رابعا/

كيفيه تشغيل الاستعلام(فتح الاستعلام) وتخزين النتائج كما يلي

Set dyn = database. CreateDynaset (mysql, 0&)

وذلك باستخدام الامر CreateDynaset للشي oradatabase

حيث :

Mysql : تمثل المتغير الذي تم تخزين الاستعلام به وليس شرطا ان يكون نفس الاسم .

خامس/

بعد تنفيذ الاستعلام ولو فرضنا ان الجدول في الاستعلام السابق يحتوي على حقلين الاول empno والثاتي ename ونريد بعد تنفيذ الاستعلام ان يقوم بعرضهما في مربعين نص على النموذج

ويكون كمايلي :

         Text1.Text = dyn.Fields("empno").Value
          Text2.Text = dyn.Fields("ename").Value

وبالتالي يكون الكود كامل كمايلي:

Dim ses As orasession
Dim database As oradatabase
Dim dyn As OraDynaset
Set ses = CreateObject("oracleinprocserver.xorasession")
Set database = ses.OpenDatabase("ddd", "scott/tiger", 0&)
sql = "select * from emp"
Set dyn = database.CreateDynaset(sql, 0&)
Text1.Text = dyn.Fields("empno")
Text2.Text = dyn.Fields("ename")

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

,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,

اضافة , تحديث , حذف البيانات.

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

salary job S_name S_no

الراتب الوظيفة الاسم الرقم

ولانشاء هذا الجدول نذهب الى sql * plus ونكتب الامر

Create table employee(
S_no char(9),
S_name varchar2(50),
Job varchar2(50),
Salary number(10));

وبهذا نكون قد انشاءنا الجدول

أ- الاضافة ADDNEW :

هذه الوسيلة تسمح باضافة الصفوف الجديدة إلى dynaset الذي قمنا بانشاءه ولكي نضيف صف جديد الى الجدول employee السابق نقوم بمايلي.

اولا نقوم بفتح الاتصال وتكوين dynaset كمايلي:

Dim ses As OraSession
Dim database As OraDatabase
Dim dyn As OraDynaset
Set ses = CreateObject("oracleinprocserver.xorasession")
Set database = ses.OpenDatabase("ddd", "scott/tiger", 0&)
SQL = "select * from employee"
Set dyn = database.CreateDynaset(SQL, 0&)

ولكي تضيف صف نقوم بفتح dynaset للاضافة بالوسيلة addnew كمايلي:

dyn.AddNew

ثم نقوم باسناد القيم الجديدة لحقول dynaset كمايلي:

dyn.Fields("s_no").Value = "1000"
dyn.Fields("s_name").Value = "ddd"
dyn.Fields("job").Value = "programming"
dyn.Fields("salary").Value = "5500"

ثم نقوم بتثبيت هذه المدخلات بالقاعدة باستخدام الامر update لــ dynaset كمايلي: dyn.Update

وبالتالي يصبح الكود كامل كمايلي.

الكود كامل :

Dim ses As OraSession
Dim database As OraDatabase
Dim dyn As OraDynaset
Set ses = CreateObject("oracleinprocserver.xorasession")
Set database = ses.OpenDatabase("ddd", "scott/tiger", 0&)
SQL = "select * from employee"
Set dyn = database.CreateDynaset(SQL, 0&)
dyn.AddNew
dyn.Fields("s_no").Value = "1000"
dyn.Fields("s_name").Value = "MOHAMMED"
dyn.Fields("job").Value = "programing"
dyn.Fields("salary").Value = "5500"
dyn.Update
MsgBox "تمت الاضافة بنجاح"

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

بانشاء فورم جديد ووضع به اربع مربعات نص وزر امر وداخل زر الامر اكتب الكود التالي:

Dim ses As OraSession
Dim database As OraDatabase
Dim dyn As OraDynaset
Set ses = CreateObject("oracleinprocserver.xorasession")
Set database = ses.OpenDatabase("ddd", "scott/tiger", 0&)
SQL = "select * from employee"
Set dyn = database.CreateDynaset(SQL, 0&)
dyn.AddNew
dyn.Fields("s_no").Value = TEXT1.TEXT
dyn.Fields("s_name").Value = TEXT2.TEXT
dyn.Fields("job").Value = TEXT3.TEXT
dyn.Fields("salary").Value = TEXT4.TEXT
dyn.Update
MsgBox "تمت الاضافة بنجاح"

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

قم بتطبيق المثال طبقا للخطوات السابقة وسوف تسعد بالنتائج....

ب – التعديل UPDAET :

لتعديل اي سجل موجود بالقاعدة نستخدم الامر edit لـ dynaset

كمايلي:

اولا نقوم بفتح الاتصال وتكوين dynaset كمايلي :

Dim ses As OraSession
Dim database As OraDatabase
Dim dyn As OraDynaset
Set ses = CreateObject("oracleinprocserver.xorasession")
Set database = ses.OpenDatabase("ddd", "scott/tiger", 0&)
SQL = "select * from employee where s_no=1000"
Set dyn = database.CreateDynaset(SQL, 0&)

ثم نقوم بعملية التعديل كمايلي :

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

Dyn.edit

ثم نقوم باجراء التغير كمايلي

Dyn.fields("s_name").value="ali"

ثم نقوم بثبيت التعديل باستخدام الامر update لـ dynaset كمايلي:

Dyn.update

لناخذ مثال على ذلك :

في جدول employee قم بتعديل راتب الشخص الذي رقمه 1000 ؟

ويكون كود التعديل كمايلي:

Dim ses As OraSession
Dim database As OraDatabase
Dim dyn As OraDynaset
Set ses = CreateObject("oracleinprocserver.xorasession")
Set database = ses.OpenDatabase("ddd", "scott/tiger", 0&)
SQL = "select * from employee where s_no=1000"
Set dyn = database.CreateDynaset(SQL, 0&)
Dyn.edit
Dyn.fields("salary").value="6000"
Dyn.update
MsgBox "تم التعديل"

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

ج- الحذف DELETE :

لحذف اي سجل موجود في القاعدة نستخدم delete لـ dynaset

وللبداية بحذف سجل

اولا نقوم بفتح الاتصال وتكوين dynaset كمايلي:

Dim ses As OraSession
Dim database As OraDatabase
Dim dyn As OraDynaset
Set ses = CreateObject("oracleinprocserver.xorasession")
Set database = ses.OpenDatabase("ddd", "scott/tiger", 0&)
SQL = "select * from employee where s_no=1000"
Set dyn = database.CreateDynaset(SQL, 0&)
ثم نقوم بعملية الحذف كمايلي:
Dyn.delete
وبالتالي يصبح الكود كامل كمايلي:

Dim ses As OraSession
Dim database As OraDatabase
Dim dyn As OraDynaset
Set ses = CreateObject("oracleinprocserver.xorasession")
Set database = ses.OpenDatabase("ddd", "scott/tiger", 0&)
SQL = "select * from employee where s_no=1000"
Set dyn = database.CreateDynaset(SQL, 0&)
dyn.Delete
MsgBox "تم الحذف"

وبهذا يتم الحذف

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

تم تعديل هذه المشاركة بواسطة محمد ابراهيم في 10 نوفمبر 2003 في 14:39

#2

يااااااااااااااا سلاااااااااااام الف شكررر اخي شرح ممتاز

ولكن عندي استفسارات

هل استخدام هذه الاداة افضل من استخدام ado

هل هذه الاداة تاتي مع sql بلاس عند تركيبها

السوال المهم هل عند عمل البرنامج ونريد نقله الى جهاز اخر يلزم اعادة بينا الجداول

من جديد ام يمكن اخذ نسخه احتياطيه كما في sql server

واسترجاعها ثم تتم عملية الاتصال وشكرااا

#3

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

الاخ العزيز /محمد ابراهيم

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

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

المشكلة اني حسيت ببطء مع ان عدد السجلات ليس كبير ..

#4

السلام عليكم

مشكور أخي حمد المهندس من زمان عن المنتدى !!! الحمد الله على السلامة

و الله يعطيك العافية وفي انتظار المزيد .

#5

اشكركم جميعا

وهذا واجب

اخوي brave man

استخدام الادة بالنسبة لي افضل من ADO

وخصوصا ان هذه الاداة مقدمة من شركة اوراكل نفسها لذلك هي اعلم بخفايا قواعد بياناتها لكن ال ADO رائعه مغ غير الاوراكل مثل ACCESS و SQL SERVER

وهذه الاداة تنزل بمجرد تنزيلك للاوراكل

ولايلزم بناء الجداول من جديد يحتاج الى نسخة احتياطية

اخي بوحمدان انا جربت الاثنين لكن الفرق ان الاداة OO40 افضل

اخي محمد الشنقيطي اشكرك من اعماق قلبي وتقبل خالص تحياتي

#6

يعطيك العافيه اخي محمد ابراهيم

كفيت ووفيت

لكن نريد المزيد منك لاني لم اجرب هذه الاداة ولم اجرب الربط مع غير الاكسس و sql server

هل لك انت تعطينا مثال لانشاء مستخدم بدل scott/tiger

ومن ثم انشاء جدول فقط ثم اخذ نسخه احتياطيه وثم استرجاعها

لانها هذي الفروق الغير مفهومه عندي

وشكرااا

#7

السلام عليكم

شكرا اخي علي هذه المساهمة القيمة

بس عندي سؤال عن التاريخ date format

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

ولك مني كل الشكر

#8

مشكورين عى هذة المساهمة

#9

السلام عليكم

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

بالنسبة للتاريخ يمكنك الاستعانة بهذا المثال المبسط

MyDateForamt = " alter session set nls_date_format = 'dd/mm/yyyy

OracleBase.ExecuteSQL MyDateFormat

بافتراض ان OracleBase معرفة مسبقا علي انها Oradatabase

#10

شكراً اخي الغالي واتمنى ان يكون هذا الشرح مع معلومات اكثر مفيدة في كتاب عشان الاستفادة العامة

وجزاااااك الله 99مليون خير

تم تعديل هذه المشاركة بواسطة mwmgold في 2 أغسطس 2007 في 10:06

#11

السلام عليكم

جزيل الشكر لك اخى محمد ابراهيم

وشكرا للاضافه للاخ Wd Bellia

وجعله الله فى ميزان حسناتكم

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

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