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

كيفية Pass Null Param بستخدام Query Builder

مغلقمُجاب
بدأه Develooper في 6 فبراير 2013 · 9 رد · 1,264 مشاهدة · في قواعد بيانات Microsoft SQL Server
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم 

عند التعامل مع Data set وقاعدة بيانات Sql Server 

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

 

Select * from table where ID = ISNULL(@ID,ID)       ........... .Sql Server
 
ولكن تختلف الطريقة عند قواعد بيانات  Access
Select * from table where ID = ?      ........... .Access
 
ازاى اقدر اقوم بتمرير قيمة فارغة مثل Sql Server
 
جزاكم الله خير 
 
 

لك الحمدُ ،،، على - مَا مضى . .

وَ لكَ الحمدُ ،،، على مَا أنا ، به الآن . .
وَ لكَ الحمدُ ،،، على - مَا سيأتي . .
وَ لكَ الحمدُ ،،، على كُلِ حال . .
الحمد لله على نعمة الاسلام و كفى بها نعمة

#2

وكمان لو تكرم الى يقولى ازاى نغير كمان الجملة ديه فى ال Access

لانها تعمل مع قواعد بيانات Sql Server 

وعند استخدامها فى Access يظهر خطاء 

 

SELECT  ISNULL(MAX(ID), 0) + 1 AS Expr1 FROM Employee

لك الحمدُ ،،، على - مَا مضى . .

وَ لكَ الحمدُ ،،، على مَا أنا ، به الآن . .
وَ لكَ الحمدُ ،،، على - مَا سيأتي . .
وَ لكَ الحمدُ ،،، على كُلِ حال . .
الحمد لله على نعمة الاسلام و كفى بها نعمة

#3

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

  1. الـدالة IsNull  في المحرك Jet Engine  تاخذ بارمتر واحد و تعيد قيمة True/False  إذا كان Null  أم لا .
  2. يمكن استخدام الدالة IIF  كما في المثال :
    OleDbConnection connection = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;User ID=Admin;Data Source=" + Application.StartupPath + @"\db.mdb" + ";Persist Security Info=False");
                OleDbCommand command = new OleDbCommand("SELECT * FROM Employee WHERE ID = IIF(ISNULL(@a) ,ID ,@a )");
                //command.Parameters.AddWithValue("@a", DBNull.Value);
                command.Parameters.AddWithValue("@a", 3);
                command.Connection = connection;
                OleDbDataAdapter adapter = new OleDbDataAdapter(command);
                DataTable datatable = new DataTable();
                adapter.Fill(datatable);
                dataGridView1.DataSource = datatable;

     

  3. بالنسبة للــسؤال في المشاركة الثانية .. اعتقد انه اصبح سهل الحل ..

لا إله إلا الله ... محمد رسول الله

لو كانت مشاركتي مفيدة و تريد تشجيعي على المزيد من العطاء , فضلا قم بتقييم المشاركة

المعرًف القديم : houssam11350_11350

من مواضيعي : ArabGenCode : مولد كود و إجراءات مخزنة و واجهات لجداول سيكوال سيرفر

#4

وعليكم السلام 

شكرا اخى حسام على الرد 

لكن واضح ان الحل هو كود داخل المشروع انا اقصد 

Method فى DataSet بكتب فيها جمل الاستعلام من خلال

strongly typed dataset

 

مرفق صوره بها جملة الاستعلام فيها تمرير قيمة فارغة ولكن قاعدة بيانان SQL Server

https://www.dropbox.com/s/ado4duxat3vwlzc/SQLServer.jpg

 

 

وهنا قاعدة بيانات Access  لا يقبل @ ولا يقبل IS Null

https://www.dropbox.com/s/wveu1l7akgaw0wm/ErrorAccess.jpg

 

 

وهنا قاعدة بيانات Access  يقبل ? ولا يقبل IS Null

 
رجاء المساعدة فى كيفية استخدام تمرير قيمة فارغة مع قاعدة بيانات Access مثل SQL Server

لك الحمدُ ،،، على - مَا مضى . .

وَ لكَ الحمدُ ،،، على مَا أنا ، به الآن . .
وَ لكَ الحمدُ ،،، على - مَا سيأتي . .
وَ لكَ الحمدُ ،،، على كُلِ حال . .
الحمد لله على نعمة الاسلام و كفى بها نعمة

#5 أفضل إجابة

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

  1. فعلا يبدو أن الــ Query Builder  لا يميز البارمترات التي تبدأ بــــ  @  ...مع قاعدة بيانات أكسس .
  2. الحل :
    SELECT     ID, EmpName, Age
    FROM         Employee
    WHERE     (ID = IIF(ISNULL(?), ID, ?))

     و عند التنفيذ1 سيطلب منا ادخال قيمتين لأنه عندنا اثنتين من الـــ ؟ و ندخل نفس القيمة أو نتركهما فارغتان  معا .

  3. كما قلت فإن الدالة IsNull  في المحرك jet  تاخذ بارمتر واحد و تعيد قيمة True/False  ..

  4. بانتظار ردرود من الخبراء ..

تم تعديل هذه المشاركة بواسطة houssam11350_11350 في 7 فبراير 2013 في 03:21

لا إله إلا الله ... محمد رسول الله

لو كانت مشاركتي مفيدة و تريد تشجيعي على المزيد من العطاء , فضلا قم بتقييم المشاركة

المعرًف القديم : houssam11350_11350

من مواضيعي : ArabGenCode : مولد كود و إجراءات مخزنة و واجهات لجداول سيكوال سيرفر

#6

السلام عليكم

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

 

وانصحك باستخدام قواعد بيانات غير الاكس مثل sqllite او القواعد الموجودة مع الفيجوال استوديو اذا كان لديك مانع من استخدام SQL server

#7

وعليكم السلام 

 

شكرا اخي حسام وشكرا اخي طارق على الرد والتوضيح 

 

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

 

لكن رجاء توضيح مع هذه الجملة لانى جربت ويظهر خطاء معايا 

 

SELECT  IIF(ISNULL(MAX(IDUser), 0)+1) AS Expr1 FROM  Userss

SELECT  IIF(ISNULL(MAX(IDUser), 0))+1 AS Expr1 FROM  Userss

 

وجزاكم الله خير 

لك الحمدُ ،،، على - مَا مضى . .

وَ لكَ الحمدُ ،،، على مَا أنا ، به الآن . .
وَ لكَ الحمدُ ،،، على - مَا سيأتي . .
وَ لكَ الحمدُ ،،، على كُلِ حال . .
الحمد لله على نعمة الاسلام و كفى بها نعمة

#8

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

houssam11350_11350 كتب:
  1. كما قلت فإن الدالة IsNull  في المحرك jet  تاخذ بارمتر واحد و تعيد قيمة True/False  ..

SELECT  IIF(ISNULL(MAX(ID)), 0,MAX(ID)) + 1 AS Expr1 FROM  Employee;

طبعا المحرك Jet  هو المسؤول عن الاتصال بين برامج الدوت نت و قاعدة بيانات الأكسس و الإصدار الحديث منه هو المحرك ACE   ..

لا إله إلا الله ... محمد رسول الله

لو كانت مشاركتي مفيدة و تريد تشجيعي على المزيد من العطاء , فضلا قم بتقييم المشاركة

المعرًف القديم : houssam11350_11350

من مواضيعي : ArabGenCode : مولد كود و إجراءات مخزنة و واجهات لجداول سيكوال سيرفر

#9

وعليكم السلام 

 

اخي حسام جزاك الله خير  تم حل المشكلة مع قاعدة بيانات اكسيس

تم تعديل هذه المشاركة بواسطة Develooper في 7 فبراير 2013 في 15:03

لك الحمدُ ،،، على - مَا مضى . .

وَ لكَ الحمدُ ،،، على مَا أنا ، به الآن . .
وَ لكَ الحمدُ ،،، على - مَا سيأتي . .
وَ لكَ الحمدُ ،،، على كُلِ حال . .
الحمد لله على نعمة الاسلام و كفى بها نعمة

#10

جزاك الله خيرا .. بالتوفيق

لا إله إلا الله ... محمد رسول الله

لو كانت مشاركتي مفيدة و تريد تشجيعي على المزيد من العطاء , فضلا قم بتقييم المشاركة

المعرًف القديم : houssam11350_11350

من مواضيعي : ArabGenCode : مولد كود و إجراءات مخزنة و واجهات لجداول سيكوال سيرفر

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

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