تقييم الموضوع :
  • 1 أصوات - بمعدل 2
  • 1
  • 2
  • 3
  • 4
  • 5
كيف يمكنني عمل trigger يقوم بإضافة بيانات حقل من جدول ما إلى حقل في جدول آخر
#11
أختي الكريمة :
حسب معلوماتي فإننا لا نستطيع تمرير بارامتر إلى Trigger فنحن أساسا غير قادرين على طلبه بشكل مباشر , أي أننا لانستطيع طلب تنفيذ الـ Trigger من لغة البرمجة لكي نتمكن من إرسال بارامتر إليه ...
باعتقادي نحن بحاجة إلى فكرة بديلة
الرد }}}
تم الشكر بواسطة:
#12
أختي الكريمة :
حسب معلوماتي فإننا لا نستطيع تمرير بارامتر إلى Trigger فنحن أساسا غير قادرين على طلبه بشكل مباشر , أي أننا لانستطيع طلب تنفيذ الـ Trigger من لغة البرمجة لكي نتمكن من إرسال بارامتر إليه ...
باعتقادي نحن بحاجة إلى فكرة بديلة
الرد }}}
تم الشكر بواسطة:
#13
محمد الحاج خلف كتب :أختي الكريمة :
حسب معلوماتي فإننا لا نستطيع تمرير بارامتر إلى Trigger فنحن أساسا غير قادرين على طلبه بشكل مباشر , أي أننا لانستطيع طلب تنفيذ الـ Trigger من لغة البرمجة لكي نتمكن من إرسال بارامتر إليه ...
باعتقادي نحن بحاجة إلى فكرة بديلة

فعلا أخي محمد هذا ماأظنه أيضا ولكن ماذا لو استخدمنا store procedure ، بحيث يحمل innput parameter ؟ ولكن كيف يمكنني تمرير القيمة من أداة textbox إلى هذا الباراميتر؟
الرد }}}
تم الشكر بواسطة:
#14
لقد قمت باستخدام Transaction أعتقد أنك على دراية بآلية علمها ... باختصار تقوم Transaction بتنفيذ عبارات sql عديدة فإما أن تنجح جميع هذه العبارات فيتم تثبيتها أو إن حدث خطأ ما عند تنفيذ إحدى العبارات فإنه سيتم التراجع عن تنفيذ جميع ماسبق .
يمكن الاستفادة منها , حيث نريد نحن أن نضمن أن الإضافة ستتم على كلا الجدولين classes و sections أو أن لايتم الإضافة أساسا
بإمكانك أختي الكريمة استخدام هذا الكود :
كود :
[align=left]
SqlConnection myConnect;
        SqlCommand myCommand;
        myConnect = new SqlConnection();
        string connectionString = ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString;
        myConnect.ConnectionString = connectionString;
        myCommand = new SqlCommand();
        myCommand.Connection = myConnect;


        string className = TextBox1.Text;
        string section = TextBox2.Text;

        SqlTransaction transaction;

        myConnect.Open();
        transaction = myConnect.BeginTransaction();
        try
        {

            new SqlCommand("INSERT INTO classes " +
               "(classname) VALUES ('" + className + "');", myConnect, transaction).ExecuteNonQuery();

            new SqlCommand("INSERT INTO sections " +
               "(classno) select top(1) classno from classes order by classno desc;", myConnect, transaction)
               .ExecuteNonQuery();

            new SqlCommand("update sections set section='" + section + "' where secid=(select max(secid) from sections)", myConnect, transaction)
               .ExecuteNonQuery();

            transaction.Commit();
        }
        catch (SqlException sqlError)
        {
            transaction.Rollback();
            Response.Write(sqlError.Message);
        }
        myConnect.Close();
[/align]

على العموم المثال كاملا موجود في المرفقات
تحياتي


الملفات المرفقة
.rar   WebSite1.rar (الحجم : 123.29 ك ب / التحميلات : 32)
الرد }}}
تم الشكر بواسطة:
#15
أخي محمد فعلا خطرت ببالي هذه الفكرة من قبل وقمت بتجربتها إلا أنه لايقوم بتخزين قيمة حقل الشعبة بداخل جدول الشعبsections
فيما يلي الكود الذي استخدمته والملف المرفق

كود :
[SIZE=2]
[/SIZE][SIZE=2][color=#0000ff][SIZE=2][COLOR=#0000ff]Dim[/color][/SIZE][/COLOR][/SIZE][SIZE=2] connstr [/SIZE][SIZE=2][color=#0000ff][SIZE=2][COLOR=#0000ff]As[/color][/SIZE][/COLOR][/SIZE][SIZE=2][color=#0000ff][SIZE=2][COLOR=#0000ff]String[/color][/SIZE][/COLOR][/SIZE][SIZE=2] = ConfigurationManager.ConnectionStrings([/SIZE][SIZE=2][color=#a31515][SIZE=2][COLOR=#a31515]"ConnectionString"[/color][/SIZE][/COLOR][/SIZE][SIZE=2]).ConnectionString[/SIZE]

[SIZE=2]
[/SIZE][SIZE=2][color=#0000ff][SIZE=2][COLOR=#0000ff]Protected[/color][/SIZE][/COLOR][/SIZE][SIZE=2][color=#0000ff][SIZE=2][COLOR=#0000ff]Sub[/color][/SIZE][/COLOR][/SIZE][SIZE=2] Button1_Click([/SIZE][SIZE=2][color=#0000ff][SIZE=2][COLOR=#0000ff]ByVal[/color][/SIZE][/COLOR][/SIZE][SIZE=2] sender [/SIZE][SIZE=2][color=#0000ff][SIZE=2][COLOR=#0000ff]As[/color][/SIZE][/COLOR][/SIZE][SIZE=2][color=#0000ff][SIZE=2][COLOR=#0000ff]Object[/color][/SIZE][/COLOR][/SIZE][SIZE=2], [/SIZE][SIZE=2][color=#0000ff][SIZE=2][COLOR=#0000ff]ByVal[/color][/SIZE][/COLOR][/SIZE][SIZE=2] e [/SIZE][SIZE=2][color=#0000ff][SIZE=2][COLOR=#0000ff]As[/color][/SIZE][/COLOR][/SIZE][SIZE=2] System.EventArgs) [/SIZE][SIZE=2][color=#0000ff][SIZE=2][COLOR=#0000ff]Handles[/color][/SIZE][/COLOR][/SIZE][SIZE=2] Button1.Click[/SIZE]
[SIZE=2]        
[/SIZE][SIZE=2][color=#0000ff][SIZE=2][COLOR=#0000ff]Dim[/color][/SIZE][/COLOR][/SIZE][SIZE=2] cn [/SIZE][SIZE=2][color=#0000ff][SIZE=2][COLOR=#0000ff]As[/color][/SIZE][/COLOR][/SIZE][SIZE=2][color=#0000ff][SIZE=2][COLOR=#0000ff]New[/color][/SIZE][/COLOR][/SIZE][SIZE=2] SqlConnection(connstr)[/SIZE]
[SIZE=2]        cn.Open()
        
[/SIZE][SIZE=2][color=#0000ff][SIZE=2][COLOR=#0000ff]Dim[/color][/SIZE][/COLOR][/SIZE][SIZE=2] cname [/SIZE][SIZE=2][color=#0000ff][SIZE=2][COLOR=#0000ff]As[/color][/SIZE][/COLOR][/SIZE][SIZE=2][color=#0000ff][SIZE=2][COLOR=#0000ff]String[/color][/SIZE][/COLOR][/SIZE][SIZE=2] = t1.Text[/SIZE]
[SIZE=2]        
[/SIZE][SIZE=2][color=#0000ff][SIZE=2][COLOR=#0000ff]Dim[/color][/SIZE][/COLOR][/SIZE][SIZE=2] secname [/SIZE][SIZE=2][color=#0000ff][SIZE=2][COLOR=#0000ff]As[/color][/SIZE][/COLOR][/SIZE][SIZE=2][color=#0000ff][SIZE=2][COLOR=#0000ff]String[/color][/SIZE][/COLOR][/SIZE][SIZE=2] = t2.Text[/SIZE]
[SIZE=2]        
        
[/SIZE][SIZE=2][color=#008000][SIZE=2][COLOR=#008000]'-----------------------------------------------------------[/color][/SIZE][/COLOR][/SIZE]
[SIZE=2]        
[/SIZE][SIZE=2][color=#0000ff][SIZE=2][COLOR=#0000ff]Dim[/color][/SIZE][/COLOR][/SIZE][SIZE=2] myTrans = cn.BeginTransaction()[/SIZE]
[SIZE=2]        
[/SIZE][SIZE=2][color=#0000ff][SIZE=2][COLOR=#0000ff]Dim[/color][/SIZE][/COLOR][/SIZE][SIZE=2] myCommand [/SIZE][SIZE=2][color=#0000ff][SIZE=2][COLOR=#0000ff]As[/color][/SIZE][/COLOR][/SIZE][SIZE=2][color=#0000ff][SIZE=2][COLOR=#0000ff]New[/color][/SIZE][/COLOR][/SIZE][SIZE=2] SqlCommand()[/SIZE]
[SIZE=2]        myCommand.Connection = cn
        myCommand.Transaction = myTrans
    
        
[/SIZE][SIZE=2][color=#0000ff][SIZE=2][COLOR=#0000ff]Try[/color][/SIZE][/COLOR][/SIZE]
[SIZE=2]            myCommand.CommandText =
[/SIZE][SIZE=2][color=#a31515][SIZE=2][COLOR=#a31515]"insert into t1 (classname) values( '"[/color][/SIZE][/COLOR][/SIZE][SIZE=2] + cname + [/SIZE][SIZE=2][color=#a31515][SIZE=2][COLOR=#a31515]"')"[/color][/SIZE][/COLOR][/SIZE]
[SIZE=2]            myCommand.ExecuteNonQuery()
            myCommand.CommandText = (
[/SIZE][SIZE=2][color=#a31515][SIZE=2][COLOR=#a31515]"INSERT INTO sections (classno) select top(1) classno from t1 order by classno desc "[/color][/SIZE][/COLOR][/SIZE][SIZE=2])[/SIZE]
[SIZE=2]            myCommand.ExecuteNonQuery()
            myCommand.CommandText = (
[/SIZE][SIZE=2][color=#a31515][SIZE=2][COLOR=#a31515]"update sections set section =('"[/color][/SIZE][/COLOR][/SIZE][SIZE=2] + secname + [/SIZE][SIZE=2][color=#a31515][SIZE=2][COLOR=#a31515]"')where secid =(Select max(secid) from sections"[/color][/SIZE][/COLOR][/SIZE][SIZE=2])[/SIZE]
[SIZE=2]            myTrans.Commit()
            Response.Write(
[/SIZE][SIZE=2][color=#a31515][SIZE=2][COLOR=#a31515]"Both records are written to database."[/color][/SIZE][/COLOR][/SIZE][SIZE=2])[/SIZE]
[SIZE=2]        
[/SIZE][SIZE=2][color=#0000ff][SIZE=2][COLOR=#0000ff]Catch[/color][/SIZE][/COLOR][/SIZE][SIZE=2] ep [/SIZE][SIZE=2][color=#0000ff][SIZE=2][COLOR=#0000ff]As[/color][/SIZE][/COLOR][/SIZE][SIZE=2] Exception[/SIZE]
[SIZE=2]            myTrans.Rollback()
            Response.Write(
[/SIZE][SIZE=2][color=#a31515][SIZE=2][COLOR=#a31515]"Neither record was written to database."[/color][/SIZE][/COLOR][/SIZE][SIZE=2])[/SIZE]
[SIZE=2]        
[/SIZE][SIZE=2][color=#0000ff][SIZE=2][COLOR=#0000ff]Finally[/color][/SIZE][/COLOR][/SIZE]
[SIZE=2]            cn.Close()
        
[/SIZE][SIZE=2][color=#0000ff][SIZE=2][COLOR=#0000ff]End[/color][/SIZE][/COLOR][/SIZE][SIZE=2][color=#0000ff][SIZE=2][COLOR=#0000ff]Try[/color][/SIZE][/COLOR][/SIZE]
[SIZE=2]    
    
[/SIZE][SIZE=2][color=#0000ff][SIZE=2][COLOR=#0000ff]End[/color][/SIZE][/COLOR][/SIZE][SIZE=2][color=#0000ff][SIZE=2][COLOR=#0000ff]Sub[/color][/SIZE][/COLOR][/SIZE]


الملفات المرفقة
.zip   wsreg2.zip (الحجم : 236.16 ك ب / التحميلات : 33)
الرد }}}
تم الشكر بواسطة:
#16
أختي الكريمة
لاحظت من خلال قرائتي للكود في الأعلى أنك لم تضعي التعليمة myCommand.ExecuteNonQuery() بعد عبارة التعديل update
وبالتالي فإنها لن تعمل
على العموم سأقوم بتحميل المثال ومعاينة الكود
تحياتي
الرد }}}
تم الشكر بواسطة:
#17
مرحبا مره أخرى ،،،،

الأخ محمد ماقصر الله يجزاه خير ،،، ولكن لي ملاحظتين :

# الملاحظة الأولى : الأخ محمد عمل ثلاث عمليات العملية الأولى : (ادخال اسم الفصل في جدول الفصول) العملية الثانية (ادخال رقم الآيدي للفصل في جدول الشعب) العملية الثالثة (تعديل على جدول الشعب بموجب شرط آخر رقم للآيدي واضافة اسم الشعبة)

بينما هي عمليتين بالأصل (ادخال اسم الفصل في جدول الفصول) و (ادخال رقم الآيدي للفصل واسم الشعبة في جدول الشعب) فقط

# الملاحظة الثانية : والتي اعتبرها مشكلة ان لم تنتبهو لها وشرح المشكلة كالتالي :

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

لنفرض يوجد في سجل الفصول سجل واحد فقط ،،، بإسم الفصل الأول . والآيدي التابع له رقم 1 .

وقمت انا ادخال اسم الفصل الثاني حيكون الآيدي التابع له رقم 2 .

لنفرض موظف آخر قام بإدخال سجل في نفس الوقت في الجدول . سيكون الآيدي التابع له رقم 3 .

عند تنفيذ الجملة المطروحه من أخي محمد سيجلب آخر رقم للآيدي من الجدول وهنا يكون رقم 3 .... هنا الخطأ .

الحل يكون كالتالي : عند اضافة سجل نجلب الآيدي للسجل نفسه بجملة واحده مع عملية الإدخال :

لاحظو الحل يتكون أولاً من عمليتين وليس ثلاث ، أيضاً رقم الآيدي يكون مخصوص لرقم السجل المضاف وليس آخر سجل اضيف .

كود :
Dim cmd As New SqlCommand
        cmd.Connection = conn
        conn.Open()

        cmd.CommandText = "INSERT INTO classes (classname) OUTPUT(Inserted.classno) VALUES (@classname)"
        cmd.Parameters.AddWithValue("@classname", TextBox1.Text)

        Dim sid As Integer = cmd.ExecuteScalar    'المسؤول عن ادخال البيانات وجلب رقم الآيدي في المتغير
        cmd.Dispose()


        Dim cmd2 As New SqlCommand
        cmd2.Connection = conn

        cmd2.CommandText = "INSERT INTO sections (classno,section) VALUES (@classno,@section)"
        cmd2.Parameters.AddWithValue("@classno", sid)
        cmd2.Parameters.AddWithValue("@section", TextBox2.Text)

        cmd2.ExecuteNonQuery()

        cmd2.Dispose()
        conn.Close()
المثال في المرفقات اي غموض انا موجود / بالتوفيق


الملفات المرفقة
.rar   WebSitedena.rar (الحجم : 929.27 ك ب / التحميلات : 31)
الرد }}}
تم الشكر بواسطة:
#18
أخي العزبز حريف برمجة
أصبت بنقطة وهي أني استخدمت ثلاث عبارات SQL في حين إنه بالإمكان استخدام 2 فقط
ولكن للأسف نقاط النقد التالية غير صحيحة
أولا : أنا قمت باستخدام مفهوم المناقلة Transaction وهذا المفوم تم إيجاده للتغلب على المشكلة التي طرحتها أنت , فمن أحد خصائص المناقلة هي خاصية العزل فحتى لو قام موظفان بإدخال البيانات بنفس اللحظة فإن المناقلة ستمييز كل منهما وتعيد لكل شخص نتيجة بحسب عملية إدخاله حتى لو كان الاستعلام يطلب أكبر رقم فإن المناقلة ستميز هذا بالنسبة لكل جلسة
أنصحك أخي العزيز بقراءة مفهوم المناقلة وخصائصها للتوضح لك الأمور أكثر
ثانيا : المشكلة المطروحة في النقطة الأولى قمت أنت بالوقوع بها بالكود الذي كتبته , ماذا لو تمت عملة الإضافة الأولى وفشلت عملية الإضافة الثانية ؟ هل سيتم التراجع تلقائيا عن عملية الإضافة الأولى ؟ الجواب بحسب الكود هو لا
ولكن المناقلة ستقوم بالتراجع عن الإضافة الأولى إذا فشلت الإضافة الثانية , وبهذا نضمن أن النجاح سيكون للكل أو أن لاتتم الإضافة على أحد ( مرة أخرى أنصحك بقراءة مفهوم المناقلات في قواعد البيانات )
ثالثا : أن أقوم بطرح أفكار حلول ولا أقدم أكواد نهائية , ولذلك وجدت 3 عبارات SQL بدلا من 2 وللأخت السائلة إمكانية التعديل بما يناسبها

جزاك الله الخير على تعليقك
تحياتي
الرد }}}
تم الشكر بواسطة:
#19
اخي محمد اولاً : موضوعي أنا سيتم اضافة البيانات بلا جدال والسبب بأنها اضافه في جدول واضافه أخرى في جدول آخر فقط وليست اضافتين وتعديل وامور اخرى ، ان اختل شرط يتراجع عن الكل .

ثانياً : بالنسبة لموضوعك سيتم اضافتها في الجدولين او لا تتم اضافتها في الجدولين هذا مفهوم الترانسكشن .

ولكن ماذا لو مستخدم آخر اضاف سجل في نفس الوقت سيتم جلب آخر رقم وسيتم الاضافة في الجدولين مش لم تتم الإضافة في الجدول الثاني لكي يتراجع عن الإضافة في الجدول الأول ولكن تكون الإضافة في الجدول الثاني برقم آيدي غير المطلوب.

# او ان لا تتم الإضافة في الجدولين ولماذا اخي وما دخل المستخدم بعجزنا عن الحل السليم ، يدخل بيانات ومن ثم يتراجع البرنامج عن اضافتها .

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

ثالثاً : كررت مفهوم أخي العزيز انصحك بقراءة مفهوم المناقلة وخصائصها . علماً لو اني لم اكن قارئ جيداً لها لكانت مره واحده تكفي ان تقولها .

على العموم انا قلت رأي من شاء اخذه ومن لم يشأ لا يشأ .

اقرأ هذا الرابط شوف السؤال : وانظر لأول اجابة ....

http://stackoverflow.com/questions/42648...serted-row
الرد }}}
تم الشكر بواسطة:
#20
أخي حريف برمجة
لا يوجد شي بالبرمجة اسمه
إقتباس :موضوعي أنا سيتم اضافة البيانات بلا جدال
لنفرض أن الإضافة تمت على الجدول الأول ثم انقطعت الكهرباء ولم تتم الإضافة على الجدول الثاني ... أترك لك التعليق .
إقتباس :ماذا لو مستخدم آخر اضاف سجل في نفس الوقت
... أعيد وأكرر أن من خصائص المناقلة ما يدعي بالعزل .. هذه الخاصية هي نتيجة أبحاث ودراسات عديدة لحل مشكلة التنفيذ المتوازي للمعالجات ومشاكل تعدد المستخدمين و مفهوم القفل المشترك و السيمافور ... إلخ
قرأت المقالة ضمن الرابط .. لا أدري إن كانت الأمور تداخلت بالنسبة لك ولكن هنا نتحدث عن شيء وضمن الرابط شيء آخر

شكرا لمجهودك وشكرا لرأيك لكل مبرمج أسلوبه ولكل أسلوب نقاط قوة وعيوب
تحياتي :o
الرد }}}
تم الشكر بواسطة:


المواضيع المحتمل أن تكون متشابهة .
الموضوع : الكاتب الردود : المشاهدات : آخر رد
  كيفية عمل صفحة ويب وربطها بتقعدة بيانات علي جهاز makky 1 1,585 06-01-22, 11:48 AM
آخر رد: ahmedabdelaliem
  [مقال] كيفية برمجة منتدى TextForum بدون قاعدة بيانات سعود 54 8,524 15-11-21, 09:21 PM
آخر رد: سعود
  كيف اضيف بيانات الى gridview بدون استخدام datasource ؟؟ nowiglah 1 2,516 06-12-20, 08:36 PM
آخر رد: Osama_NY
  كيفية عرض بيانات اعضاء هيئية تدريس مع الصورة cordava 0 1,358 19-09-20, 07:03 PM
آخر رد: cordava
  [سؤال] خطأ عند انشاء قاعدة بيانات من داخل فجول استوديو2013 alsihran 4 2,187 31-03-20, 01:47 AM
آخر رد: Amir_Alzubidy
  كيف اسوي فورم ادخال بيانات الحكيمي 0 2,033 13-03-17, 11:01 AM
آخر رد: الحكيمي
  [C#.NET] مشكلة في حفظ بيانات cascading dmw2200 0 1,901 14-11-16, 02:08 PM
آخر رد: dmw2200
  كيف يتم بحت من خلال taxtbox وتضهر بيانات في داتا قريد فيو habib 2 2,713 29-10-16, 05:20 PM
آخر رد: أبو عمر
Exclamation كيف اسوي صفحة إدخال بيانات في ASP.NET ؟ أبو عمر 8 4,335 12-09-16, 11:32 PM
آخر رد: Abu Ehab
  أريد تصميم برنامج قواعد بيانات عبر الانترنت salim1281 3 2,969 24-11-15, 12:50 PM
آخر رد: HASAN6.0

التنقل السريع :


يقوم بقرائة الموضوع: بالاضافة الى ( 1 ) ضيف كريم