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

غلط في الكود عند التحويل الى 2005 في موضوع الاتصال

مغلق
بدأه nora_moon في 28 نوفمبر 2006 · 2 رد · 475 مشاهدة · في ADO.NET
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

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

الكود هدا كان شغال معايا في 2003

وكنت مسويه الاتصال عبر الانتر فيس

وكان كل شي عال العال

بس لما حولت الى 2005 ما حصلت الداتا ادابتر

فكان علي اكتب الكود الخاص بالاتصال برمجيا

انا كتبته بس ما نفع معايه

ممكن احد من الاخوه الخبراء يشرحلي ليش ماضبط

وهذا الكود الاصلي

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

Private Sub Form1_Load

Try

OleDbConnection1.Open()

OleDbDataAdapter1.SelectCommand.CommandText = "select * from Acounts order by AcountId desc"

OleDbDataAdapter1.SelectCommand.ExecuteNonQuery()

OleDbConnection1.Close()

OleDbDataAdapter1.Fill(DataSet11, "Acounts")

Catch ex As OleDbException

MessageBox.Show(ex.Message)

End Try

If DataSet11.Tables("Acounts").Rows.Count < 1 Then ' منشوف هون اذا في الجدول موجود معلومات ام لا اذا فاضي نضع الرقم واحد عدا ذلك نزيد عليه بمقدار واحد

x = 1

TextBox1.Text = x

Else

x = DataSet11.Tables("Acounts").Rows(0).Item(0)

x = x + 1

TextBox1.Text = x

End If

End Sub

Dim check As Boolean

Private Sub Button1_Click

check = checkexsists() 'هذا الفنكشن الذي يقوم بفحص هل الرقم موجود في الداتا بيس ام لا

If check = False Then

OleDbConnection1.Open()

OleDbDataAdapter1.SelectCommand.CommandText = "insert into Acounts (AcountId,AcountName) values('" & x & "','" & TextBox2.Text & "')"

OleDbDataAdapter1.SelectCommand.ExecuteNonQuery()

OleDbConnection1.Close()

MessageBox.Show("تم اضافة الالحساب الجديد", "تنبيه", MessageBoxButtons.OK, MessageBoxIcon.Information)

End If

End Sub

Function checkexsists()'هذه الفنكشن تقوم بالفحص اذا كان هناك رقم مشابه لهذا اولا

DataSet11.Clear()

OleDbConnection1.Open()

OleDbDataAdapter1.SelectCommand.CommandText = "select * from Acounts where AcountId='" & x & "'"

OleDbDataAdapter1.SelectCommand.ExecuteNonQuery()

OleDbDataAdapter1.Fill(DataSet11, "Acounts")

OleDbConnection1.Close()

If DataSet11.Tables("Acounts").Rows.Count < 1 Then

Return False

Else

ShowAGAIN() 'هذه الفنكشن عشان اذا موجود الرقم يروح و يزيد الرقم مره اخرى بمقدار واحد

Return True

End If

End Function

Sub ShowAGAIN()

Try

OleDbConnection1.Open()

OleDbDataAdapter1.SelectCommand.CommandText = "select * from Acounts order by AcountId desc"

OleDbDataAdapter1.SelectCommand.ExecuteNonQuery()

OleDbConnection1.Close()

OleDbDataAdapter1.Fill(DataSet11, "Acounts")

Catch ex As OleDbException

MessageBox.Show(ex.Message)

End Try

If DataSet11.Tables("Acounts").Rows.Count < 1 Then ' منشوف هون اذا في الجدول موجود معلومات ام لا اذا فاضي نضع الرقم واحد عدا ذلك نزيد عليه بمقدار واحد

x = 1

TextBox1.Text = x

Else

x = DataSet11.Tables("Acounts").Rows(0).Item(0)

x = x + 1

TextBox1.Text = x

End If

End Sub

End Class

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

bin

الي السي

اضفت التالي:

Dim x As Integer

Dim ConnString As String = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source =c:\sand.mdb"

Dim OleDbConnection1 As New OleDbConnection(ConnString)

Dim OleDbDataAdapter1 As New OleDb.OleDbDataAdapter

Dim Dataset11 As New DataSet()

علما ان الكود الاصلي اشتغل على 2003 كمان على 2005 لما تفتح البرنامج عادياقصد من غير تغيرات

بس لما تسوي واحد جديد على 2005 وتكتب نفس الكود باضافه السابق لم يعمل

وشكرا لكم

قبل ان تتعلم اصول البرمجه

تعلم اداب الحوار مع الاخرين

#2

السلام عليكم

أحسن الله إليكي, هنالك بعض الملاحظات على اسلوب البرمجة و الطريقة لديكي

أولاً الاسلوب هش للغاية و فيه حشو كثير , وكذلك جم من التحصيل الحاصل , إضافة إلى استخدام عناصر في غير محلها.

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

مجمل الملاحظات :

أولاً أستخدم سلوك فتح و اغلاق الاتصال في وضع الـ Disconnected Environments عبارة عن تحصيل حاصل

لانه الـ DataAdapter يقوم بفتح و إغلاق الاتصال بنفسه و فلا داعي لهذه الزيادة الغير مقبوله.

ثانياً : في البرمجة الفعلية لا احد يسمي متغيراً ما x , فلا تطبقي أسلوب أختبار الامثلة على مشروع واقعي. وكان يفترض أن يحمل الاسم RowsCounts

ثالثاً : ما هي الحكمة من زيادة رقم واحد أو لا, وفقاً لوجود صفوف في الـDataSet ؟ ليست هنالك حكمة ظاهرة .

رابعاً : للمرة الاولى أعلم أن عملية فحص قيمة في مكانٍ ما تكون عبر جملة الاضافة Insert !!! هذا إنتحار برمجي لا محاله .

خامساً : مادام انها قيمة واحدة فـالعنصر Scalar أفضل من إعادة تعبئة الـ DataSet فهنا لم تستخدمي العنصر المناسب في المكان المناسب.

سادساً : الكلام في الملاحظة الخامسة ينطبق على الوظيفة التي تبحث عن قيمة للتطابق.

سابعاً : تعريف مسار الاتصال يكون عبر Application.StartPath للإتصال بالقاعدة من اي جهاز كان دون الخوض في اقراص هذا الجهاز عن ذك.

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

بالنسبة لـ 2005 لم يعد هنالك ما يعرف بـ DataAdapter عبر تصميم الواجهة, و إن كان لازال مدعم عبر كتابة الكود ولكننه استبدل

بما يعرف بـ TableAdapter , ثانياً قيمة الاتصال إن لم تكن عنونت في الـ Settings فستكون بلا شك في صفحة التصميم للـ DataSet

اي ما يعرف بـ DataSet.Desinger.VB بالتوفيق إن شاء الله.

في المثال يتضح المقال

#3

الاخ العزيز احسن الله لك وبارك لك على سرعه استجابتك

في البداية

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

اما في مايخص موضوع فحص القيمه وزيادتها واحد فالمطلوب مني هو اول ما تفتح الصفحه يقراء اخر رقم ويسترجع اخر قيمه موجدوده فيه زايد واحد في التكس بوكس 1 ذلك لاعطاء المستخدم رقم جديد

وليس المطلوب عدد السطور ولذلك لم استخدم عبارة scalar

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

لنفرض ان لدي جدول يحتوي على القيم 1- 10 وقام المستخدم بحدف اول ثلاثه قيم فيصبح الموجود من 4-10

فادا قام باسترجاع عدد السطور باستحدام عباره scalar فانه سوف يرجع عدد السطور وهو 7 وعند اضافه واحد لياخد القيمه اللتى تليه سوف يكتب 8 وهده القيمه موجوده بالجدول لذلك استخدمت عباره قراءة اخر جمله ثم يضيف لها واحد

اما فيما يخص عملية insert

فانا كتبتها لانه هنا سوف يتم اضافه القيم الى الجدول بمعني حفظ القيم الجديده

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

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

لذلك اقول لك في المثال يتضح المقال

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

وهنا اقول لك ان العمليه في الوضع المنفصل

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

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

هنا اود ان اوضح ان العملية الاولى وهي عملية اخد اخر قمه بالجدول ستتم عبر dataset

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

اما موضوع مسار الاتصال

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

بس انا كتب اسم الدرايف لاني كنت اتمني انو اللي يجاوب علي يكتبلي كود الاتصال برمجيا في 2005

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

لانو راي مبرمج مهم مثلك راح يكون مفيد لي بالتاكيد

بس رجاءا جربه بنفسك

كما اتمني منك ان تغير الاتصال فيه ويكون بشكل برمجي لانو بالصراحه 2005 جديد كليا على وانا مازلت استخدم فيه اسلوب الاتصال البرمجي ودلك بكتابت الكود بيدي

وشكرا لك اخ الغملاسي

nora12.txt

قبل ان تتعلم اصول البرمجه

تعلم اداب الحوار مع الاخرين

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

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

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

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

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

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