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

Insert into & autonumber & others

بدأه عمرو عماد في 13 أكتوبر 2012 · 11 رد · 1,185 مشاهدة · في ADO.NET
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع
Public DB As New OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source =" & Application.StartupPath & "\DB\Store.accdb")
Dim MaxV As Integer
Dim cmd As New OleDbCommand

If DB.State = ConnectionState.Closed Then DB.Open()
cmd.Connection = DB

cmd.Parameters.Clear()
cmd.CommandText = "insert into Groups (ID,[Name],[Max],Description) values (@ID,@Name,@Max,@Description)"

cmd.Parameters.AddWithValue("@ID", MaxV)
cmd.Parameters.AddWithValue("@Name", Me.TName.Text)
cmd.Parameters.AddWithValue("@Max", Val(Me.TMax.Text))
cmd.Parameters.AddWithValue("@Description", Me.TDesc.Text)


cmd.ExecuteNonQuery()
DB.Close()
MsgBox("Addition value to database .", MsgBoxStyle.Information)

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

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

ثم أقوم بعمل بعمل إضافة في الجدول Groups الذي يحتوي علي أربعة حقول

  1. ID ترقيم تلقائي ومفتاح أساسي
  2. Name من النوع النصي
  3. Max رقمي
  4. Descritpion من النوع النصي

  • أولا : لماذا لم تقبل جملة SQL حقل Name بهذا الأسم وقبلته [Name] وكذلك Max
  • ثانيا : الكود السابق به خطأ لأن لا أستطيع إضافة بسبب الترقيم التلقائي
  • ثالثا : كيف يمكنني أن أستخدم دالة Max وارجاع القيمة العظمي؟
  • ثالثا: لو قمت بالإستغناء عن الترقيم التلقائي كيف أضمن أني لا بإستخدام ID قد قمت بحذفه سابقا
#2

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

1- لأنها كلمه محجوزه مثل Max,User وغيرهما

2- اذا كان الحقل ID تلقائي فلا داعي لتمريره

3- يمكنك عمل جمله بها Max واستخدام الداله ExecuteScalar

4- ولماذا تضمن اهم شي يكون غير موجود مسبقا

1

.:: Wish to become better and better ::.

#3

كيف يتم التعديل بنفس الطريقة اي update بدلا من insert

#4

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

اخي للتعديل قم فقط بتغيير الامر الى Update

.:: Wish to become better and better ::.

#5
Public DB As New OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source =" & Application.StartupPath & "\DB\Store.accdb")
Dim cmd As New OleDbCommand

If DB.State = ConnectionState.Closed Then DB.Open()
cmd.Connection = DB

cmd.Parameters.Clear()
cmd.CommandText = "insert into Groups ([Name],[Max],Description) values (@Name,@Max,@Description)"


cmd.Parameters.AddWithValue("@Name", Me.TName.Text)
cmd.Parameters.AddWithValue("@Max", Val(Me.TMax.Text))
cmd.Parameters.AddWithValue("@Description", Me.TDesc.Text)


cmd.ExecuteNonQuery()
DB.Close()
MsgBox("Addition value to database .", MsgBoxStyle.Information)

قمت بتعديل الكود كما قلت أخي ولكن ظهر رسالة الخطأ التي تقول

Index or primary key cannot contain a Null value.
#6

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

اخي تأكد انك قمت بضبط الترقيم التلقائي للمفتاح الاساسي

.:: Wish to become better and better ::.

#7

نعم قمت بالتعديل المفتاح الأساسي الي الترقيم التلقائي "وجدت نفسي قد نسيته"

السؤال رقم 3 - هو كيف أستخدم الدالة Max علي الحقل ID

قمت بعمل جملة إستعلام بهذا الشكل

Select Max(ID) From Group As Max_Value

الأن لا أعرف أين أقوم بتنفيذها وكيف أقوم بقراءة Max_value لأقوم بوضعها في متغير MaxV

السؤال رقم 4 : قد سألتك لو أحببت الإستغناء عن الترقيم التلقائي وقمت أنا بإدارة المفتاح الإساسي لكن المستخدم قام بحذف السجل الأخير وهذا السجل مربوط بجدول أخر وليكن الأصناف يعني هناك أصناف أخري موجودة في جدول الأصناف مرتبطة بالسجل المحذوف ولم أقم أنا بحذفها

فلو قام المستخدم بإضافة مجموعة جديدة سأقوم بإستخدام الدالة Max للحصول علي رقم جديد لل ID وسيكون هو رقم السجل المحذوف مؤخر وبالتالي سوف يعتبر العناصر التي تأخذ رقم المجموعة والموجودة في جدول الأصناف تبع لهذه المجموعة الجديدة دون إضافتها من جديد

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

#8

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

اخي جرب الاستعلام التالي

Select Max(id) From [TableName]

وبعدها نفذ الدالة ExecuteScalar

1

.:: Wish to become better and better ::.

#9
        cmd.CommandText = "Select Max(ID) From Groups"
        MaxV = (cmd.ExecuteScalar())

تم الحل أخي هشام "يور وليكم :) "

#10

لم تجيبني علي السؤال الأخير

السؤال رقم 4 : قد سألتك لو أحببت الإستغناء عن الترقيم التلقائي وقمت أنا بإدارة المفتاح الإساسي لكن المستخدم قام بحذف السجل الأخير وهذا السجل مربوط بجدول أخر وليكن الأصناف يعني هناك أصناف أخري موجودة في جدول الأصناف مرتبطة بالسجل المحذوف ولم أقم أنا بحذفها

فلو قام المستخدم بإضافة مجموعة جديدة سأقوم بإستخدام الدالة Max للحصول علي رقم جديد لل ID وسيكون هو رقم السجل المحذوف مؤخر وبالتالي سوف يعتبر العناصر التي تأخذ رقم المجموعة والموجودة في جدول الأصناف تبع لهذه المجموعة الجديدة دون إضافتها من جديد

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

#11

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

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

.:: Wish to become better and better ::.

#12

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

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

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