PDA

View Full Version : مشکل جستجوی فیلد در adoquery



delphiprog3000
چهارشنبه 01 اسفند 1386, 10:03 صبح
با سلام به دوستان و اساتید محترم سایت:

اخیرا برای من مشکلی پیش اومده که در رابطه با adoquery و پیغام خطایی که ایجاد میشود به این شکل میباشد.

Incorrect syntax near where




که مربوط به خالی بودن رشته Str1 من میباشد.
واین هم کد من:


flag:=false;
if (edt_code_id.Text<> '') then
begin
flag:=true;
str1:=' code_id like '+QuotedStr('%'+edt_code_id.Text);
end;
if (edt_name.Text<> '') then
begin
if flag then
begin
str1:=str1+'and';
str1:=' name like '+QuotedStr('%'+edt_name.Text);
flag:=true;
end
else str1:=' name like '+QuotedStr('%'+edt_name.Text);
if (edt_family.Text<> '') then
begin
if flag then
begin
str1:=str1+'and';
str1:=' family like '+QuotedStr(edt_family.Text);
flag:=true;
end
else str1:=' family like '+QuotedStr(edt_family.Text);
end;
end;


if not(edt_name.Text='') or not(edt_family.Text='') or not(edt_code_id.Text='') or not(rdb_sort.Checked=false) then
begin
if flag2 then
begin
with Qry_search_customer do
begin
close;
SQL.text:=' select * from tblcustomer order by counter';
Open;
end;
end
else
with Qry_search_customer do
begin
close;
sql.Text:=' select * from tblcustomer where '+str1;
open;
end;
end;

مشکل من در آخرین فیلد که فیلد فامیلی است. مه من با تریس گذاری و Sql profiler متوجه شدم که مقداری به رشته Str1 اختصاص داده نمیشود.

از دوستان و اساتیدی که در این ضمینه اطلاع دارند. تقاضا دارم اینجانب را راهنمایی کنند.

از زحمات شما متشکرم (بابک)

SYNDROME
چهارشنبه 01 اسفند 1386, 12:29 عصر
فکر کنم مقابل شرط Where چیزی وجود ندارد.
مقدار sql.textرا بگیرید ببینید چه مقداری بر می گردد.
موفق باشید

Mahyaa
چهارشنبه 01 اسفند 1386, 16:39 عصر
خوب جوابش رو خودتون گفتید دیگه ! کلا Str1 مقدار دهی نمیشه . اگر کدی که نوشتید دقیقا همونی هست که در برنامه استفاده میکنید ، احتمالا هیچکدام از شرط هایی که چک میکنید ، مقدار Edit ها خالی هست یا نه ، True نمیشه .

مقدار Str1 رو در Watch Window دیباگر قرار بدید و برنامه رو Trace کنید ببینید از ابتدای این قطعه کد تا آخرش چه اتفاقی برای Str1 میفته .

delphiprog3000
چهارشنبه 01 اسفند 1386, 20:17 عصر
با سلام و تشکر از توجه دوستان عزیزم.

قبلا هم توضیح دادم با تریس گذاری و چک کردن مقادیر از طریق Sql profiler تست زدم.

وخیلی عجیب بود که تا زمانی که دو شرط اول یعنی فیلدهای کد و نام مقدار دهی نشود. کد سوم که فامیلی باشد اعمال نمیشود

به همین علت میخواستم از دوستان بپرسم به چه علت این اتفاق نمی افتد. و مقدار str1 خالی می ماند.

همانطور که توضیح دادم به تنهای نمیتوان فیلد فامیلی را چک کرد حتما باید یکی از دو فیلد بالا پر شود.

به امید حل مشکل........

با تشکر (بابک)

حمیدرضاصادقیان
چهارشنبه 01 اسفند 1386, 20:18 عصر
سلام.شما در کد بالایی داری flag رو مقدار دهی میکنی ولی در قسمت پایین کدت داری مقدار flag2 رو کنترل میکنی که شرطت رو بذاری.چون کاری که کردی درسته و اگر شرط پایین رو درست کنی احتمالا مشکلت حل میشه.

delphiprog3000
چهارشنبه 01 اسفند 1386, 20:24 عصر
سلام دوست عزیز.

از پاسخ شما ممنون ولی این Flag2 برای اینه که بتوان ترتیب ورود رو چک کرد. و با یک رادیو باتون مقدار دهی میشود.

فکر نمیکنم مربوط به این باشه چون امتحان کردم و بازهم اتفاقی نیوفتاد.

ولی به نظر شما دیگه راهی وجود داره.؟؟؟ کد دیگر من اینه که گذاشتم و این جواب میده.



flag:=false;
if (edt_tckt_id.Text<>'') then
begin
flag:=true;
str1:=' tckt_id like '+QuotedStr(edt_tckt_id.Text);
end;
if (edt_from.Text<>'') then
if flag then
begin
str1:=str1+'and';
str1:=' [from] like '+QuotedStr(edt_from.Text);
flag:=true;
end
else str1:=' [from] like '+QuotedStr(edt_from.Text);
if (edt_dest.Text<>'') then
if flag then
begin
str1:=str1+'and';
str1:=' dest like '+QuotedStr(edt_dest.Text);
end
else str1:=' dest like '+QuotedStr(edt_dest.Text);

if not (edt_tckt_id.Text='')or not (edt_from.text='') or not (edt_dest.Text='')then
with Qry_search_ticket do
begin
close;
sql.Text:='select * from tblticket where '+str1;
open;
end;
end;
اگه میبینید مشکلی وجود داره لطفا منو در جریان بزارید.......منتظرم.........
باز هم از توجه شما متشکرم......

delphiprog3000
یک شنبه 12 اسفند 1386, 19:25 عصر
با سلام مجدد.

مشکل کار من از این قسمت بود. که میبایست در پایان شرط خود یک end قرار بدم.




if (edt_name.Text='') and (edt_family.Text='') and (edt_code_id.Text='') and (rdb_sort.Checked=false) then
begin
ShowMessage('!!!åí ãæÑÏí íÇÝÊ äÔÏ');
edt_name.SetFocus;
with Qry_search_customer do
begin
close;
SQL.Text:='select * from tblcustomer where code_id like 1';
open;
flag3:=true;
end;
end;
flag:=false;
if (edt_code_id.Text<> '') then
begin
flag:=true;
str1:=' code_id like '+QuotedStr(edt_code_id.Text+'%');
end;
if (edt_name.Text<> '') then
begin
if flag then
begin
str1:=str1+ ' and ';
str1:=' name like '+QuotedStr(edt_name.Text+'%');
flag:=true;
end
else str1:=' name like '+QuotedStr(edt_name.Text+'%');
end;====================================> در این قسمت مشکل داشت
if (edt_family.Text<> '') then
begin
if flag then
begin
str1:=str1+' and ';
str1:=' family like '+QuotedStr(edt_family.Text+'%');
flag:=true;
end
else str1:=' family like '+QuotedStr(edt_family.Text+'%');
end;


با گذاشتن end مشکلم حل شد
ولی باز هم از توجه دوستان متشکرم.......