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

مشكلة في الأجراءات المخزنة

بدأه ABC123 في 17 فبراير 2012 · 7 رد · 464 مشاهدة · في قواعد بيانات Microsoft SQL Server
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

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

أستخدم ADO في VB6 للربط مع SQL SERVER 2008 EXPRESS

عند استدعاء أجراء مخزن مثل التالي

Create PROCEDURE PROC1 @TEXT1 VARCHAR(50)  with Encryption
AS
BEGIN
TRUNCATE TABLE SEARCH1
	SELECT * FROM RSAL1 ORDER BY NO1
END

فإن الإجراء المخزن يعود ببيانات الجدول المطوبة

ولكن المشكلة إذا قمنا بإضافة أمر INSERT قبل أمر SELECT فأن الأجراء لا يعود بأية بيانات !!!!

طريقة أستدعاء الأجراء : RS1.OPEN "EXEC DBO.PROC1 '1001'", Conn, adOpenStatic,

أرجو ممن لدية فكرة عن هذة المشكلة أن لا يبخل علينا بالرد .... ولكم جزيل الشكر والأحترام

#2

هل يعمل الاجراء في السكول ام لا يعمل

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

#3

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

اشكرك أخي على الرد ولكن أظن أني لم أوفق في شرح المشكلة بشكل واضح

أي اجراء مخزن يحتوي على عبارة SELECT فأنة يعمل بدون مشاكل ويعود بالبيانات المطلوبة أي نفس النتيجة عندما تنفذ الأمر بدون أدراجها في أجراء مخزن

المشكلة إذا قمت بأدراج حتى ولو سجل واحد في نفس الجدول بأمر INSERT فأن الأجراء لا يعود بالبيانات المفترض أنة يعود بها نتيجة أمر SELECT

عند التشييك على نفس الجدول بتنفيذ عبارة SELECT من خارج الأجراء النخزن نجد أن امر INSERT تم تنفيذة وتم إدراج البيانات الجديدة في الجدول

السؤال هنا لماذا عندما يحتوي الأجراء المخزن على عبارة INSERT فأن عبارة SELECT لا تعود بالبيانات المطلوبة ؟!!!!!!!!!!!!!!!!!!!!!!!

للتوضيح أكثر فأن نفس الأجراء لو حذفت منة عبارة INSERT فانة يعمل بشكل سليم

وهناك ملاحظة أخرى هامة نفس الأجراء يعمل بشكل صحيح في كل الحالات إذا تم تنفيذة من Microsoft SQL Server Management Studio

#4

UP

#5

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

Create PROCEDURE PROC1 @TEXT1 VARCHAR(50)  with Encryption
AS
BEGIN
 insert into ....
insert into ...
        SELECT * FROM RSAL1 ORDER BY NO1
END

ولتنفيذ البروسيجر جرب الطريقة التالية :

 Dim cmd As ADODB.Command

Set cmd = New ADODB.Command
 cmd.ActiveConnection = Conn
 cmd.CommandType = adCmdStoredProc
 cmd.CommandText = "PROC1"

 cmd.Parameters.Append cmd.CreateParameter_
	("TEXT1", adVarChar, adParamInput, 50, "1001")

 Set rs1 = cmd.Execute
#6

ضع جملة go بين الجملتين حتي ينفذ واحده بعد الاخري

insert into ...

go

        SELECT * FROM RSAL1 ORDER BY NO1
#7
KARIMSOFT كتب:

ضع جملة go بين الجملتين حتي ينفذ واحده بعد الاخري

insert into ...

go

        SELECT * FROM RSAL1 ORDER BY NO1

الأخ KARIMSOFT لا يمكن وضع جملة GO في وسط الأجراء المخزن

لأن SQL SERVER سيعتبر عبارة GO هي نهاية الأجراء المخزن!!

شاكر لك مرورك أخي الكريم

--------------------------------

مشرفنا الغالي TareqVB

ان جملة الأستعلام SELECT هي آخر جملة في الأجراء

والأجراء ينفذ بدون مشاكل إذا حذفت جملة INSERT

سوف أجرب تنفيذ الأجراء عن طريق الكائن COMMAND وسوف أوافيك بالنتيجة

شاكر أهتمامك وجزاك الله خير الجزاء

#8

اسف نسيت كلامك صح

يمكن ان تستخدم BEGIN و end اكثر من مره جرب

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

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

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

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

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