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

البحث بواسطة البارمترات

مغلق
بدأه mah110011 في 21 مارس 2006 · 9 رد · 1,050 مشاهدة · في لغة Delphi
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم

اطلعت حديثا على موضوع الاخ ابو هاني حول مقدمة في تعليمات دلفي جزاه الله خيرا هو وكل من شارك في الموضوع

وسؤالي هو كيف أستعمل البارامترات في عبارة sql عندما اريد ان ابحث عن قيمة من مربع نصedit1.text ولكن بالاستفادة من تعليمة

like حيث ان المطلوب انني ابحث عن اسم كتاب ولا ادري ماهو اسمه بالضبط ولكنني اعلم ان من بين حروفه "بحا" فاكتب في مربع النص

هذه الاحرف فقط وعند تنفيذ الاستعلامquery.open احصت على كل الكتب التي تحتوي على هذه الاحرف

واذا كان هناك امثلة على ذلك فلكم الشكر

#2

اخي الكريم بالنسبة للبارمترات يمكنك كتابة استعلام كما يلي داخل خاصية SQL لل Query

select * from TBL_Books where name like :PName

لاحظ اننا وضعنا : قبل اسم البارميتر للدلالة على انه بارميتر و اذا اردت كتابة اي بارميتر اخر ما عليك الا وضع : قبل اسمه مباشرة

وسوف يعامل معاملة بارميتر

عند كتابة الاستعلام يوجد فيه بارمترات تظهر هذه البارمترات مباشرة ضمن الخاصية Parameters حيث يمكنك رؤيتهم

الان كيف نمرر بارميتر الى الاستعلام

هناك طريقتين لعمل ذلك

انا اعتبر انّ الاولى اوضح

فلو فرضنا انه عندي Adoquery موجود في خاصية SQL لها الاستعلام السابق لتمرير قيمة الى الباميتر :PName

نكتب ما يلي

adoquery.close;
adoquery.parameters.parabyname('PName').value:= edit1.text
adoquery.open

الطريقة الثانية هي بدون معرفة اسم البارميتر

adoquery.close;
adoquery.parameters[0].value:= edit1.text;
adoquery.open

حيث انّ البامترات تكون مرتبة حسب تسلسل وروده ضمن عبارة SQL

كما يمكنك اخي الكريم بناء ال Query مباشرة و تمريرها الى عبارة SQL

و ذلك كما يلي

adoquery.close;
adoquery.sql.clear;
adoquery.sql.add('select * from TBL_Books where name like ' + ''''+  edit1.text + '''' );
adoquery.open

يمكنك اختيار اي طريقة ترغب

ارجوا ان يكون ردي واضح و انتظر اي استفسار عن اي شيئ

اهلا بك

تم تعديل هذه المشاركة بواسطة waeldalol في 25 مارس 2006 في 00:07

رب اجعلني مقيم الصلاة ومن ذريتي ربنا وتقبل دعاء.

لا تنسى: "العقل مثل العضلة كلما استخدمته أكثر كلما ازدادت قوته"

#3

السلام عليكم

عذرا للتاخر ولكني كنت مسافرا خارج القطر

شكرا على هذا الرد ولكن اود الاستفسار عن امكانية استعمال * (عدد من الحروف) او ? (حرف معين) في عبارة sql

مع Like

بعبارة اخرى ماذا علي ان اكتب للبحث عن الكتب التي تبدأ بحرف ب مثلا او تنتهي بـ (بي) مثلا وشكرا

وان مسرور لانني تعرفت على صديق سوري مثلي

#4

اهلا بك في قسم الدلفي

و ارجوا لك ان تستمر في الدخول على هذا المنتدى الرائع فعلا

بالنسبة لسؤالك

يمكنك استخدام % للدلالة على عدد غير محدود من الاحرف

مثل

Like('%s%')

سوف تحضر لك كل السجلات الت تحتوي على حرف s

بينما

Like('%s')

سوف تحضر لك كل السجلات التي تحتوي على حرف s في اخرها

و

like('s%')

سوف تحضر لك كل كل السجلات التي تبدأ بالحرف s

و طبعا كل هذا يعتمد على نوع قاعدة البيانات المستخدمة

حيث انه في Accsess هي * و في SQL Server , Oracle هي %

تم تعديل هذه المشاركة بواسطة waeldalol في 25 مارس 2006 في 00:09

رب اجعلني مقيم الصلاة ومن ذريتي ربنا وتقبل دعاء.

لا تنسى: "العقل مثل العضلة كلما استخدمته أكثر كلما ازدادت قوته"

#5

السلام عليكم

شكرا لك انني منذ 15 عام اعمل على الاكسس وانتقلت حديثا الى الدلفي لروعته وجودته

اخي الكريم قرات جوابك وسوف احاول تجربته ولكن هل يمكن ان تعطيني المثال الذي ذكرته "%s% " ولكن من خلال مربع نص اي ان المستخدم يكتب حرف ال s في مربع النص فتقوم جملة SQL بالبحث عن الكتب التي تبدأ او تنتهي او... يعني فقط اريد نص عبارة SQL

وشكرا لانني اتعبك معي

#6

السلام عليكم

لقد جربت ما قلته ولكن لم ينجح والان لدي الكود التالي وهو يعمل بلا مشكلة للبحث عن كلمة كاملة

with query1 do

begin

close

sql.Clear

SQL.Add'select Id,Name_Book,witer_Book from Books_Personal where Name_Book = :P1

Prepare

ParamByName ('P1').Asstring := edit1.Text

open;

والكود يعمل ولكن اريد تبديله ليبحث ليس عن اسم كامل للكتاب بل جزء ولقد جربت هذا الكود

where Name_Book like % :P1 فلم يعمل واعطى رسالة خطأ

وشكرا

#7

عذرا نسيت ان اخبرك انني اعمل حاليا في قاعدة البيانات DBE وشكرا

#8

يجب وضع علامتي اقتباس بعد Like لذلك لا يمكن استخدام الباميتر مع Like

لحل المشكلة استخدم الطريقة الثانية افضل

with query1 do
begin
close
sql.Clear
SQL.Add('select Id,Name_Book,witer_Book from Books_Personal where Name_Book like' + '''%' + edit1.Text  + '%''' )
open
end;

ارجو ان تكتب عبارات الكود بين عبارتي Codeو /code

لكي يظهر الكود بشكل واضح

تم تعديل هذه المشاركة بواسطة waeldalol في 25 مارس 2006 في 11:31

رب اجعلني مقيم الصلاة ومن ذريتي ربنا وتقبل دعاء.

لا تنسى: "العقل مثل العضلة كلما استخدمته أكثر كلما ازدادت قوته"

#9

السلام عليكم

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

وسوف احاول من وقت الى أخر مضايقتك بالأسئلة لكي تزاد حسناتك وشكرا

#10

ما مشكلة اخي الكريم انا جهاز متى شئت و بالخدمة

رب اجعلني مقيم الصلاة ومن ذريتي ربنا وتقبل دعاء.

لا تنسى: "العقل مثل العضلة كلما استخدمته أكثر كلما ازدادت قوته"

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

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