PDA

View Full Version : خطا در اجرای کوئری حاوی کارکتر %



Narges-s
یک شنبه 01 آذر 1388, 16:41 عصر
سلام . با اجرای کد زیر یه ارور میده دلفی :اشتباه:
میخواستم بدونم کجاش مشکل داره؟ :متفکر:


procedure TForm1.BitBtn1Click(Sender: TObject);
var
F:String;
O:String;
begin
Case ListBox1.ItemIndex of
0:F:='StdId';
1:F:='FName';
2:F:='LName';
3:F:='Byear';
end;
Case ListBox2.ItemIndex of
0:O:='=';
1:O:='>';
2:O:='>=';
3:O:='<';
4:O:='<=';
5:O:='<>';
6:O:=' like ';
end;
ADODataSet1.Close;
ADODataSet1.CommandText:='select * from std where F + O ' + QuotedStr('%'+Edit1.Text+'%');
ADODataSet1.Open;
end; //procedure




اروری که موقع اجرا میده :



---------------------------
Debugger Exception Notification
---------------------------
Project Project2.exe raised exception class EOleException with message 'Line 1: Incorrect syntax near '%1368%''. Process stopped. Use Step or Run to continue.
---------------------------
OK Help
---------------------------

Tiam121
یک شنبه 01 آذر 1388, 19:55 عصر
چرا شما دستور sql رو توي dataset نوشتيد دستورات sql رو توي adoqeuery مي نويسيم و اجرا ميكنيم فكر كنم بهتره
همچنين براي where مشخص نكرديد شرط روي چه فيلدي بايد چك شه

merced
یک شنبه 01 آذر 1388, 20:16 عصر
چرا شما دستور sql رو توي dataset نوشتيد دستورات sql رو توي adoqeuery مي نويسيم و اجرا ميكنيم فكر كنم بهتره

فرقي نمي كنه

نظر من :‌
شما % رو هميشه به دو طرف رشته اضافه مي كني و اگه فيلد StID كه احتمالاً عددي هست رو تو كوئري بياري ...... ديگه دو طرف عدد كه % نميذارند !

alinikaein
یک شنبه 01 آذر 1388, 21:10 عصر
با سلام؛

با عرض پوزش از دوستان، ولي جواب فكر نمي‌كنم هيچ كدوم از مواردي باشه كه در بالا ذكر شد.
شما فيلد‌هايي به نام F و O نداريد.

دو متغير F و O را خارج از رشته بنويسيد، مشكل‌تون حل مي‌شه.


يا علي... موفق باشيد...

Narges-s
یک شنبه 01 آذر 1388, 22:07 عصر
ببخشید آقای alinikaein من منظورتون رو متوجه نشدم!



"شما فيلد‌هايي به نام F و O نداريد. دو متغير F و O را خارج از رشته بنويسيد، مشكل‌تون حل مي‌شه."

یعنی باید چی کار کنم؟ من که این دو متغیر رو تعریف کردم! :افسرده:

DataMaster
دوشنبه 02 آذر 1388, 00:20 صبح
ADODataSet1.CommandText:='select * from std where'+ F + O + QuotedStr('%'+Edit1.Text+'%');

Narges-s
دوشنبه 02 آذر 1388, 01:25 صبح
:ناراحت: نمیدونم چرا نمیشه! بازم ارور میده! :عصبانی++: حالا چی کار کنم؟؟؟ :ناراحت:

SYNDROME
دوشنبه 02 آذر 1388, 06:48 صبح
بعد از مقدار دهی CommandText ، مقدار آن را چک کنید.
مقدار را در اینجا قرار دهید شاید دستورات قبلی درست اجرا نمی شوند.
موفق باشید

Hadi_Fayyaz
دوشنبه 02 آذر 1388, 08:28 صبح
سلام دوست عزيز
نظر دوستمون DataMaster كاملا درسته و اشكال شما هم همونيه كه گفتند:تشویق: ولي يك نكته ظريف ديگه هم هست كه ايشون احتمالا فراموش كردند شما بايد بين كلمه Where داخل String و علامت كوتيشن ( ' ) يك فاصله blank قرار بديد به شكل زير

ADODataSet1.CommandText:='select * from ExamTable where '+F+O + QuotedStr('%'+Edit1.Text+'%');

چود در غير اين صورت محتويات متغير F به كلمه Where ميچسبه و دستور شما خراب ميشه
موفق باشيد:لبخندساده:

حسین شهریاری
دوشنبه 02 آذر 1388, 08:48 صبح
سلام

رشته ارسالی به خاصیت CommandText را قبل از ارسال توسط showmessage مشاهده کنین ببینید به لحاض سینتکسی ایراد داره یا نه.خوب ممکنه توی این سر هم کردن رشته ها یه جایی دستور دچار کم و کاستی بشه.

موفق باشید

دلفــي
دوشنبه 02 آذر 1388, 18:18 عصر
فرقي نمي كنه

نظر من :‌
شما % رو هميشه به دو طرف رشته اضافه مي كني و اگه فيلد StID كه احتمالاً عددي هست رو تو كوئري بياري ...... ديگه دو طرف عدد كه % نميذارند !

علامت % برای فیلدهای از نوع Number به این صورت کار نمی کند ، اگر می خواهید شرط شما روی فیلدهای عددی هم عمل کند به صورت زیر کدتون رو تغییر بدید :




procedure TForm1.BitBtn1Click(Sender: TObject);
var
F:String;
O:String;
begin
Case ListBox1.ItemIndex of
0:F:='StdId';
1:F:='FName';
2:F:='LName';
3:F:='Byear';
end;
Case ListBox2.ItemIndex of
0:O:='=';
1:O:='>';
2:O:='>=';
3:O:='<';
4:O:='<=';
5:O:='<>';
6:O:=' like ';
end;
ADODataSet1.Close;
ADODataSet1.CommandText:='select * from std where '+ F + O+ ' :Type1';
ADODataSet1.Parameters.ParamByName('Type1').Value :='%'+Edit1.Text+'%';
ADODataSet1.Open;
end;

حسین شهریاری
سه شنبه 03 آذر 1388, 11:37 صبح
یه راه بهتر هم من میگم:

روبروی where بیاین فیلد نوع عددی را با Cast یا Convert تبدیل کنین به نوع رشته ای و کارتونا ادامه بدید

شبه کد SQl :


select * from Customers
where Cast(CustomerID As Char(10)) like '123%'


این کد دقیقا جواب میده فقط پارامتر ورودی تابع Cast را حتما برای اطمینان بیشتر توی Help مربوط به Sql ببینید.

موفق باشید