PDA

View Full Version : انتخاب رکورد در DBGrid بر اساس Edit



داوود
سه شنبه 04 مرداد 1384, 08:28 صبح
من یک table دارم که یک فایل Index بر اساس نام خانوادگی داره. حال در یک فرم یک DBGrid که به این Table لینک شده و یک Edit دارم و می خواهم به محض زدن هر حرفی در Edit مکان نما در Dbgrid به اولین رکورد که نام خانوادگی آن در DBGrid با آن حرف شروع شده ببرد.
بعنوان مثال اگر در Edit بنویسم "د" اولین رکورد که با نام "د" شروع شده نمایش داده شود . بعد هنگامی که "دا" رو زدم اولین رکورد که با "دا" شروع شده به همین ترتیب تا نام کامل شخص.
خواهش می کنم راهنمایی کامل .

ehsane
سه شنبه 04 مرداد 1384, 10:02 صبح
در OnCheng ادیت خود دستور زیر را وارد کنید :

table1.locate('name',Edit1.text,[lopartialkey]) ;
البته بجای Name نام فلید مورد نظر خود را بنویسید

Tarrah
سه شنبه 04 مرداد 1384, 10:28 صبح
بعد دستوری که دوستمون گفتن gotonearest هم بنویسید.

Kamyar.Kimiyabeigi
سه شنبه 04 مرداد 1384, 10:38 صبح
البته اگر از trim هم استفاده کنی جهت محکم کاری بد نیست


Table1.Locate('Last Name', Trim(Edit1.Text), [lopartialkey]);

babak869
سه شنبه 04 مرداد 1384, 23:03 عصر
با سلام
در رویداد On Change ادیت یا دی بی ادیت این کد رو بنویس.البته اگر از Ado Connection استفاده می کنی به اول تمام خطوط کلمه Ado رو اضافه کن

Query1.Active:=FALSE;
Query1.SQL.Clear;
Query1.SQL.Add('SELECT * ');
Query1.SQL.Add('FROM Table1');
Query1.SQL.Add('WHERE (family LIKE ''%'+ EDIT1.TEXT+'%'') ');
Query1.ExecSQL;
Query1.Active:=TRUE;

merced
چهارشنبه 05 مرداد 1384, 04:41 صبح
فکر کنم مثال خوبی باشه

...................................

NOROOZY
چهارشنبه 05 مرداد 1384, 07:25 صبح
روش آقا بابک روش خوبی است ابن کد هم بد نیست فقط اشکالش اینه که فیلتر میکنه
ADOQuery1.Close ;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Text := 'SELECT TBL_TelNums.Gesmat, TBL_TelNums.Name, TBL_TelNums.LastName, TBL_TelNums.TelNum, TBL_TelNums.Dakhley, TBL_TelNums.Mobil'+
' FROM TBL_TelNums ' +
' WHERE (((TBL_TelNums.LastName) Like '+#39+MaskEdit1.Text+'%'+#39+'))'+
' ORDER BY LastName ';

ADOQuery1.Open;

داوود
چهارشنبه 05 مرداد 1384, 14:03 عصر
با تشکر از کلیه دوستان که راهنمایی فرمودند.
در خصوص کار با Locate باید بگویم که هیچ تاثیری در DBGrid من نداشت.
اما در خصوص کار با Query به محض تایپ اولین حرف در Edit با پیغام زیر مواجه می شوم.
ضمنا چجوری میشه DataBase یک Query رو تعریف کرد . چون هر مسیری که در محل DataBaseName وارد می کنم Query آن مسیر را نمی شناسد و پیغام خطا می دهد.

Kamyar.Kimiyabeigi
چهارشنبه 05 مرداد 1384, 15:46 عصر
شما باید در BDE administrator یک new database alis کنید و در dellphi اون alias رو به query تون نسبت بدین (البته بسته به نوع databese تون نوع alias تونم فرق میکنه)

babak869
چهارشنبه 05 مرداد 1384, 16:26 عصر
با سلام
این اشکال رو از دیتابیس میگیره
شما در رویداد Oncreate فرم بنویس
Table1.tablename:='yourtableName.db';
Table1.Active:=true;
و حتما دیتابیست رو در پوشه ای که برنامه ت رو ذخیره کردی بریز.
شما کویری را در برنامه مینویسی یعنی وقتی در رویداد OnChange ادیت باکس مینویسی با هر بار تغییر کردن محتوا این دستور اجرا میشه.در ضمن شما فقط 1 کویری روی فرم بزار و اونو به Table ارتباط بده دیگه بقیه مسایل هنگام اجرای برنامه تنظیم میشه.امیدوارم که مشکلتون حل بشه.من 1 نمونه برنامه میزارم که استفاده کنید
موفق باشید

Kamyar.Kimiyabeigi
چهارشنبه 05 مرداد 1384, 16:47 عصر
البته شما میتونید به جای Alias از مسیر فایل استفاده کنید بدون ذکر نام فایل ،
تقریبا به همان شکلی که نوشته بودید فقط نام جدول (مثل Table1.db) رو ننویسید و
نام جدول رو در TableName قرار بدید.

ولی مطمئنا" Locate جواب خواهد داد.

داوود
پنج شنبه 06 مرداد 1384, 20:40 عصر
مجددا از کلیه دوستان متشکرم
با قراردادن بانک اطلاعاتی در مسیر برنامه دیگر پیغام خطایی دیده نمی شود ولی با تایپ حروف در Edit نشانگر DBgrid هیچ تغییری نمی کند.

parhizkar2000
پنج شنبه 06 مرداد 1384, 22:50 عصر
این کد زیر رو من مستقیم از تو برنامه خودم در آوردم و چندین برنامه هم هست که کار می کنه


procedure TForm1.Edit1Change(Sender: TObject);
begin
data.tnasb.SetKey;
data.Tnasb.FieldByName('name').AsString:=trim(edit 1.Text);
data.tnasb.GotoNearest;
end;

این کد نویسی هم توی انجا شده یه معضل

nahdi
جمعه 07 مرداد 1384, 03:14 صبح
سلام اقای داود
مشکل شما حل شد؟
( من یک table دارم که یک فایل Index بر اساس نام خانوادگی داره. حال در یک فرم یک DBGrid که به این Table لینک شده و یک Edit دارم و می خواهم به محض زدن هر حرفی در Edit مکان نما در Dbgrid به اولین رکورد که نام خانوادگی آن در DBGrid با آن حرف شروع شده ببرد.
بعنوان مثال اگر در Edit بنویسم "د" اولین رکورد که با نام "د" شروع شده نمایش داده شود . بعد هنگامی که "دا" رو زدم اولین رکورد که با "دا" شروع شده به همین ترتیب تا نام کامل شخص.)


اگه راه‌حلی پیدا کردید مرا هم در این مورد راهنمایی کنید.
ممنون..

parhizkar2000
جمعه 07 مرداد 1384, 23:16 عصر
این کد دقیقا به همین منظور است


procedure TForm1.Edit1Change(Sender: TObject);
begin
data.tnasb.SetKey;
data.Tnasb.FieldByName('name').AsString:=trim(edit 1.Text);
data.tnasb.GotoNearest;
end;

Kamyar.Kimiyabeigi
شنبه 08 مرداد 1384, 07:56 صبح
من نمیدونم شما چرا با دستور locate مشکل دارین این دستور بهترین و آسون ترین دستور برای این کاره

parhizkar2000
شنبه 08 مرداد 1384, 21:37 عصر
هر کی یه روش داره اونهم خوبه این هم بهتره به نظر من

MiRHaDi
پنج شنبه 13 مرداد 1384, 01:13 صبح
سلام
استفاده از query در این کار درست نیست
اگر حتی میخواهید فقط آنهایی که اولشان حرف خاصی است در لیست باشد از filter استفاده کنید
برای این کار از locate میتونید استفاده کنید
اگر مشکلی دارید از findfirst استفاده کرده و بعد recno را معادل آن کنید
بای

مصطفی مختاری
یک شنبه 27 مرداد 1387, 09:30 صبح
من 1 نمونه برنامه میزارم که استفاده کنید
موفق باشید

آقا بابک در مورد تغییر ظاهر Navigator در برنامه نمونه ای که گذاشته اید می شه بیشتر توضیح بدید ؟