ورود

View Full Version : راهنمایی در مورد نحوه استفاده از یک متغیر در یک پارامتر



tefos666
شنبه 18 اسفند 1386, 10:05 صبح
:عصبانی++:
با سلام خدمت دوستان - من از ADOQUERY در یک برنامه برای جستجو استفاده کرده ام
در این جستجو من یک دفتر تلفن دارم با سه حالت 1- افراد عادی - 2- رانندگان آزانس 3- مراکز مهم

در داخل بانک اطلاعاتی 3 جدول دارم یعنی چون بانک من access هست و چون نمیدونستم
که اصلا میشه view مثل sql داشت مجبور شدم سه تا جدول بزارم

حالا من تو فرم برنامم برای اینکه برنامه شکیل باشه مجبور شدم یک edit بزارم برای جستجو
و برای فیلتر تر شدن جستجو combobox گذاشتم

یکی برای جدول ها (رانندگان - افراد عادی - مراکز مهم)

یکی برای فیلتر جستجو (بر حسب نام - بر حسب نام خانوادگی - بر حسب تلفن)


و برای این ها متغیر سراسری (global) تعریف کردم

store_tbl:string برای نگه داشتن نام جدول ها
type_tbl:string برای نگه داشتن فیلتر جستجو

به صورت زیر

نام فیزیکی جدولها رو اینطوری مچ کردم


if ComboBox3.Text='ranandeh' then
store_tbl:='pbook_driver';

if ComboBox3.Text='afrad' then
store_tbl:='pbook_afrad';

if ComboBox3.Text='sazman' then
store_tbl:='pbook_sazman';

و برای جستجو نیز همینطور

if ComboBox1.Text=naam' then
type_tbl:='name';
if ComboBox1.Text='famiily' then
type_tbl:='family';
if ComboBox1.Text='telephon' then
type_tbl:='phone';

وقتی رو جستجو کلیک میکنم از پارامتر استفاده میکنم تا کوئریم کامل بشه

query.sql.text:='select * from '''+storet_tbl+''' where '''+type_tbl+''' = :@param;

ولی وقتی پارامتر رو استفاده میکنم خطا میده نمیدونم چه جوری متغیرهام رو تو کوئری استفاده کنم
query.Parameters.ParamByName('@param').Value:= Edit1.Text;

ضمنا
clear
close
open
execsql
هم میکنم - شرمنده سئوالم طولانی شد

delphiprog3000
شنبه 18 اسفند 1386, 15:06 عصر
سلام دوست عزیز.

من بیشتر از این راه استفاده میکنم که دستور sql رو به یه متغییر از نوع رشته اختصاص میدم و بعد اون رو به خاصیت text کوری ارسال میکنم.



var str1:string;

str1:='select * from tblcode where code_id like'+QuotedStr('%'+edt_search_code.Text);

with qry_search_code_id do
begin
Close;
SQL.Text:=str1;
Open;
end;
و این هم راه مورد نظر شما:



With ADOQuery1 Do
Begin
Close;
SQL.Text:='Select * From TblCustomer Where Id_C=:Id';
Parameters.ParamByName('Id').Value:=(SCid.Text);
Open;

If Not IsEmpty Then
Begin
Cid.Text:=FieldValues['Id_C'];
CName.Text:=FieldValues['Name_C'];
Cfamily.Text:=fieldvalues['Family_C'];
end;
end;


موفق باشید.......

tefos666
سه شنبه 21 اسفند 1386, 09:15 صبح
ممنون دوست عزیز از راهنماییتون راه شما درسته ولی مشکل من همچنان باقی
یعنی اگر واضح تر بگم من میخوام نام جدول رو از یه متغیر بخونم و همچنین جستجو بر اساس (نام و نام خانوادگی و شماره تلفن) باشه که این هم باز از یک متغیر خونده میشه (حاصل انتخاب combobox) و در آخر پارامتر رو هم به یک textbox بدم

یعنی به عبارت ساده تر

var
tabalename:string
type_search:string

begin
select * from tablename where type_search= :param
end
و در آخر به صورت زیر استفاده کنم

parameters.paramsbyname('param').value:=edit1.text
که در بالا من با انتخاب combobox اول نام جدول مورد نظر رو برمیگردونم
و با انتخاب combobox دوم نوع جستجو (فیلد جستجو)
و در قسمت آخر param کلمه مورد جستجو رو
ولی شما تو متد بالا در پست قبلی نهایتا param رو تغییر دادی که به کار من نیومد

اساسا من چون تو access نمیتونستم مثل sql یک view داشته باشم این راه به ذهنم رسید که جواب نداد

delphiprog3000
سه شنبه 21 اسفند 1386, 10:42 صبح
سلام دوست عزیز .

متاسفانه زیاد از کار شما آگاه نشدم.

میشه واضح تر بگی و یا کدهای مورد استفاده رو قرار بدی تا بیشتر بشه به شما کمک داد....

و لطفا دقیق تر بگو کجا دچار اشکالی؟؟؟

tefos666
پنج شنبه 23 اسفند 1386, 12:00 عصر
شرمنده دوست عزیز اینقدر سوال میکنم :

من سوالم رو با تصویر میزارم شاید راحت تر بتونی کمکم کنی :

1- من 3 تا جدول جداگانه دارم (شماره تلفن رانندگان - شماره تلفن مراکز مهم - شماره تلفن سایر افراد) که میخواهم با قرار دادن یک textbox در فرم قابلیت جستجو در 3 جدول را داشته باشم و ضمنا اطلاعات جستجو شده تنها در یک dbgrid نمایش داده شود - ضمن
اینکه اطلاعات پایه و ورودی این 3 جدول هرکدام از یک dbgrid جداگانه تغذیه میگردد

2- من برای راحت تر کردن جستجو و سریعتر به نتیجه رسیدن در فرم 2 تا combobox قرار دادم
یکی برای انتخاب جدول (یکی از 3 جدول فوق الذکر) و یکی دیگر برای انتخاب فیلدی که جستجو بر آن اساس صورت پذیرد مثلا (نام - نام خانوادگی - شماره تلفن)

3- حالا من result خروجی یا همان item انتخاب شده از combobox را در 2 متغیر جداگانه ذخیره کردم تا از آنها استفاده کنم

4- با توجه به گفته های بالا حالا من در حقیقت 2 متغیر دارم و یک پارامتر که میخوام اونو تو کوئری استفاده کنم


دیگه توضیح از این کاملتر به ذهنم نمیرسه !!! :( :لبخند:


http://barnamenevis.org/forum/attachment.php?attachmentid=15389&stc=1&d=1205398672

http://barnamenevis.org/forum/attachment.php?attachmentid=15391&stc=1&d=1205398672

http://barnamenevis.org/forum/attachment.php?attachmentid=15390&stc=1&d=1205398672

delphiprog3000
جمعه 24 اسفند 1386, 15:48 عصر
سلام دوست عزیز.

متوجه منظور شما شدم.

لطفا پیغام ارور رو بنویس...

tefos666
جمعه 24 اسفند 1386, 16:54 عصر
سلام دوست عزیز

وقتی از این روش استفاده میکنم

query1.sql.text:='select * from :tl where :fl = :@param';0
query1.Parameters.ParamValues['tl']:=store_tbl;0
query1.Parameters.ParamValues['fl']:=type_tbl;0
query1.Close();0
query1.Parameters.ParamByName('@param').Value:= Edit1.Text;0
query1.Open();0

با پیغام خطای زیر مواجه میشم

parametr tl not found

و وقتی از این روش میرم

query1.sql.text:='select * from '''+store_tbl+''' where '''+type_tbl+''' = :@param';0
query1.Close();0
query1.Parameters.ParamByName('@param').Value:= Edit1.Text;0
query1.Open();0

با خطای زیر مواجه میشم

syntax error in query . incomplete query cluse

ضمنا تو اولین پست نوشتم چجوری مقدار متغیرهام رو با combobox ها مچ کردم

بازم شرمندتم دوست عزیز - خجالت زدمون کردی :اشتباه: