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

سؤال:أحفظ سجل واعرف رقمه التسلسلي مباشرة؟؟؟

مغلق
بدأه Romantic_touch في 21 سبتمبر 2005 · 12 رد · 907 مشاهدة · في Microsoft Visual Basic.NET
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

اخواني انا استخدم الجمل التالية لحفظ سجل

' Conn is the Connection String

 SqlIns = "Insert Into tblName (F1,F2,F3) values ('"& R1 &"','"& R2 &"','"& R3 &"')
            Dim cmd As New OleDb.OleDbCommand(SqlIns, Conn)
            cmd.ExecuteNonQuery()

مشكلتي الان اريد ان اعرف كم رقم الـ ID الخاص بهذا الحقل واقصد PK الذي يتم اضافته تلقائيا من الداتا بيس؟

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

ارجو الافادة وشكرا.

تم تعديل هذه المشاركة بواسطة crazy-man في 24 سبتمبر 2005 في 04:05

<span style='color:green'>سؤل ابن عباس عن علمه كيف جمعه فقال :( أوتيت لسانا سؤولا وقلبا عقولا)</span>

#2

السلام عليكم

ممكن من فضلك تذكر سبب إحتياجك للـ ID

قد يكون تصورك في حل هذه المشكلة غير مطابق لطبيعة المشكلة أصلاً, والله أعلم

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

#3

السلام على من اتبع الهدى ورحمة الله وبركاته

يوجد بإذن الله حل

Select @ID = IDENT_CURRENT('TableName')
OR
Select @ID = Select @@identity

Name : Ahmed H. Alawady

Web Site : Alawady.info

Email : alawady_ahmed@hotmail.com

Tel : +2 012 345 6808

#4

الأخ الغملاسي

احتياجي هو انه لدي جدولين الأول الاساسي والذي ادخل فيه معلومات العميل ويكون الرقم عبارة عن PK والاخر يكون فيه رقم العميل التسلسلي (AutoNumber) عبارة عن مفتاح اجنبي FK,فالبداية اقوم بإدخل معلومات العميل من النموذج الى الجدول الاساسي ثم ومن نفس النموذج يدخل المستخدم معلومات الجدول الاخر لذلك انا محتاج الى معرفة الرقم PK لكي ادخله الى الجدول الآخر ولكم كل الشكر إن شاء الله تكون واضحة اخ غملاسي

الأخ Ahmed H. Alawady بصراحة ما فهمت كيفية الاستفادة من الكود!!؟

<span style='color:green'>سؤل ابن عباس عن علمه كيف جمعه فقال :( أوتيت لسانا سؤولا وقلبا عقولا)</span>

#5

السلام عليكم

لمعرفة أخر رقم تم إضافتهُ في قاعدة البيانات يكون كالتالي

اولاً من الحدث row Updated التابع للعنصر DataAdapter

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

الرقم التلقائي أو الـ Primery Key من قاعدة البيانات , بحيث نستخدم Execute Scalar العنصر المخول لجلب قيمة واحدة فقط

بهذا الشكل

Private Sub DAMain_RowUpdated(ByVal sender As Object, ByVal e As System.Data.SqlClient.SqlRowUpdatedEventArgs) Handles DAMain.RowUpdated
       Try
           If e.Status = UpdateStatus.Continue AndAlso e.StatementType = StatementType.Insert Then
               'Get NewID
               Dim cmdGetIdentity As New SqlCommand("SELECT @@IDENTITY", CnnMain)
               cmdGetIdentity.CommandType = CommandType.Text
               e.Row("SerialNumber") = Int32.Parse(cmdGetIdentity.ExecuteScalar().ToString())
               e.Row.AcceptChanges()
               MsgBox(e.Row("SerialNumber"))
           End If
       Catch ex As Exception
           MsgBox(ex.Message)
       End Try
   End Sub

بالتوفيق إن شاء الله.

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

#6

الف شِكر اخ غملاسي ولكن اين اضع الكودهذا؟ او كيف اضيفه؟ حيث انني حاليا اقوم بعملية الاضافة كالتالي:

Try
dim R1 as string = "FrstName"
dim R2 as string = "FthrName"
dim R3 as string = "FamilyName"
            Call sConn()
SqlIns = "Insert Into tblName (F1,F2,F3) values ('"& R1 &"','"& R2 &"','"& R3 &"')

            Dim cmd As New OleDb.OleDbCommand(SqlIns, Conn)
            cmd.ExecuteNonQuery()


            'MessageBox.Show(SqlIns)

        Catch e1 As OleDb.OleDbException

            MessageBox.Show(e1.Message)

        End Try

        Conn.Close()

<span style='color:green'>سؤل ابن عباس عن علمه كيف جمعه فقال :( أوتيت لسانا سؤولا وقلبا عقولا)</span>

#7

السلام عليكم

بعد هذا النص البرمجي مباشرتاً

 cmd.ExecuteNonQuery()

بالتوفيق إن شاء الله.

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

#8

السلام عليكم

الأخ الغملاسي حقيقة عملتها قبل ان اسأل لتكون كالتالي:

Try
dim R1 as string = "FrstName"
dim R2 as string = "FthrName"
dim R3 as string = "FamilyName"
           Call sConn()
SqlIns = "Insert Into tblName (F1,F2,F3) values ('"& R1 &"','"& R2 &"','"& R3 &"')

           Dim cmd As New OleDb.OleDbCommand(SqlIns, Conn)
           cmd.ExecuteNonQuery()
Private Sub DAMain_RowUpdated(ByVal sender As Object, ByVal e As System.Data.SqlClient.SqlRowUpdatedEventArgs) Handles DAMain.RowUpdated
      Try
          If e.Status = UpdateStatus.Continue AndAlso e.StatementType = StatementType.Insert Then
              'Get NewID
              Dim cmdGetIdentity As New SqlCommand("SELECT @@IDENTITY", CnnMain)
              cmdGetIdentity.CommandType = CommandType.Text
              e.Row("SerialNumber") = Int32.Parse(cmdGetIdentity.ExecuteScalar().ToString())
              e.Row.AcceptChanges()
              MsgBox(e.Row("SerialNumber"))
          End If
      Catch ex As Exception
          MsgBox(ex.Message)
      End Try
  End Sub


           'MessageBox.Show(SqlIns)

       Catch e1 As OleDb.OleDbException

           MessageBox.Show(e1.Message)

       End Try

       Conn.Close()

وظهرت عندي مشاكل في بعض الكلمات تحتها خط ازرق يعني غير صحيح موضعها حيث اني اتوقع انه لا بد ان تكون موجودة كإجراء مستقبل وعملت لها استدعاء من بعد جملة cmd.executecnonquery() ولكن ايضا نفس المشكلة

ادام الله عليك الصبر على المبتدئين.

<span style='color:green'>سؤل ابن عباس عن علمه كيف جمعه فقال :( أوتيت لسانا سؤولا وقلبا عقولا)</span>

#9

السلام عليك

إنسخ هذا الكود فقط و انسى الباقي

'Get NewID
             Dim cmdGetIdentity As New SqlCommand("SELECT @@IDENTITY", CnnMain)
             cmdGetIdentity.CommandType = CommandType.Text
             e.Row("SerialNumber") = Int32.Parse(cmdGetIdentity.ExecuteScalar().ToString())
             e.Row.AcceptChanges()
             MsgBox(e.Row("SerialNumber"))

لانه الكود السابق يعتمد على حدث row updated في dataAdapter ومشروعك المبارك لا يعتمد عليه في التحديث

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

مع وضع عنصر من نوع row ليأخذ مكان e.Row أو اي متغير يأخذ القيمة العائدة من ExecuteScalar

والله أعلم.

تم تعديل هذه المشاركة بواسطة الغملاسي في 22 سبتمبر 2005 في 05:46

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

#10

اخي الكريم لدي مشكلة في السطر

Dim cmdGetIdentity As New SqlCommand("SELECT @@IDENTITY", CnnMain)

وبالضبط تحت كلمة SqlCommand

وهل تعريف e صحيح بالشكل التالي

Dim e As OleDb.OleDbRowUpdatedEventArgs

<span style='color:green'>سؤل ابن عباس عن علمه كيف جمعه فقال :( أوتيت لسانا سؤولا وقلبا عقولا)</span>

#11

السلام عليكم

بما أنك تستخدم Access Database فيفترض أنك تعمل على مزود OLEDB بدل من SQL النصوص البرمجية تكون بهذا الشكل

  'Get NewID
        Dim cmdGetIdentity As New OleDb.OleDbCommand("SELECT @@IDENTITY", CnnMain)
        cmdGetIdentity.CommandType = CommandType.Text
        Dim CurrentID As Integer = _
        Int32.Parse(cmdGetIdentity.ExecuteScalar().ToString())
        MsgBox(CurrentID.ToString)

تعريفك للحدث , غير صحيح لانه المطلوب منك متغير Variable وليس حدث Event

بالتوفيق إن شاء الله

تم تعديل هذه المشاركة بواسطة الغملاسي في 22 سبتمبر 2005 في 22:30

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

#12

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

تمت التجربة وزبط الموضوع :)

بس تعرف حسيت اني ماني فاهم شي غير نسخ ولصق اذا ممكن تشرح الخطوات وبالذات كلمة @@IDENTITY????

وكيف طريقة عمل الكود وعلاقته بالكود INSERT

شكلها كذا تجيب الـ PK طب لو كانت كذا كيف لو ابغى اجيب حقل تاني؟؟

تكرم علينا بالشرح ياكريم الطبايع

تم تعديل هذه المشاركة بواسطة Romantic_touch في 24 سبتمبر 2005 في 04:54

<span style='color:green'>سؤل ابن عباس عن علمه كيف جمعه فقال :( أوتيت لسانا سؤولا وقلبا عقولا)</span>

#13
Romantic_touch كتب:
الف شكر اخي الغملاسي

تمت التجربة وزبط الموضوع :)

بس تعرف حسيت اني ماني فاهم شي غير نسخ ولصق اذا ممكن تشرح الخطوات وبالذات كلمة @@IDENTITY????

وكيف طريقة عمل الكود وعلاقته بالكود INSERT

شكلها كذا تجيب الـ PK طب لو كانت كذا كيف لو ابغى اجيب حقل تاني؟؟

تكرم علينا بالشرح ياكريم الطبايع

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

cmd.CommandText = "select max(Rec_ID) From ServiceCustomer"
            CurrentCustomer = CInt(cmd.ExecuteScalar())

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

فهل هذه المشكلة ستظل موجودة في نفس الكود الذي اعطيتني هو؟؟

<span style='color:green'>سؤل ابن عباس عن علمه كيف جمعه فقال :( أوتيت لسانا سؤولا وقلبا عقولا)</span>

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

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