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

كيفية مناداة وامرار قيم للكيرسور

بدأه الحلفاوي في 27 أكتوبر 2011 · 5 رد · 1,028 مشاهدة · في لغة Delphi
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

بسم الله الرحمن الرحيم

سلمكم الله جميعا وحفظكم

بدي اعرف بمثال مختصر ان امكن وباستخدام مكون ADOStorded Procedure كيفية امرار قيم (باراميترز) للداتابيز بها Cursor يعمل شرط selection بالقيم التي ترسل كابراميترز .

مع فائق الشكر

#2

السلام عليكم...

بالطبع يجب أن يكون تعريف الـ Procedure في SQL Server متضمناً للـ Parameters التي تريد تمريرها (أعتقد أنك لا تقصد هذه النقطة، و لكني للتوضيح فقط أذكر هنا جزء من تعريف Procedure لأحد برامجي):

CREATE PROCEDURE [dbo].[P_TransferAllAccounts] (@CID int, @NewCID int, @NewName nvarchar(100))
AS
	UPDATE CustAccounts SET CustAccounts.CustID = @NewCID, CustAccounts.CustName = @NewName
		WHERE (CustAccounts.CustID = @CID) AND (CustAccounts.OriginID <> 0)
.
.
.

أما في دلفي فالأمر أيضاً سهل:

فبعد تحديد الـ ConnectionString للمكون TADOStoredProc أو ربطه بـ TADOConnection تذهب إلى الخاصية ProcedureName لتحديد اسم الـ Stored Procedure الذي تريده.

و في الكود تقوم بإعطاء قيم لتلك الـ Parametes ثم تنفيذ الإجراء، مثلاً:

            with sprTransferAllAccounts do begin
                Parameters.ParamValues['@CID'] := StrToInt(Edit1.Text);
                Parameters.ParamValues['@NewCID'] := StrToInt(Edit2.Text);
                Parameters.ParamValues['@NewName'] := Edit3.Text;
                ExecProc;
            end;

* ملاحظة: بعد ربط المكون TADOStpredProc و تحديد اسم الـ Stored Procedure ، يمكنك رؤية أسماء الـ Parameters من خلال الخاصية Parameters.

نرجو الاستفادة و السلام.

وَ قُلِ اعْمَلُوا فَسَيَرَى اللهُ عَمَلَكُمْ وَ رَسُولُهُ وَ الْمُؤْمِنُونَ

صدق الله العظيم

#3

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

الاخ العزيز الفاضل ناجي , اقول احسن الله اليك لقد كنت بدأت اشعر بالياس من الرد على هذا الموضوع الحيوي بالنسبة لي شأنها شان كثير من الاسئلة من قبل فجوزيتم خيراً

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

- حلقة While الخارجية استقدم فيها الـID الخاص لكل طالب وستخدام العبارة Distinct وليكن في Studednt_IDs وهو مكون من النوع ADODataset

- ثم بالاعتماد على الحقل الذي به معرف الطالب من ADODataset الخارجية يتم استقدام البيانات الخاصة بطالب معين , ثم بعد علميات الجمع اعيد البيانات المحدثة ثانية الى قاعدة البيانات وهكذا الى ان تنتهي الحلقة الخارجية

 
While not(Student_Id_Source.DataSource.Eof)do
Begin
// inner Dataset for calculation issues
CalculateSet.Active := False;
CalculateSet.CommantText := 'Select some data from DB where Stud_ID = '''+Student_IDs.Fields[0].AsString+''' and Class_Level = '''+ComboBox1.ItemIndex+'''  ';
CalculateSet.Active := True;

// Then Update DB 
Adocommand .CommandText : = ' Update DB set ........ where Stud_ID = '''+Student_IDs.Fields[0].AsString+''' ';
Adocommand.Execute;

Student_IDs.Next
End;

والآن يبدو انك تعلم قدر التعقيد أو اقله ان نقول التاخير الذي يسببه هذا النهج لترصيد درجات الطالب اود افعلها إعتماداً على الـCursor لأنني لم اتقن التعامل بلغة T-SQL بعد , كما انني اود معرفة كيفية كتابة Nested Cursor ان امكن مع فائق الشكر

أخوك

#4
najy_zl كتب:

السلام عليكم...

بالطبع يجب أن يكون تعريف الـ Procedure في SQL Server متضمناً للـ Parameters التي تريد تمريرها (أعتقد أنك لا تقصد هذه النقطة، و لكني للتوضيح فقط أذكر هنا جزء من تعريف Procedure لأحد برامجي):

CREATE PROCEDURE [dbo].[P_TransferAllAccounts] (@CID int, @NewCID int, @NewName nvarchar(100))
AS
	UPDATE CustAccounts SET CustAccounts.CustID = @NewCID, CustAccounts.CustName = @NewName
		WHERE (CustAccounts.CustID = @CID) AND (CustAccounts.OriginID <> 0)
.
.
.

أما في دلفي فالأمر أيضاً سهل:

فبعد تحديد الـ ConnectionString للمكون TADOStoredProc أو ربطه بـ TADOConnection تذهب إلى الخاصية ProcedureName لتحديد اسم الـ Stored Procedure الذي تريده.

و في الكود تقوم بإعطاء قيم لتلك الـ Parametes ثم تنفيذ الإجراء، مثلاً:

            with sprTransferAllAccounts do begin
                Parameters.ParamValues['@CID'] := StrToInt(Edit1.Text);
                Parameters.ParamValues['@NewCID'] := StrToInt(Edit2.Text);
                Parameters.ParamValues['@NewName'] := Edit3.Text;
                ExecProc;
            end;

* ملاحظة: بعد ربط المكون TADOStpredProc و تحديد اسم الـ Stored Procedure ، يمكنك رؤية أسماء الـ Parameters من خلال الخاصية Parameters.

نرجو الاستفادة و السلام.

السلام عليكم

لقد قمت بانشاء Table-Valued_function وبه متغير واحد لارساله عبر الـStoreProcedure ولكنني اجد في البراميترات باراميتر اضافي يسمى table-return-value@ فما هي القيمة التي يجب ارسالها لهذا الباراميتر الآخر ؟

السؤال الثاني ما الفرق بين الحصول على الاسترجاع من خلال AdoDataset ,AdoStoreProcedure وما طريقة تنفيذ الاخير ؟

خالص التحايا

#5

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

لم أفهم جيدا المطلوب، ويبدو أن table-return-value لإسترجاع جدول حالة استدعاء إجراءات الجداول

TADODataSet هي أصل واجهة ADO وبه يمكن فعل كل شيء، وبقية المكونات تنحدر عنها.

في ما يأتي مثال إجراء مخزن واستدعاؤه (في SQL Server)

مثال T-SQL

CREATE PROCEDURE CheckName 
	-- Add the parameters for the stored procedure here
	@aName nvarchar(80)
AS
BEGIN    	
	IF LEN(@aName) > 5		
		INSERT INTO Customer Values(LEN(@aName), @aName, '', '', GETDATE(), '')	
	ELSE
		SELECT 'This name cant be insert'
END
GO

مثال الاستدعاء:

procedure TfMain.Button1Click(Sender: TObject);
begin
  try
    with ADOStoredProc1 do begin
      Prepared := True;
//      ProcedureName := 'CheckName;1';
      Parameters.ParamByName('@aName').Value := edCheckName.Text;
      ExecProc;
      Caption := Parameters.ParamByName('@RETURN_VALUE').Value;
    end;
  finally
    ADOTable1.Requery();
  end;
end;

حيث ADOStoredProc1: TADOStoredProc و ADOTable1: TADOTable

أعتقد أن في مثالنا الأنسب TADOCommand لسهولة الاستخدام، أنصح بتجربته

بالتوفيق.

#6

السلام عليكم...

البارامتر المتعلق بالـ ReturnValue هو بارامتر ضمني (لا نقوم نحن بتعريفه)، و هو بارامتر إخراج (OUT) حيث يستخدمه الـ Server لإعادة قيمة إلى البرنامج المستدعي، و يمكننا ضبطه عند تصميم الـ Stored Procedure في SQL Server. إذا كنت لا تحتاجه فلا تهتم لأمره.

سلام.

وَ قُلِ اعْمَلُوا فَسَيَرَى اللهُ عَمَلَكُمْ وَ رَسُولُهُ وَ الْمُؤْمِنُونَ

صدق الله العظيم

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