PDA

View Full Version : سوال: چرا جستجو نمی کنه!!!



AliReza Vafakhah
جمعه 29 شهریور 1387, 02:26 صبح
با سلام : انشاالله که نماز روزه هاتون قبول باشه .

دوستان من چند وقتی که دارم روی یک پروژه مرتبط با پایگاه داده در دلفی 2007 کار می کنم

تمام کارها خوب پیشرفته به جز جستجو . من در برنامه ام با دستور SQL و با شی AdoQuery جستجو می کنم ، جستجو جواب میده اما در هنگام جستجو مقدار بعضی از
فیلده ها را نمی گردونه یا راحت بگم جستجو عمل نمی کنه

برای مثال :

یک جدول دارم که هاوی رکوردها زیر است

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

وقتی من فیلد دکترا را جستجو می کنم ، جستجو عمل می کنه و فیلد پیدا میشه اما وقتی فیلد کاردانی به کارشناسی را جستجو می کنم ، جستجو عمل نمی کنه و فیلد پیدا نمیشه .

در ضمن من در دستور SQL از پارامتر استفاده کرده ام .

حالا خواهش من از دوستان این است که یک دستور بهتری برای جستجو (فقط دستور SQL )به من بدهند یا اگر ترفندی در انجام بهتر جستجو بلد هستن مرا راهنمایی کنند

با تشکر از همه برنامه نویسان ایرانی

vcldeveloper
جمعه 29 شهریور 1387, 02:30 صبح
دستور SQLایی که نوشتید را + جوابی که از این دستور انتظار دارید، اینجا بزارید.

AliReza Vafakhah
جمعه 29 شهریور 1387, 13:28 عصر
دستور SQLایی که نوشتید را + جوابی که از این دستور انتظار دارید، اینجا بزارید.

این دستور SQL من است




Q_Fun.Active:=False;
Q_Fun.SQL.Clear;
Q_Fun.SQL.Add('Select '+FieldName +' from '+TableName +' where '+Value+' = '+FieldName);
Q_Fun.Active:=True;



FieldName نام فیلد مورد نظر از جدول ; TableName هم نام جدول و Value مقداری است که هر سه متغیر برای جستجو تو سط پارامتر دریافت میشوند.


لطفا کمک کنید

Hsimple11
جمعه 29 شهریور 1387, 13:59 عصر
در مورد دستور Select و Where Clause تحقیق کنید.


Select MyField Form MyTable Where Condition

Value نام کدام فیلد شماست؟

کاردانی به کارشناسی، دکتری و ... فیلدهای شما هستند که هرکدام دارای رکورد هستند و شما رکوردها را کوئری میکنید.

مثلا میخواهید نام یک فرد را در فیلد افراد دکتری از جدول MyTable جستجو کنید :


SELECT Doctora From MyTable Where Doctora=NameFard

که نام فرد پارامتر دریافتی نام خواهد بود.

AliReza Vafakhah
جمعه 29 شهریور 1387, 14:15 عصر
در مورد دستور Select و Where Clause تحقیق کنید.


Select MyField Form MyTable Where Condition

Value نام کدام فیلد شماست؟

کاردانی به کارشناسی، دکتری و ... فیلدهای شما هستند که هرکدام دارای رکورد هستند و شما رکوردها را کوئری میکنید.

مثلا میخواهید نام یک فرد را در فیلد افراد دکتری از جدول MyTable جستجو کنید :


SELECT Doctora From MyTable Where Doctora=NameFard

که نام فرد پارامتر دریافتی نام خواهد بود.

دوست عزیز از کمکت ممنونم اما : من با دستورهای SQL تا حدودی آشنایی دارم (دانشجو همین رشته ام)
رکوردهای دکترا , کاردانی به کارشناسی , ... همه از یک جدول هستند. و هنگام جستجو
کاردانی به کارشناسی ، جستجو عمل نمی کند (خطایی ایجاد نمی شود ؛ عنصر کلید یافته نمی شود)

vcldeveloper
جمعه 29 شهریور 1387, 16:54 عصر
هنگام جستجو
کاردانی به کارشناسی ، جستجو عمل نمی کند
اسم واقعی فیلدها چی هست؟ همین اسم های فارسی را برای فیلدها گذاشتید؟



در ضمن من در دستور SQL از پارامتر استفاده کرده ام .
اینی که شما استفاده کردید استفاده از پارامتر نیست. اگر مثلا SQL شما اینطوری بود:

SELECT NyField FROM MyTable WHERE MyField = :Param1
اون وقت میشد یک کوئری دارای پارامتر. و در اجراهای بعدی، فقط کافی بود مقدار Param1 را از طریق خصوصیت Parameters.ParamValue مشخص کنید، و تغییری در SQL ندید. البته نمی تونید از پارامتر برای تعیین نام جدول یا نام فیلدها استفاده کنید.

SYNDROME
جمعه 29 شهریور 1387, 17:09 عصر
این دستور SQL من است




Q_Fun.Active:=False;
Q_Fun.SQL.Clear;
Q_Fun.SQL.Add('Select '+FieldName +' from '+TableName +' where '+Value+' = '+FieldName);
Q_Fun.Active:=True;

FieldName نام فیلد مورد نظر از جدول ; TableName هم نام جدول و Value مقداری است که هر سه متغیر برای جستجو تو سط پارامتر دریافت میشوند.
لطفا کمک کنید

جای Value و FieldName را عوض کنید و به شکل زیر بنویسید.


Q_Fun.SQL.Add('Select '+FieldName +' from '+TableName +' where '+FieldName+' = '+Quotedstr(Value));

موفق باشید

Hsimple11
جمعه 29 شهریور 1387, 17:23 عصر
ُSelect و Parameters را در بخش SQL SERVER جستجوی کنید.

AliReza Vafakhah
جمعه 29 شهریور 1387, 17:32 عصر
از کمک همه ممنونم
ولی من از این دستور هم استفاده کرده ام باز هم جواب نداد!




ADOQuery1.Active:=False;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add('Select * from TBL_SchoolTime Where Sch_Name=:Pfind');
ADOQuery1.Parameters.ParamByName('PFind').Value:=E dit1.Text;
ADOQuery1.Active:=True;



راستی نام تمام فیلدها هم به زبان انگلیسی هست مثل ::Sch_Name که هاوی نام مقطع ها تحصیلی است :


از کمکتون ممنونم باز هم کمک کنید چون من حدود 5 روز در این موضوع گیر کردم ، و در اینترنت خیلی جستجو کردم و به یک جواب رسیدم که از dbisam جهت کار با پایگاه داده استفاده کنم.


آیا dbisam بهتر از ADO است و مشکلی ندارد.

Hsimple11
جمعه 29 شهریور 1387, 17:39 عصر
"حاوی"

ADO یک واسط است که شما را به بانک Connect میکند.

AliReza Vafakhah
جمعه 29 شهریور 1387, 17:44 عصر
"حاوی"

ADO یک واسط است که شما را به بانک Connect میکند.

منظور من همان dbGo و BDE در دلفی 2007 است.

samprp
جمعه 29 شهریور 1387, 20:13 عصر
مشکل شما دقیقا چیه؟
اصلا برا چه کاری می خوای جستجو کنی ؟
چه فیلد هایی رو می خوای برگردونی؟
فیلد ها چه مقادیری ممکنه داشته باشن (از نظر نوع) ؟
نام فیلد ها چیه ؟

ببینید فکر کنم مشکل شما به ADO و اسکوئل و اینا مرتبط نباشه
احتمالا کوئری رو اشتباه نوشتی !!!
لطفا بیشتر توضیح بده

AliReza Vafakhah
جمعه 29 شهریور 1387, 20:59 عصر
دوستان من کارو راحن می کنم یک نمونه از سورس جستجو را در اختیارتون قرار میدم .

لطفا کمک کنید این جستجو بد جور حال من رو گرفته.

حالا خودتون هم امتحان کنید و ببینید.

samprp
شنبه 30 شهریور 1387, 02:18 صبح
سلام
این جوری که من تست کردم با حرف ی مشکل داره چون دکترا رو می یاره ولی لیسانس ، فوق لیسانس و کادانی و اینا رو نمی یاره . الان اکسس ندارم ولی اتحمالا تو تنظیماتش چیزی برا تغییر این مورد داره . منم قبلا این مشکل رو داشتم ولی وقتی به D2007 سوئیچ کردم خود به خود درست شد (با اینکه سیستمم هنوز مشکل حرف پ و ژ رو داره ) .

AliReza Vafakhah
شنبه 30 شهریور 1387, 03:22 صبح
سلام
این جوری که من تست کردم با حرف ی مشکل داره چون دکترا رو می یاره ولی لیسانس ، فوق لیسانس و کادانی و اینا رو نمی یاره . الان اکسس ندارم ولی اتحمالا تو تنظیماتش چیزی برا تغییر این مورد داره . منم قبلا این مشکل رو داشتم ولی وقتی به D2007 سوئیچ کردم خود به خود درست شد (با اینکه سیستمم هنوز مشکل حرف پ و ژ رو داره ) .

دوست عزیز از کمکت سپاس گذارم .

خود من هم به این موضوع شک داشتم که Query در دافی با بعضی از کاراکترها در رشته جواب نمیده .

حالا من از شما خواهش می کنم اگر امکان دارد من را در این رابطه بیشتر کمک کنید و بگید که چگونه این حساسیت را در دلفی بردارم (منظورم تشخیص کاراکترها است).

با تشکر

samprp
شنبه 30 شهریور 1387, 08:37 صبح
من الان اکسس نصب ندارم که امتحان کنم.
ولی شاید یه سری تنظیمات در هنگام ایجاد یک پایگاه داده جدید وجود داشته باشه
اونا رو چک کنید شاید یه کی به این مشکل ربط داشته باشه .