PDA

View Full Version : like & parameters



beginner63
دوشنبه 26 فروردین 1387, 17:48 عصر
سلام
من یک کوئری به شکل زیر نوشتم:

sqlstr:='select distinct percode,name,family,cor,unit,madrak from '
+strtable
+' where '+strtable+'.'+strfield+' like :p1'+' %';
adodataSet1.Close;
adodataset1.CommandText:='';
adodataset1.CommandText:=sqlstr;
adodataset1.Parameters.ParamByName('p1').Value:=st rsearch;
adodataset1.Open

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


Line 1:Incorrect syntax near '%'

نتونستم درستش کنم،کلافه شدم
لطفا راهنمایی کنید

delphiprog3000
دوشنبه 26 فروردین 1387, 18:23 عصر
سلام.
ارور برنامه به شما میگه نزدیک عبارت ' % ' مشکلی وجود داره.

آیا با تریس گذاری کار کردید که بتونید مقادیر ارسال شده رو ببینید.

و یکی دیگه استفاده از Sql profiler که در خود sql وجود داره.

این متغییر p1 رو کجا تعریف کردید؟ از چه نوعی است؟ در ضمن توضیح بیشتری در مورد نوع دهی متغییرهاتون بگید.

در ضمن فاصله هر کتیشن یا (' ') رعایت کنید.

به این صورت:


sqlstr:='select distinct percode,name,family,cor,unit,madrak from '
+strtable
+' where '+ strtable +'.'+ strfield +' like :p1 ' + ' % ';

beginner63
سه شنبه 27 فروردین 1387, 07:58 صبح
آیا با تریس گذاری کار کردید که بتونید مقادیر ارسال شده رو ببینید.
کد زیر بدون مشکل کار میکنه:

'select distinct percode,name,family,cor,unit,madrak from '
+strtable
strtable نام جدول هست
strfield هم نام فیلد مورد جستجو هست
p1 هم مقدارش رو از edit می گیره.

در ضمن فاصله هر کتیشن یا ('') رعایت کنید.
زمانی که از پارامتر استفاده میشه که نیازی به ( " ) نیست. همون ( ' ) جواب میده

rmb_ali
سه شنبه 27 فروردین 1387, 08:31 صبح
شما قبل از اینکه کوئری تون رو اجرا کنید متن اونو تریس کنید ببینید کوئری که تهیه شده درست هست یا نه منظورم اینه که adodataset1.CommandText رو watch کنید

rmb_ali
سه شنبه 27 فروردین 1387, 08:42 صبح
این کد رو هم تست کن


sqlstr:='select distinct percode,name,family,cor,unit,madrak from '
+strtable
+' where '+strtable+'.'+strfield+' like '+edit1.text ' %';

omid1240
سه شنبه 27 فروردین 1387, 12:06 عصر
sqlstr:='select distinct percode,name,family,cor,unit,madrak from '
+strtable
+' where '+strtable+'.'+strfield+' like '''+strsearch+'%''';
adodataSet1.Close;
adodataset1.CommandText:=sqlstr;
adodataset1.Open'

rmb_ali
سه شنبه 27 فروردین 1387, 12:39 عصر
sqlstr:='select distinct percode,name,family,cor,unit,madrak from '
+strtable
+' where '+strtable+'.'+strfield+' like '''+strsearch+'%''';
adodataSet1.Close;
adodataset1.CommandText:=sqlstr;
adodataset1.Open'



دوستمون درست میگه باید مقدار strsearch داخل کوتیشن باشه از فانکشن quotedstr هم میتونی استفاده کنی

beginner63
چهارشنبه 28 فروردین 1387, 11:17 صبح
دوستان عزیز از کمک های همگی کمال تشکر رو دارم. اما مطلبی که هست من فقط میخوام از parameter استفاده کنم.

vcldeveloper
چهارشنبه 28 فروردین 1387, 12:20 عصر
اون % بعد از :p1 چی هست؟ اگر هدفتون اینه که همه رکوردهایی که مقدار فیلد strFieldشون با p1 شروع میشه برگشت داده بشند، باید اون % را هم جزو p1 بگیرید، یعنی:


adodataset1.Parameters.ParamByName('p1').Value:=st rsearch + '%';